目录
回顾
主从结构中 redis 从节点上只能读数据,不能写入数据,主节点写入的数据,在从节点都能查看并获取到
slaveof 命令
断开主从复制关系
- 在当前从节点的 redis 客户端中使用 slaveof no one 可以断开现有的主从复制关系,并且自身成为新的主节点
- 这里从节点断开复制后并不会抛弃原有数据,只是无法再获取主节点上的数据变化
切换主从复制关系
-
通过 slaveof 命令还可以实现切主操作,将当前从节点的数据源切换到另⼀个主节点,并且切换后会先删除当前节点的所有数据,再复制新的主节点数据。执行
slaveof 新主节点IP 新主节点端口
命令即可。 -
例如将端口号为 6381 从节点的 “主”,换成 端口号为 6380,如下
-
现在的情况就是6379是6380的主节点,6380是6381的主节点
-
而且此处的修改是临时的,如果重启 redis 服务器,就会按照最初再配置文件中设置的内容来建立主从关系
只读
要设置Redis的主从复制为只读模式,可以通过修改从节点的配置文件来实现。
-
首先,在主节点的配置文件redis.conf中,设置slave-read-only参数为yes:
slave-read-only yes
-
然后,在从节点的配置文件redis.conf中,设置slave-read-only参数为yes,并且设置masterauth参数来保护主节点的写操作:
slave-read-only yes masterauth <master_password>
-
其中,
<master_password>
是主节点的密码。 -
保存并关闭配置文件后,重新启动从节点即可。从节点在只读模式下,将无法接受任何写入操作,只能进行读取操作。如果有写入操作,从节点将抛出错误。
-
确保从节点处于只读模式后,可以通过在从节点上执行
redis-cli info
命令来验证。在输出的信息中查找role:slave
,并确保master_replid
和master_repl_offset
等参数被正确地设置为主节点的信息。 -
由于复制只能从主节点到从节 点,对于从节点的任何修改主节点都⽆法感知,修改从节点会造成主从数据不⼀致。所以建议线上不要修改从节点的只读模式。
网络延迟问题
Redis主从复制中的网络延迟问题是指主节点与从节点之间进行数据同步时所出现的网络延迟现象。
-
在Redis主从复制中,主节点将自己的写操作记录在内存中的AOF日志或者RDB文件中,并且将这些写操作发送给从节点,从节点则通过执行这些写操作来保持与主节点的数据同步。
-
然而,由于网络的不稳定性或者网络带宽的限制,主节点发送给从节点的数据可能会发生延迟。这可能导致从节点在执行主节点的写操作之前会有一段时间的数据不一致。
-
例如,如果主节点发送的写操作在发送之前就出现了网络延迟,从节点可能会在这段延迟期间没有接收到新的写操作,并且从节点上的数据可能会落后于主节点。