-
什么是主从复制
-
主从复制的配置
-
全部复制和部分复制
-
故障处理
-
开发运维常见问题
主从复制作用
数据副本
扩展读性能
简单总结:
1.一个master可以有多个slave
2.一个slave只能有一个master
3.数据流向是单向的,master到slave
主从复制的配置
两种实现方式:
slaveof命令 slaveof 127.0.0.1 6379
断掉主从不会删掉数据,但是再找新的主时候会被清空
配置
全部复制和部分复制
run_id:b75a2ccffc783a8379934046ad8d716e91740cd9
master_repl_offset:1079 偏移量
redis-cli -p 6382 info replication
全量复制的开销
1. redis什么时候会发生全量复制?
a) redis slave首启动或者重启后,连接到master时
b) redis slave进程没重启,但是掉线了,重连后不满足部分复制条件
2. redis什么时候会发生部分复制?
先来看部分复制需要的条件
a) 主从的redis版本>=2.8
b) redis slave进程没有重启,但是掉线了,重连了master(因为slave进程重启的话,run id就没有了)
c) redis slave保存的run id与master当前run id一致 (注:run id并不是pid,slave把它保存在内存中,重启就消失)
d) redis slave掉线期间,master保存在内存的offset可用,也就是master变化不大,被更改的指令都保存在内存
3. redis进程重启后会发生全量复制还是部分复制?
a) master重启时,run id会发生变化
b) slave重启时,run id会丢失
答:很显然,会发生全量复制,因为部分复制的条件之一run id已经不能满足
4.当全量复制或者同步复制完毕,增量是如何更新到slave的?
答:通过流式的命令更新,此时master就是slave的client,这样去理解。
5. run id如何查看?
答:通过info server命令查看
故障处理
SLAVE宕机
MASTER宕机
开发运维常见问题
1.读写分离 #读流量分摊到从节点,MySQL也是读写分离
可能遇到的问题:
复制数据延迟
读到过期数据
从节点故障
2.主从配置不一致
例如maxmemory不一致:丢失数据
例如数据结构优化参数(hash-max-ziplist-entries):内存不一致
3.规避全量复制
3.1 第一次全量复制,不可避免 小主节点 、低峰
3.2 节点运行ID不匹配 主节点重启(运行ID变化)
故障转移,例如哨兵或集群(sentinals和Redis Cluster)
3.3 复制积压缓冲区不足
网络中断,部分复制无法满足
增大复制缓冲区配置rel_backlog_size 默认1m,网络“增强”。#10m
4.规避复制风暴
4.1 单主节点复制风暴
问题:主节点重启,多从节点复制
解决:更换复制拓扑
4.2 单机器复制风暴
主节点分散多机器