- 主从复制流程
- 主从复制核心知识
- 主从复制应用场景
- 注意事项
- 搭建主从复制
1 主从复制流程
- 从服务器通过psync命令发送服务器已有的同步进度(同步源ID、同步进度offset)
- master收到请求,同步源为当前master,则根据偏移量增强同步
- 同步源非当前master,则进入全量同步:master生成rdb,传输到slave,加载到slave内存
2 主从复制核心知识
- Redis默认使用异步复制,slave和master之间异步地确认处理的数据量
- 一个master可以拥有多个slave
- slave可以接受其他slave的连接,slave可以有下级sub slave
- 主从同步过程在master侧是非阻塞的,即异步复制
- slave初次同步需要删除旧数据,加载新数据,会阻塞到来的连接请求
3 主从复制应用场景
- 读写分离,规避单机瓶颈
- 故障切换,master出问题后还有slave节点可以使用
- 主从复制可以用来支持读写分离
- slave服务器设定为只读,可以用在数据安全的场景下
- 可以使用主从复制来避免master持久化造成的开销。master关闭持久化,slave配置为不定期保存或是启动AOF。(注意:重新启动的master程序将从一个空数据集开始,如果一个slave试图与它同步,那么这个slave也会被清空。)
4 注意事项
读写分离场景:
数据复制延时导致读到过期数据或者读不到数据(网络原因、slave阻塞)
从节点故障(多个client如何迁移)
全量复制情况下:
第一次建立主从关系或者runid不匹配会导致全量复制
故障转移的时候也会出现全量复制
复制风暴:
master故障重启,如果slave节点较多,所有slave都要复制,对服务器的性能,网络的压力都有很大影响
写能力有限:
主从复制还是只有一台master,提供的写服务能力有限
master故障情况下:
如果是master无持久化,slave开启持久化来保留数据的场景,建议不要配置redis自动重启
启动redis自动重启,master启动后,无备份数据,可能导致集群数据丢失的情况
带有效期的key:
slave不会让key过期,而是等待master让key过期
在Lua脚本执行期间,不执行任何key过期操作
5 windows环境下搭建主从复制
在./conf文件下新建三个配置文件,分别为redis.windows-6379.conf
、redis-windows-6380.conf
和redis-windows-6381.conf
。
redis.windows-6379.conf
文件的内容
bind 0.0.0.0
port 6379
logfile "6379.log"
dbfilename "dump-6379.rdb"
daemonize yes
rdbcompression yes
redis.windows-6380.conf
文件的内容
bind 0.0.0.0
port 6380
logfile "6380.log"
dbfilename "dump-6380.rdb"
daemonize yes
rdbcompression yes
masterauth 123456
slaveof 127.0.0.1 6379
redis.windows-6381.conf
文件的内容
bind 0.0.0.0
port 6381
logfile "6381.log"
dbfilename "dump-6381.rdb"
daemonize yes
rdbcompression yes
masterauth 123456
slaveof 127.0.0.1 6379
注:如果未能主从同步复制成功,注意配置masterauth 123456
。
依次启动redis服务器
使用Redis Desktop Manager来进行查看管理。
通过命令 flushdb
来清空6379端口的redis服务器
通过keys *
来查看服务器中的key
通过set
命令往6379端口写数据
通过6380和6381来查看刚刚添加进去的数据,发现可以查找到,说明数据同步成功。
通过命令info replication
可以查看主从复制的信息,下图表示有两个slave连接到master服务器上,分别是6380和6381。
参考文章
结语
本人所有博客仅用于学习记录,不做任何商业用途,如涉及侵权,还请联系删除,感谢阅读,欢迎留言,一起进步~