使用keepalived实现redis主从切换

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

 

主机名IP地址所安装软件
jia3.ty.com192.168.10.103keepalived(backup-高优先级),redis(master)
jia4.ty.com192.168.10.104keepalived(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的所有者,如下图:

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

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

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

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

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

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

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

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

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

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

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

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

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

 

缺点:

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

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

优点:

1.切换速度秒级切换

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

3.配置相对简单

 

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

至此,文章结束。

 

 

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值