Redis Sentinel(哨兵)和虚拟IP高可用服务架构搭建
在主从复制的基础上,哨兵模式Sentinel是Redis官方提供的高可用方案。哨兵Sentinel主要有以下几个功能:
1、实时监控Redis主从复制状态;
2、如果Redis主从复制状态改变,可以实现通知;
3、如果主节点宕机,可以进行自动故障切换;
官方建议Sentinel至少配置3个节点,2个节点故障切换不会进行。Sentinel对于不可用有两种不同的看法,一个叫主观不可用(SDOWN),另外一个叫客观不可用(ODOWN)。当Master主节点宕机,只有在大多数的Sentinel都认为Master宕机,也就是ODOWN的时候才会触发故障切换。具体多少数值在Sentinel的配置文件中配置,不能大于Sentinel总数。
架构
如下图所示:
搭建步骤
以下是配置环境:
操作系统:centos 7.5 64位
redis版本:3.2.12
主服务器:172.16.10.128 端口:6379
从服务器:172.16.10.129 端口:6379
从服务器:172.16.10.130 端口:6379
一、安装redis、配置主从复制
这个可以参考:https://zhangnq.com/3063.html
二、配置sentinel集群
修改sentinel的配置,默认在 /etc/redis-sentinel.conf 。三台服务器都需要修改,注意redis-sentinel文件的权限,redis-sentinel进程需要修改该文件。
port 26379 bind 0.0.0.0 dir /tmp daemonize yes logfile /var/log/redis/sentinel.log # 6379 sentinel monitor master-6379 172.16.10.128 6379 2 sentinel down-after-milliseconds master-6379 15000 sentinel auth-pass master-6379 123456
修改后启动sentinel进程。
systemctl enable redis-sentinel systemctl start redis-sentinel
查看进程和日志,看到如下日志说明redis sentinel哨兵集群配置成功。
三、虚拟VIP高可用
redis和sentinel的集群已经配置完成,最后一步是利用Sentinel配置里的client-reconfig-script参数和自定义脚本实现虚拟IP的绑定和删除。因为绑定VIP需要ROOT权限,所以还需要分别修改三台服务器的sudo配置文件,给redis用户授权。
cat /etc/sudoers.d/redis redis ALL=(ALL) NOPASSWD:/sbin/ip,NOPASSWD:/sbin/arping
配置自定义脚本
[root@master ~]# cat /var/lib/redis/failover.sh #!/bin/bash MASTER_IP=${6} MY_IP='172.16.10.128' VIP='172.16.10.200' NETMASK='24' INTERFACE='ens33' if [ ${MASTER_IP} = ${MY_IP} ]; then sudo /sbin/ip addr add ${VIP}/${NETMASK} dev ${INTERFACE} sudo /sbin/arping -q -c 3 -A ${VIP} -I ${INTERFACE} exit 0 else sudo /sbin/ip addr del ${VIP}/${NETMASK} dev ${INTERFACE} exit 0 fi exit 1
MY_IP、VIP和INTERFACE根据实际情况修改。
修改sentinel配置,添加如下内容
sentinel client-reconfig-script master-6379 /var/lib/redis/failover.sh
重启sentinel。
四、测试
关闭master 172.16.10.128的redis,可以看到sentinel已经把master角色给了172.16.10.130 。
登录172.16.10.130 ,虚拟VIP添加成功。
至此redis+sentinel+VIP架构的高可用就已经基本实现,这种方式可以有效避免redis单点故障的问题。