Redis 高可用架构系列(二)哨兵模式
上一篇中,我们已经搭建起了一个主从架构的 Redis 集群环境,通过读写分离,主库主要进行写操作,而读操作可以让从节点来进行分摊,从而减少主库的压力,而且使用类似树节点的架构,来缓解主从复制风暴,那么传统的主从架构有一个很重要的问题,就是主库的单点问题,一旦主库发生了宕机,会导致整个集群不可用,今天就来聊一聊主从架构的优化版哨兵模式。
Redis 哨兵高可用架构
sentinel 哨兵是特殊的 redis 服务,不提供读写服务,主要用来监控 redis 实例节点。 哨兵架构下 client 端第一次从哨兵找出 redis 的主节点,后续就直接访问 redis 的主节点,不会每次都通过 sentinel 代理访问 redis 的主节点,当 redis 的主节点发生变化,哨兵会第一时间感知到,并且将新的 redis 主节点通知给 client 端(这里面 redis 的 client 端一般都实现了订阅功能,订阅 sentinel 发布的节点变动消息)
哨兵架构搭建步骤
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 哨兵实例
redis‐sentinel sentinel‐26379.conf
4. 查看 sentinel 的 info 信息
redis‐cli ‐p 26379
127.0.0.1:26379 > info #可以看到Sentinel的info里已经识别出了redis的主从
5. 可以自己再配置两个 sentinel,端口 26380 和 26381,注意上述配置文件里的对应数字都要修改
sentinel 集群都启动完毕后,会将哨兵集群的元数据信息写入所有 sentinel 的配置文件里去(追加在文件的 最下面),我们查看下如下配置文件 sentinel-26379.conf,如下所示:
sentinel known‐replica mymaster 192.168.0.60 6380 #代表redis主节点的从节点信息
sentinel known‐replica mymaster 192.168.0.60 6381 #代表redis主节点的从节点信息
sentinel known‐sentinel mymaster 192.168.0.60 26380 52d0a5d70c1f90475b4fc03b6ce7c3c569 35760f #代表感知到的其它哨兵节点
sentinel known‐sentinel mymaster 192.168.0.60 26381 e9f530d3882f8043f76ebb8e1686438ba8 bd5ca6 #代表感知到的其它哨兵节点
当 redis 主节点如果挂了,哨兵集群会重新选举出新的 redis 主节点,同时会修改所有 sentinel 节点配置文件 的集群元数据信息,比如 6379 的 redis 如果挂了,假设选举出的新主节点是 6380,则 sentinel 文件里的集 群元数据信息会变成如下所示:
sentinel known‐replica mymaster 192.168.0.60 6379 #代表redis主节点的从节点信息
sentinel known‐replica mymaster 192.168.0.60 6381 #代表redis主节点的从节点信息
sentinel known‐sentinel mymaster 192.168.0.60 26380 52d0a5d70c1f90475b4fc03b6ce7c3c569 35760f #代表感知到的其它哨兵节点
sentinel known‐sentinel mymaster 192.168.0.60 26381 e9f530d3882f8043f76ebb8e1686438ba8 bd5ca6 #代表感知到的其它哨兵节点
同时还会修改 sentinel 文件里之前配置的 mymaster 对应的 6379 端口,改为 6380
sentinel monitor mymaster 192.168.0.60 6380 2
当 6379 的 redis 实例再次启动时,哨兵集群根据集群元数据信息就可以将 6379 端口的 redis 节点作为从节点 加入集群
推荐阅读
•Redis 高可用架构系列(一)主从架构•聊一聊 Redis 基本类型和使用场景•揭秘 Redis 的高性能•Redis 的持久化原理
如果觉得文章对你有帮助,可以点个赞,转载请注名出处。
评论 (0)