本文已收录于专栏
上千人点赞收藏,全套Redis学习资料,大厂必备技能!
目录
1、简介
主从复制奠定了Redis分布式的基础,但是普通的主从复制并不能达到高可用的状态。在普通的主从复制模式下,如果主服务器宕机,就只能通过运维人员手动切换主服务器,很显然这种方案并不可取。
针对上述情况,Redis官方推出了可抵抗节点故障的高可用方案——Redis Sentinel(哨兵)。Redis Sentinel(哨兵):由一个或多个Sentinel实例组成的Sentinel系统,它可以监视任意多个主从服务器,当监视的主服务器宕机时,自动下线主服务器,并且择优选取从服务器升级为新的主服务器。
如下示例:当旧Master下线时长超过用户设定的下线时长上限,Sentinel系统就会对旧Master执行故障转移操作,故障转移操作包含三个步骤:
- 在Slave中选择数据最新的作为新的Master
- 向其他Slave发送新的复制指令,让其他从服务器成为新的Master的Slave
- 继续监视旧Master,如果其上线则将旧Master设置为新Master的Slave
本文基于如下资源清单进行开展:
IP地址 | 节点角色 | 端口 |
---|---|---|
192.168.211.104 | Redis Master/ Sentinel | 6379/26379 |
192.168.211.105 | Redis Slave/ Sentinel | 6379/26379 |
192.168.211.106 | Redis Slave/ Sentinel | 6379/26379 |
2、Sentinel初始化与网络连接
Sentinel并没有什么特别神奇的地方,它就是一个更加简单的Redis服务器,在Sentinel启动的时候它会加载不同的命令表和配置文件,因此从本质上来讲Sentinel就是一个拥有较少命令和部分特殊功能的Redis服务。当一个Sentinel启动时它需要经历如下步骤:
- 初始化Sentinel服务器
- 替换普通Redis代码为Sentinel的专用代码
- 初始化Sentinel状态
- 根据用户给定的Sentinel配置文件,初始化Sentinel监视的主服务器列表
- 创建连接主服务器的网络连接
- 根据主服务获取从服务器信息,创建连接从服务器的网络连接
- 根据发布/订阅获取Sentinel信息,创建Sentinel之间的网络连接
2.1 初始化Sentinel服务器
Sentinel本质上就是一个Redis服务器,因此启动Sentinel需要启动一个Redis服务器,但是Sentinel并不需要读取RDB/AOF文件来还原数据状态。
2.2 替换普通Redis代码为Sentinel的专用代码
Sentinel用于较少的Redis命令,大部分命令在Sentinel客户端都不支持,并且Sentinel拥有一些特殊的功能,这些需要Sentinel在启动时将Redis服务器使用的代码替换为Sentinel的专用代码。在此期间Sentinel会载入与普通Redis服务器不同的命令表。
Sentinel不支持SET、DBSIZE等命令;保留支持PING、PSUBSCRIBE、SUBSCRIBE、UNSUBSCRIBE、INFO等指令;这些指令在Sentinel工作中提供了保障。
2.3 初始化Sentinel状态
装载Sentine