【redis】redis 主从哨兵架构,主从切换,配置修改
redis 主从哨兵架构,主动发生切换时,主、从、哨兵的配置文件是什么进程修改的?
在 Redis 主从哨兵架构中,当发生主动切换时,配置文件的修改是由 Redis 哨兵进程完成的。
Redis 哨兵进程会监控 Redis 主节点的状态,并在主节点出现故障或不可达时,自动发起切换操作。
在进行主动切换时,Redis 哨兵进程会实现如下角色配置文件的修改:
-
主节点的配置文件(通常是 redis.conf):哨兵会将原来的主节点配置文件中的
slaveof
参数修改为新的主节点的地址和端口。 -
从节点的配置文件:哨兵会将原来的从节点配置文件中的
slaveof
参数修改为新的主节点的地址和端口。 -
哨兵的配置文件(通常是 sentinel.conf):哨兵会将原来的主节点地址和端口修改为新的主节点的地址和端口。
通过修改以上配置文件,Redis 哨兵实现了主节点和从节点的切换,使新的主节点能够接管服务,从而实现高可用性和故障恢复。
redis 主从哨兵架构,主动发生切换时,哨兵进程是如何实现修改主从配置文件的?
当哨兵进程检测到主节点不可用时,它会选举一个新的主节点,并将新的主节点信息更新到所有的从节点和其他哨兵节点的配置文件中。
具体的步骤如下:
-
哨兵进程通过发送命令来检测主节点是否可用。如果主节点无法响应,哨兵进程就会认为主节点不可用。
-
哨兵进程开始选举新的主节点。它会从所有的可用从节点中选取一个作为新的主节点,并将其信息更新到所有的从节点和其他哨兵节点的配置文件中。
-
哨兵进程向选中的从节点发送命令,要求其成为新的主节点。从节点会执行相应的操作,将自己变为主节点。
-
哨兵进程将新的主节点信息发送给其他的从节点和哨兵节点。其他节点会更新自己的配置文件,将新的主节点信息保存下来。
-
所有的从节点和其他哨兵节点在更新配置文件后,会重新连接新的主节点,并开始同步数据。
需要注意的是,哨兵进程并不直接修改主从节点的配置文件,而是通过发送命令来通知节点更新配置文件。
节点接收到命令后,会自行修改配置文件并重新加载。
这样可以确保配置文件的一致性,并避免了哨兵进程直接修改配置文件所带来的问题。
$ cat /path/to/sentinel.conf
daemonize yes
protected-mode no
port 16379
sentinel myid fa88e5b17eb9481c2596515bec6bcf71a0749650
sentinel deny-scripts-reconfig yes
sentinel monitor test 192.168.1.101 6379 2
sentinel auth-pass test XXX
logfile "/path/to/redis-sentinel.log"
# Generated by CONFIG REWRITE
dir "/path/to/test"
sentinel config-epoch test 2
sentinel leader-epoch test 3
sentinel known-slave test 192.168.1.102 6379
sentinel known-sentinel test 192.168.1.104 16379 bc62841a3d58b54356e332410b71fb33e3100639
sentinel known-sentinel test 192.168.1.105 16379 ee2373b805d6d15e1072483a7e0a2b200a3df4a7
sentinel current-epoch 3
该哨兵配置文件中包含以下信息:
-
daemonize yes
:表示哨兵进程以守护进程方式运行。 -
protected-mode no
:表示哨兵不启用保护模式,即可以通过外部网络访问。 -
port 16379
:表示哨兵监听的端口号为16379。 -
sentinel myid fa88e5b17eb9481c2596515bec6bcf71a0749650
:表示哨兵的唯一标识为fa88e5b17eb9481c2596515bec6bcf71a0749650。 -
sentinel deny-scripts-reconfig yes
:表示禁止通过脚本重写哨兵的配置。 -
sentinel monitor test 192.168.1.101 6379 2
:表示监控一个名为"test"的主节点,主节点的地址为192.168.1.101:6379,当主节点失效时,需要至少2个哨兵同意切换到新的主节点。 -
sentinel auth-pass test XXX
:表示连接redis实例名为test的主节点时使用的密码为"XXX"。 -
logfile "/path/to/redis-sentinel.log"
:表示哨兵日志的存储路径。 -
dir "/path/to/test"
:表示哨兵的工作目录。 -
sentinel config-epoch test 2
:表示当前配置的纪元号为2。 -
sentinel leader-epoch test 3
:表示当前领导者的纪元号为3。 -
sentinel known-slave test 192.168.1.102 6379
:表示已知的从节点为192.168.1.102:6379。 -
sentinel known-sentinel test 192.168.1.104 16379 bc62841a3d58b54356e332410b71fb33e3100639
:表示已知的其他哨兵节点为192.168.1.104:16379,该哨兵节点的唯一标识为bc62841a3d58b54356e332410b71fb33e3100639。 -
sentinel known-sentinel test 192.168.1.105 16379 ee2373b805d6d15e1072483a7e0a2b200a3df4a7
:表示另一个已知的其他哨兵节点为192.168.1.105:16379,该哨兵节点的唯一标识为ee2373b805d6d15e1072483a7e0a2b200a3df4a7。 -
sentinel current-epoch 3
:表示当前纪元号为3。
哨兵中的用于管理和监redis集群的关键配置
sentinel config-epoch test 2
sentinel leader-epoch test 3
sentinel current-epoch 3
这三项配置是Redis Sentinel(哨兵)中的关键配置,用于管理和监控Redis主从复制的状态和配置。
-
sentinel config-epoch
(配置纪元):表示当前Redis Sentinel(哨兵)集群的配置版本号。每当配置发生更改时,这个值会自增。该值用于帮助哨兵判断是否需要更新配置。 -
sentinel leader-epoch
(领导者纪元):表示当前领导者哨兵的纪元。在Redis Sentinel集群中,只有一个哨兵被选举为领导者,负责进行决策和协调其他哨兵。当哨兵发现当前领导者失效时,会进行选举,选出新的领导者,并将其纪元值加1。 -
sentinel current-epoch
(当前纪元):表示当前Redis Sentinel集群的纪元。每当发生配置更改或选举新的领导者时,这个值会自增。其他哨兵可以通过比较各自的当前纪元来判断是否需要更新自己的配置。
这些配置项对于Redis Sentinel集群的正常运行非常重要,它们用于确保配置的一致性和领导者的正确性。
如果这些配置项发生了不一致或错误,可能会导致Redis Sentinel集群的故障或不可用。