Redis 主从复制的缺点:没有办法对master 进行动态选举,需要使用Sentinel 机制完成动态选举。
一、简介
Sentinel (哨兵)进程是用于监控Redis集群中Master主服务器工作的状态
在Master 主服务器发生故障的时候,可以实现Master 和Slave 服务器的切换,保证系统的高可用( HA )
其已经被集成在redis2.6+ 的版本中, Redis 的哨兵模式到了2.8 版本之后就稳定了下来
二、哨兵进程的作用
监控( Monitoring ): 哨兵( sentinel ) 会不断地检查你的Master 和Slave 是否运作正常。
提醒( Notification ): 当被监控的某个Redis 节点出现问题时, 哨兵( sentinel ) 可以通过 API 向管理
员或者其他应用程序发送通知。
自动故障迁移( Automatic failover ):当一个Master不能正常工作时,哨兵( sentinel ) 会开始一次自
动故障迁移操作,具体操作如下:。
它会将失效Master 的其中一个Slave 升级为新的Master , 并让失效Master 的其他Slave 改为复制新
的Master ;
当客户端试图连接失效的Master 时,集群也会向客户端返回新Master 的地址,使得集群可以使用现在
的Master 替换失效Master 。
Master 和Slave 服务器切换后, Master 的redis.conf 、Slave 的redis.conf 和sentinel.conf 的
配置文件的内容都会发生相应的改变,即, Master 主服务器的redis.conf 配置文件中会多一行
slaveof 的配置, sentinel.conf 的监控目标会随之调换。
三、故障判定原理
1、每个Sentinel (哨兵)进程以每秒钟一次的频率向整个集群中的Master 主服务器, Slave 从服务器以及其
他Sentinel (哨兵)进程发送一个 PING 命令。
2、如果一个实例( instance )距离最后一次有效回复 PING 命令的时间超过 down-after-milliseconds 选
项所指定的值, 则这个实例会被 Sentinel (哨兵)进程标记为主观下线( SDOWN )。
3、如果一个Master 主服务器被标记为主观下线( SDOWN ),则正在监视这个Master 主服务器的所有
Sentinel(哨兵)进程要以每秒一次的频率确认Master主服务器的确进入了主观下线状态。
4、当有足够数量的 Sentinel(哨兵)进程(大于等于配置文件指定的值)在指定的时间范围内确认Master 主
服务器进入了主观下线状态( SDOWN ), 则Master 主服务器会被标记为客观下线(ODOWN)。
5、在一般情况下, 每个 Sentinel (哨兵)进程会以每 10 秒一次的频率向集群中的所有Master 主服务器、
Slave 从服务器发送 INFO 命令。
6、当Master 主服务器被 Sentinel (哨兵)进程标记为客观下线(ODOWN)时, Sentinel (哨兵)进程向下
线的 Master 主服务器的所有 Slave 从服务器发送 INFO 命令的频率会从 10 秒一次改为每秒一次。
7、若没有足够数量的 Sentinel (哨兵)进程同意 Master 主服务器下线, Master 主服务器的客观下线状态
就会被移除。若 Master 主服务器重新向 Sentinel (哨兵)进程发送 PING 命令返回有效回复, Master
主服务器的主观下线状态就会被移除。
四、规划配置
全部Msdter、Slave 、哨兵修改为守护进启动
# 将'daemonize'由'no'改为'yes'
daemonize yes
# 默认绑定的是回环地址,默认不能被其他机器访问
# bind 127.0.0.1
# 是否开启保护模式,由yes该为no
protected-mode no
Master配置
除了端口,其他无需特殊配置
Salave配置
修改从 redis 服务器上的 redis.conf 文件,添加 slaveof 主 redisip 主 redis 端口
# slaveof <masterip> <masterport>
# 表示当前【从服务器】对应的【主服务器】的IP是39.97.176.160,端口是6380。
slaveof 39.97.176.160 6380
哨兵配置修改sentinel.conf
# 哨兵sentinel监控的redis主节点的 ip port
# master-name 可以自己命名的主节点名字 只能由字母A-z、数字0-9 、这三个字符".-_"组成。
# quorum 当这些quorum个数sentinel哨兵认为master主节点失联 那么这时 客观上认为主节点失联了
# sentinel monitor <master-name> <master ip> <master port> <quorum>
sentinel monitor mymaster 39.97.176.160 6380 1
五、启动
Master与Slave启动都是安装目录下执行
./redis-cli -h 39.97.176.160 -p 6380
-h:redis服务器的ip地址
-p:redis实例的端口号
哨兵启动在安装目录下执行
./redis-sentinel sentinel.conf
六、测试
测试,把主机端口杀掉,其中有一台从机马上就选举为主机。因为是读写分离,所以当主机宕机以后,其中有一台从机能写,证明哨兵机制配置成功。