前言
Redis作为内存数据库,需要具备高可用的特点,不然如果服务器宕机,还在内存里的数据就会丢失。我们最常用的高可用方法就是搭建集群,master机器挂了,可以让slave机器顶上,继续提供服务。但是Redis集群是不会自动进行主从切换的,也就是说,如果主节点非常不争气的在凌晨3点挂了,那么运维同学就要马上起床,把从节点改成主节点,这样的操作是非常繁琐低效的。为此,Redis官方提供了一种解决方案:Redis Sentinel
简介
Redis Sentinel集群通常由3到5个节点组成,如果个别节点挂了,集群还可以正常运作。它负责监控Redis集群的健康情况。如果主节点挂掉,Sentinel集群会通过投票选择一个新的主节点。当原来的主节点恢复时,它会被当做新的主节点的从节点重新加入Redis集群。
基本原理
Sentinel集群通过指定的配置文件发现master,对其进行监控,并且会发送info指令获取master的从节点信息。Sentinel集群中的节点通过向其监控的主从节点发送hello信息(包含Sentinel本身的ip、端口和id等内容)来向其他Sentinel宣告自己的存在。
Sentinel集群通过订阅连接来接收其他Sentinel的hello信息。
Sentinel集群通过ping命令来检查监控的实例状态,如果在指定时间内没有返回,则认为该实例下线。
Sentinel触发failover主从切换后,并不会马上进行,只有指定(quorum)Sentinel授权后,master节点被标记为ODOWN状态。这时才真正开始投票选择新的master。
Sentinel选择新的master的原则是:首先判断优先级,选择优先级较小的;如果优先级相同,查看复制下标,选择复制数据较多的;如果复制下标也相同,就选择进程ID较小的。
Sentinel被授权后,它将会获得宕掉的master的一份最新配置版本号(config-epoch),当failover执行结束以后,这个版本号将会被用于最新的配置,通过广播形式通知其它Sentinel,其它的Sentinel则更新对应master的配置。
基本使用
我们以Python为例,简单说明一下在客户端如何使用Sentinel
from redis.sentinel import Sentinel
if __name__ == '__main__':
sentinel = Sentinel(['localhost', 26379], socket_timeout=0.1)
print(sentinel.discover_master('mymaster'))
print(sentinel.discover_slaves('mymaster'))
master = sentinel.master_for('mymaster', socket_timeout=0.1)
slave = sentinel.slave_for('mymaster', socket_timeout=0.1)
master.set('follow', 'Jackeyzhe2018')
follow = slave.get('follow')
print(follow)
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
软考中级精品资料免费领
- 历年真题答案解析
- 备考技巧名师总结
- 高频考点精准押题
- 资料下载
- 历年真题
193.9 KB下载数265
191.63 KB下载数245
143.91 KB下载数1148
183.71 KB下载数642
644.84 KB下载数2756