目录
前言
一、哨兵模式概念
二、作用
三、缺点
四、结构
五、搭建
总结
Redis哨兵模式是一种用于实现Redis高可用性的机制。在哨兵模式下,有一个或多个哨兵进程监控Redis主节点和从节点的状态,并在主节点出现故障时自动将一个从节点升级为新的主节点,以确保系统的持续可用性。
哨兵进程通过发送心跳检测来监控Redis节点的状态。如果主节点出现故障,哨兵会选举一个新的主节点,并将其他从节点重新配置为新的主节点的从节点。这个过程是自动进行的,无需人工干预。
哨兵模式还可以处理多个从节点的故障。当多个从节点同时失效时,哨兵会重新配置剩余的从节点,并将它们连接到新的主节点上。这样即使有多个节点发生故障,系统依然可以保持正常运行。
除了监控和自动故障恢复外,哨兵模式还提供了一些其他功能,如配置管理、节点间通信等。它可以通过发布订阅机制实时通知客户端节点的状态变化,方便客户端进行相应的调整。
总的来说,Redis哨兵模式是一种实现Redis高可用性的解决方案,它通过监控和自动故障恢复来确保系统的持续可用性,同时提供了一些其他功能来方便客户端的管理和调整。
依托于主从模式
是一个分布式系统,用于对主从结构中的每台服务器进行监控,当出现故障时通过投票机制选择新的 Master 并将所有 Slave 连接到新的 Master。所以整个运行哨兵的集群的数量不得少于3个节点。
监控:哨兵会不断地检查主节点和从节点是否运作正常。
自动故障转移:当主节点不能正常工作时,哨兵会开始自动故障转移操作,它会将失效主节点的其中一个从节点升级为新的主节点,并让其他从节点改为复制新的主节点。
通知(提醒):哨兵可以将故障转移的结果发送给客户端。
写操作无法负载均衡
存储能力受到单机的限制
哨兵无法对从节点进行自动故障转移,在读写分离场景下,从节点故障会导致读服务不可用,需要对从节点做额外的监控、切换操作。
哨兵节点:哨兵系统由一个或多个哨兵节点组成,哨兵节点是特殊的redis节点,不存储数据。
数据节点:主节点和从节点都是数据节点。
1、yum 安装的 哨兵模式配置文件位置位于 /etc/redis-sentinel.conf 一般一个REDIS都会伴随一个哨兵,但是他默认是关闭的,可以根据下图内容操作开启哨兵模式
关闭保护模式 protected-mode no Redis哨兵默认的监听端口 port 26379 |
2.我们先进行主从配置:1主3从,复制并修改他们的配置文件
[root@localhost etc]# cp redis.conf /opt/redis_6380.conf
[root@localhost etc]# cp redis.conf /opt/redis_6381.conf
[root@localhost etc]# cp redis.conf /opt/redis_6382.conf
[root@localhost etc]# vim /opt/redis_6380.conf
[root@localhost etc]# vim /opt/redis_6381.conf
[root@localhost etc]# vim /opt/redis_6382.conf
[root@localhost etc]# redis-server /opt/redis_6380.conf
[root@localhost etc]# redis-server /opt/redis_6381.conf
[root@localhost etc]# redis-server /opt/redis_6382.conf
[root@localhost etc]# netstat -anput |grep redis
tcp 0 0 192.168.73.10:6379 0.0.0.0:* LISTEN 12833/redis-server
tcp 0 0 0.0.0.0:6380 0.0.0.0:* LISTEN 13699/redis-server
tcp 0 0 0.0.0.0:6381 0.0.0.0:* LISTEN 13711/redis-server
tcp 0 0 0.0.0.0:6382 0.0.0.0:* LISTEN 13723/redis-server
tcp 0 0 192.168.73.10:37065 192.168.73.10:6379 ESTABLISHED 13723/redis-server
tcp 0 0 192.168.73.10:34195 192.168.73.10:6379 ESTABLISHED 13699/redis-server
tcp 0 0 192.168.73.10:6379 192.168.73.10:37065 ESTABLISHED 12833/redis-server
tcp 0 0 192.168.73.10:6379 192.168.73.10:34195 ESTABLISHED 12833/redis-server
tcp 0 0 192.168.73.10:46341 192.168.73.10:6379 ESTABLISHED 13711/redis-server
tcp 0 0 192.168.73.10:6379 192.168.73.10:46341 ESTABLISHED 12833/redis-server
验证
[root@localhost etc]# redis-cli -h 192.168.73.10 -p 6379
192.168.73.10:6379> role
1) "master"
2) (integer) 435
3) 1) 1) "192.168.73.10"
2) "6380"
3) "435"
2) 1) "192.168.73.10"
2) "6381"
3) "435"
3) 1) "192.168.73.10"
2) "6382"
3) "435"
3.同理配置哨兵模式文件并拷贝
关闭保护模式
protected-mode no
Redis哨兵默认的监听端口
port 26379
以此为模版,以端口区分命名cp,并修改这些文件对应的端口
[root@localhost opt]# cp /etc/redis-sentinel.conf /opt/redis-sentinel_6380.conf
[root@localhost opt]# cp /etc/redis-sentinel.conf /opt/redis-sentinel_6381.conf
[root@localhost opt]# cp /etc/redis-sentinel.conf /opt/redis-sentinel_6383.conf
修改完成后启动并查看
[root@localhost opt]# systemctl start redis-sentinel.service
[root@localhost opt]# redis-sentinel redis-sentinel_6380.conf
[root@localhost opt]# redis-sentinel redis-sentinel_6381.conf
[root@localhost opt]# netstat -anput |grep redis
tcp 0 0 0.0.0.0:26379 0.0.0.0:* LISTEN 14843/redis-sentine
tcp 0 0 192.168.73.10:6379 0.0.0.0:* LISTEN 12833/redis-server
tcp 0 0 0.0.0.0:26380 0.0.0.0:* LISTEN 14867/redis-sentine
tcp 0 0 0.0.0.0:6380 0.0.0.0:* LISTEN 13699/redis-server
tcp 0 0 0.0.0.0:26381 0.0.0.0:* LISTEN 14878/redis-sentine
tcp 0 0 0.0.0.0:6381 0.0.0.0:* LISTEN 13711/redis-server
验证:我们将master结束进程
[root@localhost opt]# kill -9 12833
[root@localhost opt]# netstat -anput |grep redis
tcp 0 0 0.0.0.0:26379 0.0.0.0:* LISTEN 14843/redis-sentine
tcp 0 0 0.0.0.0:26380 0.0.0.0:* LISTEN 14867/redis-sentine
tcp 0 0 0.0.0.0:6380 0.0.0.0:* LISTEN 13699/redis-server
tcp 0 0 0.0.0.0:26381 0.0.0.0:* LISTEN 14878/redis-sentine
tcp 0 0 0.0.0.0:6381 0.0.0.0:* LISTEN 13711/redis-server
查看哨兵是否选取出新的master:
查看日志文件vim /var/log/redis/sentinel.log获取信息,得知6381的REDIS成为了master
14878:X 08 Aug 2023 22:07:36.999 # +elected-leader master mymaster 192.168.73.10 6379
14878:X 08 Aug 2023 22:07:36.999 # +failover-state-select-slave master mymaster 192.168.73.10 6379
14878:X 08 Aug 2023 22:07:37.099 # +selected-slave slave 192.168.73.10:6381 192.168.73.10 6381 @ mymaster 192.168.73.10 6379
14878:X 08 Aug 2023 22:07:37.100 * +failover-state-send-slaveof-noone slave 192.168.73.10:6381 192.168.73.10 6381 @ mymaster 192.168.73.10 6379
14878:X 08 Aug 2023 22:07:37.183 * +failover-state-wait-promotion slave 192.168.73.10:6381 192.168.73.10 6381 @ mymaster 192.168.73.10 6379
14878:X 08 Aug 2023 22:07:37.185 # +promoted-slave slave 192.168.73.10:6381 192.168.73.10 6381 @ mymaster 192.168.73.10 6379
14878:X 08 Aug 2023 22:07:37.185 # +failover-state-reconf-slaves master mymaster 192.168.73.10 6379
14878:X 08 Aug 2023 22:07:37.254 * +slave-reconf-sent slave 192.168.73.10:6380 192.168.73.10 6380 @ mymaster 192.168.73.10 6379
14867:X 08 Aug 2023 22:07:37.257 # +config-update-from sentinel bced7d4d454ab39f3095a2959bada012c3e335d3 192.168.73.10 26381 @ mymaster 192.168.73.10 6379
14867:X 08 Aug 2023 22:07:37.257 # +switch-master mymaster 192.168.73.10 6379 192.168.73.10 6381
14867:X 08 Aug 2023 22:07:37.257 * +slave slave 192.168.73.10:6380 192.168.73.10 6380 @ mymaster 192.168.73.10 6381
14867:X 08 Aug 2023 22:07:37.257 * +slave slave 192.168.73.10:6382 192.168.73.10 6382 @ mymaster 192.168.73.10 6381
14867:X 08 Aug 2023 22:07:37.257 * +slave slave 192.168.73.10:6379 192.168.73.10 6379 @ mymaster 192.168.73.10 6381
14843:X 08 Aug 22:07:37.257 # +new-epoch 1
14843:X 08 Aug 22:07:37.257 # +config-update-from sentinel bced7d4d454ab39f3095a2959bada012c3e335d3 192.168.73.10 26381 @ mymaster 192.168.73.10 6379
14843:X 08 Aug 22:07:37.257 # +switch-master mymaster 192.168.73.10 6379 192.168.73.10 6381
14843:X 08 Aug 22:07:37.257 * +slave slave 192.168.73.10:6380 192.168.73.10 6380 @ mymaster 192.168.73.10 6381
14843:X 08 Aug 22:07:37.257 * +slave slave 192.168.73.10:6382 192.168.73.10 6382 @ mymaster 192.168.73.10 6381
14843:X 08 Aug 22:07:37.257 * +slave slave 192.168.73.10:6379 192.168.73.10 6379 @ mymaster 192.168.73.10 6381
14878:X 08 Aug 2023 22:07:38.017 # -odown master mymaster 192.168.73.10 6379
14878:X 08 Aug 2023 22:07:38.256 * +slave-reconf-inprog slave 192.168.73.10:6380 192.168.73.10 6380 @ mymaster 192.168.73.10 6379
14878:X 08 Aug 2023 22:07:38.256 * +slave-reconf-done slave 192.168.73.10:6380 192.168.73.10 6380 @ mymaster 192.168.73.10 6379
14878:X 08 Aug 2023 22:07:38.314 * +slave-reconf-sent slave 192.168.73.10:6382 192.168.73.10 6382 @ mymaster 192.168.73.10 6379
14878:X 08 Aug 2023 22:07:39.333 * +slave-reconf-inprog slave 192.168.73.10:6382 192.168.73.10 6382 @ mymaster 192.168.73.10 6379
14878:X 08 Aug 2023 22:07:39.333 * +slave-reconf-done slave 192.168.73.10:6382 192.168.73.10 6382 @ mymaster 192.168.73.10 6379
14878:X 08 Aug 2023 22:07:39.394 # +failover-end master mymaster 192.168.73.10 6379
14878:X 08 Aug 2023 22:07:39.395 # +switch-master mymaster 192.168.73.10 6379 192.168.73.10 6381
14878:X 08 Aug 2023 22:07:39.395 * +slave slave 192.168.73.10:6380 192.168.73.10 6380 @ mymaster 192.168.73.10 6381
14878:X 08 Aug 2023 22:07:39.395 * +slave slave 192.168.73.10:6382 192.168.73.10 6382 @ mymaster 192.168.73.10 6381
14878:X 08 Aug 2023 22:07:39.395 * +slave slave 192.168.73.10:6379 192.168.73.10 6379 @ mymaster 192.168.73.10 6381
14867:X 08 Aug 2023 22:08:07.290 # +sdown slave 192.168.73.10:6379 192.168.73.10 6379 @ mymaster 192.168.73.10 6381
14843:X 08 Aug 22:08:07.313 # +sdown slave 192.168.73.10:6379 192.168.73.10 6379 @ mymaster 192.168.73.10 6381
14878:X 08 Aug 2023 22:08:09.473 # +sdown slave 192.168.73.10:6379 192.168.73.10 6379 @ mymaster 192.168.73.10 6381
登录6381端口验证
如果此时将原来的master6379上线,6381还会是master吗?
答案是不会
好了,今天就到这里了,谢谢大家,拜拜~~~