一、Redis主从复制原理与优化:
1、主从复制原理
1.1:单机弊端:机器故障、容量瓶颈、QPS瓶颈
1.2:主节点(1)、子节点(n)===》一主多从;一从只能对一主;数据流向时单项的:主=>从
1.3:主从复制作用(数据部分、扩展性性能)
2、主从复制配置
2.1:客户端命令实现(不需要重启服务、但是不便于管理)
2.1.1、客户端[从服务器]命令实现绑定主节点(slaveof 主IP 主端口号),异步返回给客户端信息
2.1.2、客户端[从服务器]命令实现取消复制主节点(slaveof no one),异步返回给客户端信息【从服务器旧的节点数据不会删除】
2.2:修改配置文件实现(统一配置便于管理,但需要重启服务才生效)
2.2.1、slaveof 主ip 主端口号 (绑定主节点)
2.2.2、slave-read-noly yes|no(是否设置为只读)
3、全量复制和偏移量
3.1:全量复制(全部复制所有数据备份)
3.1.1:从节点发送psync run_id offset==》主节点接到请求,确认全量复制,发送fullsync run_id offset==》从节点保存信息==》主节点执行bgsave同时处理新写入请求,并刷新到buffer==》主节点发送rdb==》主节点发送buffer的新数据==》从节点刷新旧数据==》从节点load 新rdb数据
3.2:偏移量(info replication=》master_repl_offset:1888|slave_repl_offset:1978)
4、全量复制开销
4.1:bgsave(对主节点的cpu、内存、硬盘都有一定的开销)
4.2:RDB文件网络传输时间
4.3:从节点清空数据时间
4.4:从节点加载RDB时间
4.5:可能的AOF重写时间
4.6:部分复制(从节点失去连接==》主节点在此区间写一份数据到缓存中==》从节点重新连接==》发送pysnc run_id offset==》主节点根据偏移量continue复制缓存中的数据==》发送数据给从节点
5、主从复制故障处理(哨兵机制)
5.1:slave宕机
5.2:master宕机
6、开发与运维中的问题
6.1、读写分离
6.1.1:读流量分摊到从节点
6.1.2:可能遇到问题(复制数据延迟、读到过期的数据、从节点故障)
6.2、主从配置不一致
6.2.1:maxmemory不一致:丢失数据
6.2.2:数据结构优化参数(hash-max-ziplist-entries):内存不一致
6.3、规避全量复制
6.3.1:第一次全量复制(不可避免、小主节点,低峰)
6.3.2:节点运行ID不匹配(主节点重启[运行ID变化]、故障转移。例如哨兵和集群)
6.3.3:复制积压缓冲区不足(网络中断,部分复制无法满足;增大复制缓冲区配置rel_backlog_size,网络"增强")
6.4、规避复制风暴(出现大量的全量复制)
6.4.1:单主节点复制风暴(问题:主节点重启,多从节点复制;解决:更换复制拓补)
6.4.2:单机器复制风暴(机器宕机,大量全量复制;主节点分散多机器)