Redis主从配置及使用KeepAlived实现Redis高可用

本文装载自:http://abcve.com/redis-keepalived/

一:环境介绍

Master: 10.0.0.13

Slave: 10.0.0.14

Virtural IP Address (VIP): 10.0.0.15

二:设计思路:

当 Master 与 Slave 均运作正常时, Master负责服务,Slave负责Standby;

当 Master 挂掉,Slave 正常时, Slave接管服务,有写权限,同时关闭主从复制功能;

当 Master 恢复正常,则从Slave同步数据,同步数据之后关闭主从复制功能,恢复Master身份,同时Slave等待Master同步数据完成之后,恢复Slave身份。

三:安装配置前准备工作

在主服务器 10.0.0.13 上面做下面操作

echo “10.0.0.13 server1” >> /etc/hosts

echo “10.0.0.14 server2” >> /etc/hosts

在从服务器 172.16.206.28 上面做下面操作

echo “10.0.0.13 server1” >> /etc/hosts

echo “10.0.0.14 server2” >> /etc/hosts

四:主服务器配置redis

1.下载redis 版本3.2.11

wget http://download.redis.io/releases/redis-3.2.11.tar.gz

2.解压 tar -zxvf redis-3.2.11.tar.gz

3.cd redis-3.2.11

4.make && make install

5.cp redis.conf /etc/redis.conf

cd src/

cp redis-server redis-cli redis-benchmark redis-check-aofredis-check-dump /usr/local/bin

6.修改 /etc/redis.conf里面可以把daemonize no 修改为daemonize yes

目的是可以在后台执行redis-server。

7.init.d 启动脚本

    vi /etc/init.d/redis-server

chmod o+x /etc/init.d/redis-server

chkconfig –add redis-server

service redis-server start

五:从服务器配置redis

从服务器,配置一样,只不过 修改/etc/redis.conf 中

slaveof <masterip> <masterport>修改为

slaveof 10.0.0.13 6379

然后开启从服务器的redis服务。

start redis-server start

 

六:进行redis主从测试

#主服务器

redis-cli -p 6379 set hello world

#从服务器

redis-cli -p 6379 get hello

“world”

 

#主服务器

redis-cli -p 6379 set hello2 world2

#从服务器

redis-cli -p 6379 get hello2

“world2”

redis-cli -p 6379 set hello world

(error) READONLY You can’t write against a read only slave.

成功配置主从redis服务器,由于配置中有一条从服务器是只读的,所以从服务器没法设置数据,只可以读取数据。

 

七:安装和配置keepalived

1. wget http://www.keepalived.org/software/keepalived-1.3.5.tar.gz

tar -zxvf keepalived-1.3.5.tar.gz

cd keepalived-1.3.5

2.  安装openssl-devel和kernel-devel

yum install openssl-devel

yum install kernel-devel

ln -s /usr/src/kernels/2.6.32-696.10.1.el6.x86_64 /usr/src/linux

3. 配置编译安装

./configure–prefix=/usr/local/keepalived  –with-kernel-dir=/usr/src/linux   –enable-sha1

make && make install

4. 复制keepalived相关文件

cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/keepalived

cp /usr/local/keepalived/sbin/keepalived /usr/sbin/keepalived

cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/keepalived

mkdir /etc/keepalived

cp /usr/local/keepalived/etc/keepalived/samples/keepalived.conf.virtualhost

/etc/keepalived/keepalived.conf

八:修改配置文件和相关脚本

1. 在Master上创建配置文件

vi /etc/keepalived/keepalived.conf

2.在Slave上创建如下配置文件

vim /etc/keepalived/keepalived.conf

3.在Master和Slave上创建监控Redis的脚本

$  mkdir /etc/keepalived/scripts

$  vim /etc/keepalived/scripts/redis_check.sh

4.编写关键脚本

notify_master /etc/keepalived/scripts/redis_master.sh

notify_backup /etc/keepalived/scripts/redis_backup.sh

notify_fault /etc/keepalived/scripts/redis_fault.sh

notify_stop /etc/keepalived/scripts/redis_stop.sh

因为Keepalived在转换状态时会依照状态来执行脚本:

当进入Master状态时会呼叫notify_master

当进入Backup状态时会呼叫notify_backup

当发现异常情况时进入Fault状态呼叫notify_fault

当程序终止时则呼叫notify_stop

 

首先,在Redis Master上创建notity_master与notify_backup脚本:

vi /etc/keepalived/scripts/redis_master.sh

vi /etc/keepalived/scripts/redis_backup.sh

在Redis Slave上创建notity_master与notify_backup脚本:

vi /etc/keepalived/scripts/redis_master.sh

vi /etc/keepalived/scripts/redis_backup.sh

然后在Master与Slave创建如下相同的脚本:

 

vi /etc/keepalived/scripts/redis_fault.sh

vi /etc/keepalived/scripts/redis_stop.sh

在主从服务器上面给脚本都加上可执行权限:

chmod +x /etc/keepalived/scripts/*.sh

九:相关功能测试

启动Master和slave上的Redis

service redis-server start

启动Master和slave上的Keepalived

/etc/init.d/keepalived start

尝试通过VIP连接Redis:

$ redis-cli -h 10.0.0.15 INFO

连接成功,可以看到主从机的信息,例如:

role:master

slave0:10.0.0.13,6379,online

 

尝试插入一些数据:

$ redis-cli -h 10.0.0.15 SET hello3 world3

OK

 

从VIP读取数据

$ redis-cli -h 10.0.0.15 GET hello3

“world3”

从Master读取数据

$ redis-cli -h 10.0.0.13 GET hello3

“world3”

从Slave读取数据

$ redis-cli -h 10.0.0.14 GET hello3

“world3”

 

将Master上的Redis进程杀死:

$ service redis-server stop

查看Master上的Keepalived日志

$ tail -f /var/log/keepalived-redis-state.log

[fault]

Fri Sep  8 19:16:28 CST 2017

 

同时Slave上的日志显示:

$ tail -f /var/log/keepalived-redis-state.log

[master]

Fri Sep  8 19:16:28 CST 2017

Being master….

Run SLAVEOF cmd …

OK Already connected to specified master

Run SLAVEOF NO ONE cmd …

OK

现在,Slave已经接管服务,并且拥有Master的角色

$ redis-cli -h 10.0.0.14 INFO

$ redis-cli -h 10.0.0.15 INFO

role:master

 

然后恢复Master的Redis进程

$  service redis-server start

查看Master上的Keepalived日志

$ tail -f /var/log/keepalived-redis-state.log

 

[master]

Fri Sep  8 19:16:32 CST 2017

Being master….

Run SLAVEOF cmd …

OK

Run SLAVEOF NO ONE cmd …

OK

同时Slave上的日志显示:

$ tail -f /var/log/keepalived-redis-state.log

[backup]

Fri Sep  8 19:16:32 CST 2017

Being slave….

Run SLAVEOF cmd …

OK

 

Master已经再次恢复了Master角色

猜你喜欢

转载自blog.csdn.net/dayi_123/article/details/78216336