主从复制流程
1、从服务器通过psync命令发送服务器已有的同步进度(同步源ID、同步进度offset)
2、master收到请求,同步源为当前master,则根据偏移量同步
3、同步源非当前master,则进入全量同步:master生成rdb,传输到salve,加载到slave内存。
一、主从复制应用场景
1)可以用来支持读写分离,slave 服务器设定为只读,可以用在数据安全的场景下。
2)可以使用主从复制来避免master持久化造成的开销。master关闭持久化,slave配置为不定期保存或是启用AOF。
二、主从复制的一些注意事项
1)读写分离场景:
数据复制延时导致读到过期数据或者读不到数据(网络原因、slave阻塞)
slave 应该可以自动切换
2) 全量复制情况下:
第一次建立主从关系或者runid不匹配会导致全量复制,故障转移的时候也会出现全量复制。
全量复制会带来复制风暴,如果slave节点较多,所有slave都要复制,对服务器的性能,网络
的压力都有很大影响
3)写能力有限
主从复制还是只有一台master,提供的写服务能力有限
4)master故障情况下
如果是master无持久化,slaver开启持久化来保留数据的场景,建议不要配置redis自动重启,redis自动重启,master启动后,无备份数据,可能导致集群数据丢失的情况。可以手动将从服务器变成主服务器,把原主服务器变成从服务器(主从切换)。
5)带有效期的key:
slave 不会让key过期,而是等待master让key过期,在LUA 脚本执行期间,不执行任何key过期操作