哨兵服务
(主从redis服务有密码验证搭建完成的情况下)
192.168.4.51 主服务器
192.168.4.52 从服务器
192.168.4.57 哨兵服务器
一、安装哨兵服务
1)源码编译安装redis,无需作初始化操作
[root@redis57 redis]# yum -y install gcc
[root@redis57 redis]# tar -zxf redis-4.0.8.tar.gz
[root@redis57 redis]# cd redis-4.0.8/
[root@redis1 redis-4.0.8]# make
[root@redis1 redis-4.0.8]# make install
2)修改主配置文件
[root@redis57 redis]# vim /etc/sentinel.conf //创建主配置文件
sentinel monitor server51 192.168.4.51 6351 1 //监视主服务器
bind 0.0.0.0 //哨兵服务地址(表示本机所有网络接口)
sentinel auth-pass server51 123456 //主服务器密码
:wq
3)启动哨兵服务
[root@redis57 redis]# redis-sentinel /etc/sentinel.conf //启动哨兵服务
25371:X 28 Sep 11:16:54.993 # +sdown master redis51 192.168.4.51 6351
25371:X 28 Sep 11:16:54.993 # +odown master redis51 192.168.4.51 6351 #quorum 1/1
25371:X 28 Sep 11:16:54.993 # +new-epoch 3
25371:X 28 Sep 11:16:54.993 # +try-failover master redis51 192.168.4.51 6351
25371:X 28 Sep 11:16:54.994 # +vote-for-leader be035801d4d48eb63d8420a72796f52fc5cec047 3
...
25371:X 28 Sep 11:16:55.287 * +slave slave 192.168.4.51:6351 192.168.4.51 6351 @ redis51 192.168.4.52 6351
25371:X 28 Sep 11:17:25.316 # +sdown slave 192.168.4.51:6379 192.168.4.51 6379 @ redis51 192.168.4.52 6352
二、测试配置
1)停止主服务的51的redis服务
[root@redisA ~]# /etc/init.d/redis_6379 stop
Stopping ...
Waiting for Redis to shutdown ...
Redis stopped
2)在从服务器52上查看复制信息
[root@redisB ~]# redis-cli -h 192.168.4.52 -p 6352
192.168.4.52:6352> info replication
# Replication
role:master //角色是master
connected_slaves:0
……
……
总结
redis哨兵机制
1)简介
Redis-Sentinel是Redis官方推荐的高可用(HA)方案,当用Redis 做master-slave高可用方案时,假如master宕机了,redis本身(包括它的很多客服端)都没有实现自动的主备切换,而Redis-Sentinel本身也是一个独立运行的进程,它能监控多个master-slave集群,发现master宕机后能自动切换。
2)功能
不时监控redis是否按照预期的良好的运行。
如果发现某个redis节点运行出现状况,能够通知别外一个进程(如它的客户端)。
能够进行自动切换。当一个master节点不可用时,能够选举出master的多个slave(如果超过一个slave的话)中的一个来作为新的master,其它的slave节点会将他的master地址改为新提升为master的服务器的地址。
3)优缺点
优点:
哨兵模式是基于主从模式的,所有主从的优点,哨兵模式都有。主从可以自动切换,系统更健壮,可用性更高
缺点:
redis较难支持在线扩容,在集群容量达上限时在线扩容变的很复杂。
原理
1、Sentinel集群通过给定的配置文件发现master,启动时会监控master。通过向master发送info信息获得该服务下面的所有从服务器。
2、Sentinel集群通过命令连接向被监控的主从服务器发送hello信息(每秒一次),该信息包括Sentinel本身的ip、端口、id等内容,以此来向其他Sentinel宣告自己的存在。
3、Sentinel集群通过订阅连接接收其他Sentinel发送的hello信息,以此来发现监视同一个主服务器的其他Sentinel;集群之间会互相创建命令连接用于通信,因为已经有主从服务器作为发送和接收hello信息的中介,Sentinel之间不会创建订阅连接。
4、Sentinel集群使用Sentinel命令来检测实例的状态,如果指定的时间内(down-after-milliseconds)没有回复或者返回错误回复,那么该实例被判为主观下线SDOWN。
5、当failover主备切换被触发后,failover并不会马上进行,还需要Sentinel集群中另外quorum个其他Sentinel授权,成功后进入ODOWN客观下线状态,之后再进行failover。
6、Sentinel向选为master的slave发送slaveof no one 命令,选择slave的条件是首先会根据slave的优先级来排序,优先级越小排名越靠前。如果相同,则查看复制的下标,哪个接收master的复制数据越多哪个越靠前,如果两个都一样就选择进程ID较小的。
7、Sentinel被授权后会获得宕机的master的一份最新配置版本号(config-epoch)当failover结束后,这个版本号将会用于最新的配置,通过广播的形式通知其他Sentinel,其它的Sentinel则更新对应的master配置。

2568

被折叠的 条评论
为什么被折叠?



