Redis主从复制模式

    Redis的主从复制模式是哨兵模式和集群模式实现高可用的基础,那么什么是主从复制模式呢?主从复制模式是Redis提供高可用的服务的手段,分为主节点和从节点,从节点复制来自主节点的数据(通过slave-read-only=true,表示从节点只接受读命令),因为主节点不接受来自从节点的数据,因此一般主从复制模式都设置为主节点接受写命令,从节点接受读命令(这样是为了保证主从节点的数据一致性)。

    那主节点会在什么情况下将写的数据复制到从节点呢?这里redis提供了两种模式:

        1、redis提供了repl-disable-tcp-nodelay参数用于控制复制模式,当关闭TCP_NODELAY时,主节点产生的命令数据无论大小都会及时发送给从节点,这样主从之间延迟变小,但增加了网络带宽的消耗。主要适用于主从之间的网络环境良好的场景,如:同机架或者同机房部署。

        2、如果打开TCP_NODELAY时,主从节点会合并较小的TCP数据包从而节省带宽,默认发送时间间隔取决于Linux的内核,一般默认为40毫秒。这种配置节省了带宽但增加了主从之间的延迟。主要适用于主从网络环境复杂或者带宽紧张的场景,如:跨机房部署。

 

    主节点默认每隔10秒对从节点发送ping命令,判断从节点的存活性和连接状态。可通过参数repl-ping-slave-period控制发送频率。

    从节点在主线程中每隔1秒发送replconf ack {offset}命令,给主节点上报自己当前的复制偏移量。replconf命令的主要作用如下:

          1、实时监测主从节点网络状态

          2、上报自身复制偏移量,检查复制数据是否丢失,如果从节点数据丢失,再从主节点的复制缓存区 拉取丢失数据。

          3、实现保证从节点的数据和延迟性功能,通过min-slaves-to-write、min-slaves-max-lag参数配置定义。

 

    redis主从复制速度取决于主从直接的网络环境,正常情况下,延迟在1秒以内。

    redis主从复制延迟问题:

        Redis复制数据的延迟由于异步复制特性是无法避免的,延迟取决于网络带宽和命令阻塞情况。比如刚在主节点写入的数据后立刻在从节点读取可能获取不到。需要业务场景运行短时内的数据延迟。对于无法容忍大量延迟场景,可以编写外部监控程序监听主从节点的复制偏移量,当延迟较大时触发报警或者通知客户端避免读取延迟过高的从节点。

   


版权声明:本文为u012661248原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。