redis哨兵(sential)
哨兵人巡查监控后后台master主机是否故障,如果故障了根据投票数自动将某一个从机转换为主机,继续对外提供服务。
哨兵的作用
- 监控redis主机的运行状态,包括主机master和slave。
- 当主机宕机后,能自动将从机切slave换成新的主机master
注意哨兵不使用集群,仅仅是和主从复制相互配合。
配置redis哨兵
我们知道,网络是不可靠的,有时候一个sentinel会因为网络堵塞而误认为一个redis主机挂掉了,在sentinel集群环境下需要多个sentinel互相沟通来确认某个redis主机真的挂掉。投票数这个参数是进行客观下线的依据,意思是至少有quorum个sentinel认为redis主机是有故障的,才会对这个redis主机进行下线以及故障转移,因为有的时候某个sentinel节点可能是因为网络问题无法连接到redis主机,但此时redis主机并没有出现故障。所以,此时就需要多个sentinel都认为该redis主机出现故障,才进行下一步的操作。这保证了公平性和高可用性。
- 在myredis目录下新建或拷贝sentinel.conf文件(名字不能错,默认在redis安装目录下)
- 添加如下配置:
设置要监控的master服务器,其中quorum是法定投票数:表示最少有几个哨兵认可客观下线,同意故障迁移的法定投票数。
sentinel monitor
redis主机设置了密码,连接redis主机的密码
sentinel auth-pass
-
启动sentinel命令:
redis-sentinel sentinel26379.conf --sentinel
redis-sentinel sentinel26380.conf --sentinel
redis-sentinel sentinel26381.conf --sentinel
相关问题
- 当redi主机挂了,从机仍然是好的。
- sentinel通过投票确认主机确实挂掉后,从剩下的从机中选择一个充当redis主机。
- 如果之前挂掉的redis主机重启回来后,会成为redis从机,因为新的redis主机已经选举出来了
- 注意:在master-slave切换后,master_redis.conf、slave_redis.conf、sentinel.conf的内容会发生变化,即master_redis.conf中会多一行slaveof配置,sentinel.conf的监控目标会发生变化。
哨兵运行流程
- 三个哨兵一主二从,正常运行中...
- SDown主观下线(Subjectively Down)
- 主观不可用指的是单个哨兵检测到master状态在发送ping心跳包后在一定时间内没有收到合法的回复,就达到了主观下线的条件。
- sentinel配置文件中的down-after-milliseconds设置了判断主观下线的时间长度(默认30s)。
- ODown客观下线(ObjectTively Down)
- 客观下线是需要多个哨兵一致认为该redis master确实宕机了。
- 选举出哨兵群中的领导者哨兵(用来指定谁是新的redis master)
- 当redis master被判定客观下线后,各个哨兵会进行协商,先选举出一个领导者哨兵并由该哨兵节点进行故障迁移。
- 领导者哨兵是如何选举出来的?----> Raft算法:先到先得,在一轮选举中,哨兵A向哨兵B发送想成为领导者的申请,如果B没有同意其它哨兵,则会同意A成为领导者。
- 由领导者哨兵开始推动故障切换流程并选举出一个新的redis master:
- 某个Slave被选举成为新的redis master。
- 选择新的master规则:
- 在redis配置文件中,权限优先级最高(数字越小)最优先
- 复制偏移量最大的节点其次优先(相对于宕机掉的master,数据的完整性最高)
- 最小Run ID的从节点优先(根据ASCII码)
- 让选举出来的节点执行slaveof no one命令成为新的master节点,并通过slaveof命令让其他slave节点成为新的master节点的slave
- 当原来宕机的master节点重启后会成为新的master节点的slave并恢复工作。
- 上述的工作均由sentinel自己独立完成,完全不需要人工的干预。
哨兵选举原理
当一个主从配置中的master失效后,sentinel可以选举出一个新的master用于自动接替master工作,主从配置中的其它redis服务器自动指向新的master服务器并同步数据。一般建议sentinel是奇数台,防指某一sentinel无法连接到master导致切换失败。
哨兵使用建议
- 哨兵的数量应该为多个,哨兵本身就应该集群,保证高可用性。
- 哨兵节点数量应该是奇数。
- 哨兵节点配置最好都是一致的(硬件配置)
- 哨兵集群+主从复制并不能保证数据零丢失 --> 引出redis集群