一、主从拓扑架构分析
1.1 一主一从
1.2 一主多从
1.3 树状主从
二、主从配置
2.1 建立主从关系:
从节点只能有一个主节点,当再次指定主节点时,从节点会删除旧主节点的数据。
# 1. 在redis.conf 中加入以下配置:
slaveof 192.168.153.133 6379
# 2.启动的时候带上 slaveof 参数
./redis-server ../conf/redis.conf --slaveof 192.168.153.133 6379
# 3.使用redis命令建立
slaveof 192.168.153.133 6379 #slaveof本身是异步命令,执行slaveof命令时,节点只保存主节点信息后返回
2.2 查看主从信息:
info replication
2.3 去除主从关系:
从节点去掉主节点后,从节点会重新变成主节点
slaveof no one
2.4 参数解释:
- 为了保持从节点和主节点的一致性,从节点一般都是只读的,可通过 replica-read-only 参数修改
- 主节点默认是立即将写命令同步到从节点,当网络较差时可开启 repl-disable-tcp-nodelay 参数,这样redis会合并tcp包,从而减少带宽占用。
- 为了安全,主节点可配置 requirepass 参数,这样从节点在连接的时候就需要密码验证。
三、主从复制原理
3.1 建立复制过程:
- 保存节点信息
- 建立socket连接
- 从节点ping 主节点,如果主节点没有回复pong,(网络超时或者主节点正在阻塞无法响应命令),则从节点会断开复制连接
- 权限验证
- 同步数据集
3.2 同步原理
3.3 全量复制流程
3.4 部分复制流程
3.5 心跳检测
四、总结
1. 主从节点的配置应保持一致
如 maxmemory 参数,如果主节点没有开启AOF,且主节点的maxmemory大于从节点,则有可能出现从节点因超过maxmemory参数而根据maxmemory-policy策略进行内存溢出控制,从而导致主从数据不一致。
2. 尽量避免全量复制
- 全量复制非常耗内存、CPU和网络资源,无法避免时也尽量在低峰期进行。
- 调整复制积压缓冲区的大小,repl_backlog_size>net_break_time * write_size_per_minute
net_break_time:网络中断时间,一般是分钟级别
write_size_per_minute:高峰期缓冲区每分钟的使用量,可通过info replication的master_repl_offset计算得出
- 减少redis节点的启动次数来避免runId的变化,对于修改hash-max-ziplist-value等参数的,可以通过debug reload 来重新加载配置文件。
3. 应避免复制风暴
大量从节点对同一主节点或者对同一台机器的多个主节点短时间内发起全量复制。