使用keepalived实现redis主从切换

2018-01-11 12:47:05来源:网络收集作者:程序诗人人点击

分享

阿里云爆款

安装keepalived和redis主从的过程不再赘述,可参见本人其他部署文章。


主机名
IP地址
所安装软件
jia3.ty.com
192.168.10.103
keepalived(backup-高优先级),redis(master)jia4.ty.com
192.168.10.104
keepalived(backup-低优先级),redis(slave)192.168.10.103和192.168.10.104的keepalived配置如下:


[root@jia3 keepalived]# more /etc/keepalived/keepalived.conf


! Configuration File for keepalived
global_defs {
   notification_email {
     root@localhost
   }
   notification_email_from keepalived@localhost
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id REDIS_KEEPALIVED
}
vrrp_script chk_redis {
    script "/etc/keepalived/script/chk_redis.sh"
    interval 3
}
vrrp_instance REDIS_1 {
    state BACKUP
    nopreempt
    interface eth1
    virtual_router_id 51
    priority 200 #192.168.10.104该项配置值为100,其他都一样
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass redis
    }
    track_script {
        chk_redis
    }
    virtual_ipaddress {
        192.168.10.111/24
    }
    notify_master "/etc/keepalived/script/become_master.sh"
}

涉及到的两个脚本内容如下:


[root@jia3 keepalived]# more /etc/keepalived/script/chk_redis.sh 


#!/bin/bash
A=`/app/redis/bin/redis-cli -h 127.0.0.1 -p 6379 PING`
if [ "$A"x != "PONG"x ]
then 
        /app/redis/bin/redis-server /app/redis/conf/redis.conf
        sleep 2
        if [ "`/app/redis/bin/redis-cli -h 127.0.0.1 -p 6379 PING`"x != "PONG"x ]
        then
                /etc/init.d/keepalived stop
        fi
fi

[root@jia3 keepalived]# more /etc/keepalived/script/become_master.sh 


#!/bin/bash
/app/redis/bin/redis-cli -h 127.0.0.1 -p 6379 slaveof no one

说明:


1.keepalived使用双Backup非抢占模式
2.redis主从切换的实现是通过检测本机redis进程,当服务不可用时停止keepalived服务做VIP切换,当获得VIP时让Redis执行slaveof no one命令变成主。
3.需要检测keepalived状态,当发现VIP切换后需要尽快恢复至初始状态。

测试:


查看当前状态


192.168.10.103现在是redis master和VIP的所有者,如下图:


使用keepalived实现redis主从切换


192.168.10.104现在是redis slave并且没有VIP,如下图所示:


使用keepalived实现redis主从切换


检测脚本发现redis不可用之后会先尝试启动redis服务


我们先将redis进程杀掉,发现redis会自动启动,如下图:


使用keepalived实现redis主从切换


然后我们测试一下,当进程无法启动时,发生VIP切换后,从redis会不会自动变成主redis。


在当前的主Redis即103机器上,将redis-server命令改名成redis-server.bak 然后杀掉redis进程,模拟redis启动失败。


使用keepalived实现redis主从切换


这时,可以看到VIP已经切换到了104机器上。


使用keepalived实现redis主从切换


使用keepalived实现redis主从切换


看一下104机器上的Redis是否已经变成主,如下图:


使用keepalived实现redis主从切换


可以看到104机器的redis已经由从redis变成了主redis,这时向VIP写入是正常的。


我们的监控应该能够监控到keepalived的VIP切换的状态,并告警,当我们收到告警后进行状态复原,过程如下:


启动redis并指定为104的从redis ---> 启动keepalived  ---> 查看状态


使用keepalived实现redis主从切换


查看现在的状态,如下图:


使用keepalived实现redis主从切换使用keepalived实现redis主从切换


可以看到这个状态和最初始的状态相比而言,只是将192.168.10.103和192.168.10.104两台机器的角色调换了一下。


如此循环往复,实现redis的主从切换高可用。

缺点:


1.在恢复之前两个节点都挂掉的话,应用不可用 


2.如果是keepalived自身不可用,也会导致主从切换


优点:


1.切换速度秒级切换


2.VIP非抢占模式,切换过程平滑,恢复不会抢占VIP


3.配置相对简单

如有更好的想法可以讨论。或者更全面的方式也可以讨论。共同学习。


至此,文章结束。


最新文章

123

最新摄影

闪念基因

微信扫一扫

第七城市微信公众平台