redis-sentinel(哨兵) redis
Redis-Sentinel是Redis官方推荐的高可用性(HA)解决方案,当用Redis作Master-slave的高可用方案时,假如master宕机了,Redis自己(包括它的不少客户端)都没有实现自动进行主备切换,而Redis-sentinel自己也是一个独立运行的进程,它能监控多个master-slave集群,发现master宕机后能进行自动切换。sql
Sentinel 的构造:vim
Sentinel 是一个监视器,它能够根据被监视实例的身份和状态来判断应该执行何种动做。服务器
功能:nosql
监控(Monitoring): 测试
Sentinel 会不断地检查你的主服务器和从服务器是否运做正常。spa
提醒(Notification):blog
当被监控的某个 Redis 服务器出现问题时, Sentinel 能够经过 API 向管理员或者其余应用程序发送通知。进程
自动故障迁移(Automatic failover):get
当一个主服务器不能正常工做时, Sentinel 会开始一次自动故障迁移操做, 它会将失效主服务器的其中一个从服务器升级为新的主服务器, 并让失效主服务器的其余从服务器改成复制新的主服务器; 当客户端试图链接失效的主服务器时, 集群也会向客户端返回新主服务器的地址, 使得集群可使用新主服务器代替失效服务器。
Sentinel 经过用户给定的配置文件来发现主服务器。
Sentinel 经过向主服务器发送 INFO 命令来自动得到全部从服务器的地址。
Sentinel 会经过命令链接向被监视的主从服务器发送 “HELLO” 信息,该消息包含 Sentinel 的 IP、端口号、ID 等内容,以此来向其余 Sentinel 宣告本身的存在。与此同时Sentinel 会经过订阅链接接收其余 Sentinel 的“HELLO” 信息,以此来发现监视同一个主服务器的其余 Sentinel 。
sentinel1 经过发送HELLO 信息来让sentinel2 和 sentinel3发现本身,其余两个sentinel 也会进行相似的操做。
Sentinel 之间只会互相建立命令链接,用于进行通讯。由于已经有主从服务器做为发送和接收 HELLO 信息的中介,因此 Sentinel之间不会建立订阅链接。
故障转移FAILOVER:
一次故障转移操做由如下步骤组成:
发现主服务器已经进入客观下线状态。
基于Raft leader election 协议 , 进行投票选举
若是当选失败,那么在设定的故障迁移超时时间的两倍以后,从新尝试当选。 若是当选成功, 那么执行如下步骤。
选出一个从服务器,并将它升级为主服务器。
向被选中的从服务器发送 SLAVEOF NO ONE 命令,让它转变为主服务器。
经过发布与订阅功能, 将更新后的配置传播给全部其余 Sentinel ,其余 Sentinel 对它们本身的配置进行更新。
向已下线主服务器的从服务器发送 SLAVEOF 命令,让它们去复制新的主服务器。
当全部从服务器都已经开始复制新的主服务器时, leader Sentinel 终止此次故障迁移操做。
sentinel搭建过程:
这里只是演示,因此只搭建一个sentinel , 多个sentinel 安装步骤同样。
1、监控
2、自动选主,切换(6381 slaveof no one)
3、2号从库(6382)指向新主库(6381)
步骤:
mkdir /nosql/26380
cd /nosql/26380
vim sentinel.conf
port 26380
dir "/nosql/26380"
sentinel monitor mymaster 192.168.6.182 6382 1
sentinel down-after-milliseconds mymaster 5000
启动:
redis-sentinel /nosql/26380/sentinel.conf &
停主库测试:
[root@db01 ~]# redis-cli -p 6380
shutdown
[root@db01 ~]# redis-cli -p 6381
info replication
启动源主库(6380),看状态。
Sentinel管理命令:
redis-cli -p 26380
PING :返回 PONG 。
SENTINEL masters :列出全部被监视的主服务器
SENTINEL slaves <master name>
SENTINEL get-master-addr-by-name <master name> : 返回给定名字的主服务器的 IP 地址和端口号。
SENTINEL reset <pattern> : 重置全部名字和给定模式 pattern 相匹配的主服务器。
SENTINEL failover <master name> : 当主服务器失效时, 在不询问其余 Sentinel 意见的状况下, 强制开始一次自动故障迁移。