什么是redis主从复制
新建起的redis默认是主节点,可以通过设置slaveof ip:port
,成为某个主节点的从节点。主节点写入新数据后,把数据备份到从节点,使得主从节点拥有在某一时刻相同的数据。从节点存在的意义,当主节点发生故障时,通过哨兵机制,从节点升级为主节点继续为系统提供服务。在非常注重性能的系统,主节点可以考虑不做持久化操作,而是交给从节点去做,这样可以减轻主节点压力。主从节点可以有一主一从、一主多从、树状主从。
主从复制作用
- 数据冗余:主从复制实质上是数据的热备份,除了持久化方式外的另外一个选择
- 故障转移:当主节点发送问题后,借助哨兵机制,从节点可以升级为主节点,继续提供服务
- 负载均衡:在主节点压力大的时候,主从读写分离的方式是一个可供选择的方式。主节点负责写数据,从节点负责读数据,提高系统的并发量
- 高可用基础:redis集群的高可用离不开主从复制机制
从节点常用配置
1.-slaveof 192.168.146.10 6379,配置主节点位置
2.-port 6380 配置从节点端口
3.-masterauth 12345678 配置主节点的访问密码
4.-slave-read-only yes 从节点只读
主从数据同步流程
上述流程解析如下:
- 从节点从配置文件读取主节点信息,包括IP、端口、密码
- 从节点与主节点建立socket连接
- 从节点发送ping命令到主节点,若主节点回复pong,表示正常,开始正常心跳,默认10s一次,repl-ping-slave-period控制发送频率
- 从节点读取权限信息,向主节点发起权限验证
- 第一次同步数据是
全量复制
,后续进行基于命令的部分复制
。即主节点执行了写命令之后,会把命令发送给从节点,使得从节点执行相同的命令完成数据复制。显然,全量复制很消耗性能,redis从节点会优先选择部分复制。
命令持续复制阶段存在延迟
命令从主节点发送到从节点是异步过程,即主节点不会等从节点回复信息。因此,主从节点的数据不是强一致性的。主从节点的延迟程度主要受网络
、主节点中的repl-disable-tcp-nodelay
配置影响。当repl-disable-tcp-nodelay no时,TCP会立马将主节点的数据发送给从节点,带宽增加但延迟变小。相反,如果为disable-tcp-nodelay yes,TCP会粘包,此时带宽减少但延迟增加。