Redis 高可用架构系列(二)哨兵模式

148次围观   0个点赞   0人评论

作者头像

zeal

7个月前 发表于 技术专栏

Redis 高可用架构系列(二)哨兵模式

148次围观   0个点赞   0人评论

作者头像

zeal

7个月前 发表于 技术专栏

Redis 高可用架构系列(二)哨兵模式

上一篇中,我们已经搭建起了一个主从架构的 Redis 集群环境,通过读写分离,主库主要进行写操作,而读操作可以让从节点来进行分摊,从而减少主库的压力,而且使用类似树节点的架构,来缓解主从复制风暴,那么传统的主从架构有一个很重要的问题,就是主库的单点问题,一旦主库发生了宕机,会导致整个集群不可用,今天就来聊一聊主从架构的优化版哨兵模式

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)
在这里说点什么吧... (取消回复)
留下一个好听的昵称吧!
好听的昵称!
请输入正确的邮箱格式!
不错的邮箱!
评论内容不能为空!
理性发言,和谐讨论!