昨天学习了 Redis
简单的集群架构. 但是有一些缺点, 就是在主节点挂了后, 需要手动的配置从节点将其变为主节点. 那么今天学的这个, 就可以解决这个手动配置的过程. 也就是哨兵架构. 它是一种用于管理多个 Redis
服务器的系统, 它提供了一种机制, 可以自动切换主节点. 当主节点出现故障时, 可以自动从从节点中选择一个作为新的主节点.
1. 什么是哨兵架构
哨兵架构sentinel
是一种高可用性解决方案. 当主节点出现故障时, 哨兵架构sentinel
可以自动将系统切换到从节点, 从而保证系统的持续运行. 此外, 哨兵架构sentinel
还可以帮助开发者监控Redis
服务器的运行状态, 发送通知, 记录事件等.
哨兵架构sentinel
的工作原理是通过哨兵进程来实现的.
哨兵进程是一个独立的进程, 它定期检查主节点和从节点的状态. 当主节点出现故障时,哨兵进程会从从节点中选择一个作为新的主节点, 并更新配置信息.
哨兵不提供读写服务, 主要就是为了监控 Redis 节点. 哨兵架构下的 client 端第一次从哨兵找出 Redis 主节点, 后续就直接访问 Redis 的主节点, 不会每次都通过哨兵代理访问 Redis 的主节点. 当主节点发生变化, 哨兵会第一时间感知到. 并且将新的 Redis 主节点通知给 client 端.(这里面 Redis 和 client 端一般都实现了订阅功能. 订阅哨兵 sentinel 发布的节点变动消息)
2. 哨兵架构的简单搭建
1、复制一份sentinel.conf文件
cp sentinel.conf sentinel‐26379.conf
2、将相关配置修改为如下值:
port 26379
daemonize yes
pidfile "/var/run/redis‐sentinel‐26379.pid"
logfile "26379.log"
dir "/usr/local/redis‐5.0.3/data"
# sentinel monitor <master‐redis‐name> <master‐redis‐ip> <master‐redis‐port> <quorum>
# quorum是一个数字,指明当有多少个sentinel认为一个master失效时(值一般为:sentinel总数/2 + 1),master才算真正失效
sentinel monitor mymaster 192.168.0.60 6379 2 # mymaster这个名字随便取,客户端访问时会用到
3、启动sentinel哨兵实例
src/redis‐sentinel sentinel‐26379.conf
4、查看sentinel的info信息
src/redis‐cli ‐p 26379
127.0.0.1:26379>info
可以看到Sentinel的info里已经识别出了redis的主从
5、可以自己再配置两个sentinel,端口26380和26381,注意上述配置文件里的对应数字都要修改
sentinel
集群都启动完毕后, 会将哨兵集群的元数据信息写入所有的 sentinel
的配置文件里去(追加在文件的最下面).查看如下配置文件 sentinel-26379.conf
.
1 sentinel known‐replica mymaster 192.168.0.60 6380 #代表redis主节点的从节点信息
2 sentinel known‐replica mymaster 192.168.0.60 6381 #代表redis主节点的从节点信息
3 sentinel known‐sentinel mymaster 192.168.0.60 26380 52d0a5d70c1f90475b4fc03b6ce7c3c56935760f #代表感知到的其它哨兵节点
4 sentinel known‐sentinel mymaster 192.168.0.60 26381 e9f530d3882f8043f76ebb8e1686438ba8bd5ca6 #代表感知到的其它哨兵节点
当Redis
主节点如果挂了, 哨兵集群会重新选举出新的Redis
主节点, 同时会修改所有sentinel
节点配置文件 的集群元数据信息, 比如6379的Redis
如果挂了, 假设选举出的新主节点是6380, 则sentinel
文件里的集 群元数据信息会变成如下所示:
1 sentinel known‐replica mymaster 192.168.0.60 6379 #代表主节点的从节点信息
2 sentinel known‐replica mymaster 192.168.0.60 6381 #代表主节点的从节点信息
3 sentinel known‐sentinel mymaster 192.168.0.60 26380 52d0a5d70c1f90475b4fc03b6ce7c3c56935760f #代表感知到的其它哨兵节点
4 sentinel known‐sentinel mymaster 192.168.0.60 26381 e9f530d3882f8043f76ebb8e1686438ba8bd5ca6 #代表感知到的其它哨兵节点
同时还会修改sentinel
文件里之前配置的 mymaster
对应的6379端口,改为6380
1 sentinel monitor mymaster 192.168.0.60 6380 2
3. 总结
简单的来说 Redis
的哨兵架构工作流程可以分为以下几个步骤
-
启动
当Redis
服务器启动时, 哨兵进程也会被启动. 哨兵进程是一个独立的进程, 它负责监控Redis
主节点和从节点的运行状态. -
监控
哨兵进程定期检查主节点和从节点的状态, 它会检查服务器是否正常运行, 是否能够正常响应请求. -
故障检测
如果哨兵进程检测到主节点无法正常运行, 它会将这个信息广播给其他的哨兵进程. 当大多数哨兵进程都确认主进程出现故障后, 哨兵进程会开始故障恢复流程. -
选择新的主节点
哨兵进程会从从节点中选择一个作为新的主节点, 选择的标准包括节点的运行状态, 数据的更新程序等. -
切换主节点
当新的主节点被选定后,哨兵进程会更新配置信息, 将所有的请求重定向到新的主节点. -
通知client
哨兵进程通知应用程序主节点已经改变, 应用程序需要更新自己的配置信息,以便将请求发送到新的主节点.