Redis之主从复制原理 详解
2022/2/23 19:26:03
本文主要是介绍Redis之主从复制原理 详解,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
Redis 主从复制
主要用来实现 redis 数据的可靠性;防止主 redis 所在磁盘损坏,造成数据永久丢失;
主从之间采用异步复制的方式;从数据库只读不能写
命令
命令: redis-server --replicaof 127.0.0.1 7001
在 redis 5.0 以前使用 slaveof ;redis 5.0 之后使用 replicaof ;
# redis.conf replicaof 127.0.0.1 7002 info replication
数据同步
全量数据同步
增量数据同步
因为网络抖动,导致主从连接不正常,但是主数据库不断在更新,这时可以将更新的数据放入到环形缓冲区,等到从数据库重连之后,再将环形缓冲区的数据更新到从数据库中。
服务器 RUN ID
无论主库还是从库都有自己的 RUN ID,RUN ID 启动时自动产生,RUN ID 由40个随机的十六进制字符组成;
当从库对主库初次复制时,主库将自身的 RUN ID 传送给从库,从库会将 RUN ID 保存;
当从库断线重连主库时,从库将向主库发送之前保存的 RUN ID;
从库 RUN ID 和主库 RUN ID 一致,说明从库断线前复制的就是当前的主库;主库尝试执行增量同步操作;
若不一致,说明从库断线前复制的主库并不时当前的主库,则主库将对从库执行全量同步操作;
环形缓冲区(复制积压缓冲区)
本质:固定长度先进先出队列;
存储内容:如下图;
当因某些原因(网络抖动或从库宕机)从库与主库断开连接,避免重新连接后开始全量同步,在主库设置了一个环形缓冲区;该缓冲区会在从库失联期间累计主库的写操作;当从库重连,会发送自身的复制偏移量到主库,主库会比较主从的复制偏移量:
若从库offset还在复制积压缓冲区中,则进行增量同步;否则,主库将对从库执行全量同步;
# redis.conf repl-backlog-size 1mb # 如果所有从库断开连接 3600 秒后没有从库连接,则释放环形缓冲区 repl-backlog-ttl 3600
大小确定: disconnect_time * write_size_per_second
disconnect_time :从库断线后重连主库所需的平均时间(以秒为单位);
write_size_per_second :主库平均每秒产生的写命令数据量;
这篇关于Redis之主从复制原理 详解的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-03-21redisinsight-v2
- 2024-02-26Typed property App\Api\Mapper\GamePropsConfigMapper::$apiRedis must not be accessed before initia-icode9专业技术文章分享
- 2024-02-21redisson getlock
- 2024-02-20redis config
- 2024-02-20redis leaderboard
- 2024-01-23缓存选型:Redis or MemCache
- 2024-01-22面试官:Redis持久化能关吗?怎么关?
- 2024-01-21Redis压测工具redis-benchmark-icode9专业技术文章分享
- 2024-01-19这才是你应该了解的Redis数据结构!
- 2024-01-18Redis系列:使用 Redis Module 扩展功能