Redis主从复制
原理
1. 副本库通过slaveof 127.0.0.1 6379命令,连接主库,并发送SYNC给主库 2. 主库收到SYNC,会立即触发BGSAVE,后台保存RDB,发送给副本库 3. 副本库接收后会应用RDB快照 4. 主库会陆续将中间产生的新的操作,保存并发送给副本库 5. 到此,我们主复制集就正常工作了 6. 再此以后,主库只要发生新的操作,都会以命令传播的形式自动发送给副本库. 7. 所有复制相关信息,从info信息中都可以查到.即使重启任何节点,他的主从关系依然都在. 8. 如果发生主从关系断开时,从库数据没有任何损坏,在下次重连之后,从库发送PSYNC给主库 9. 主库只会将从库缺失部分的数据同步给从库应用,达到快速恢复主从的目的
如何配置
方式一: -在从库执行 SLAVEOF 127.0.0.1 6379, -断开关系 slaveof no one 方式二:配置文件(配在从库的配置文件中) slaveof 127.0.0.1 6379 slave-read-only yes
复制常见问题
1 读写分离 读流量分摊到从节点 可能遇到问题:复制数据延迟,读到过期数据,从节点故障 2 主从配置不一致 maxmemory不一致:丢失数据 数据结构优化参数:主节点做了优化,从节点没有设置优化,会出现一些问题 3 规避全量复制 第一次全量复制,不可避免:小主节点,低峰(夜间) 节点运行id不匹配:主节点重启(运行id变化) 复制挤压缓冲区不足:增大复制缓冲区大小,rel_backlog_size 4 规避复制风暴 单主节点复制风暴,主节点重启,所有从节点复制