Redis + Keepalived主从集群的搭建及故障转移
设计思路:
- 当 Master 与 Slave 均运作正常时, Master负责服务,Slave负责Standby;
- 当 Master 挂掉,Slave 正常时, Slave接管服务,同时关闭主从复制功能;
- 当 Master 恢复正常,则从Slave同步数据,同步数据之后关闭主从复制功能,恢复Master身份,于此同时Slave等待Master同步数据完成之后,恢复Slave身份。
- 然后依次循环。
注意事项:
需要在Master与Slave上都开启本地化策略,否则在互相自动切换的过程中,未开启本地化的一方会将另一方的数据清空,造成数据完全丢失。
环境准备
集群可以是单台机器的不同端口,也可以是多台机器,通常实际应用是,多台机器。假设目前已经安装好了2台机器,IP和端口分别是
主Redis服务器IP:192.168.1.148
主Redis服务器端口号:6379
从Redis服务器IP:192.168.1.158
从Redis服务器端口号:6379
设定一个虚拟IP
192.168.1.200
进入root用户
xiaoyao@xiaoyao-virtual-machine:~$ su
密码:
root@xiaoyao-virtual-machine:/home/xiaoyao#
主从两个机器上分别安装Keepalived
root@xiaoyao-virtual-machine:/home/xiaoyao# apt-get install keepalived
主从服务器分别修改hosts文件
root@xiaoyao-virtual-machine:/home/xiaoyao# vim /etc/hosts
在文件末尾添加
192.168.1.148 redis148
192.168.1.158 redis158
主服务器创建配置文件
root@xiaoyao-virtual-machine:/home/xiaoyao# vim /etc/keepalived/keepalived.conf
配置内容:
! Configuration File for keepalived
global_defs {
router_id redis148
}
vrrp_script chk_redis
{
script "/etc/keepalived/scripts/redis_check.sh 127.0.0.1 6379"
interval 2
timeout 2
fall 3
}
vrrp_instance redis {
state MASTER # master set to SLAVE also
interface eth0
virtual_router_id 50
priority 150
nopreempt # no seize,must add
advert_int 1
authentication { #all node must same
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.1.200/24
}
track_script {
chk_redis
}
notify_master "/etc/keepalived/scripts/redis_master.sh 127.0.0.1 192.168.1.158 6379"
notify_backup "/etc/keepalived/scripts/redis_backup.