目录
前言
一、哨兵模式概念
二、作用
三、缺点
四、结构
五、搭建
总结
前言
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
vim /etc/redis-sentinel.conf
以此为模版,以端口区分命名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吗?
答案是不会
总结
好了,今天就到这里了,谢谢大家,拜拜~~~