Redis主从复制
2021-09-16 11:43:16 0 举报
Redis主从复制
作者其他创作
大纲/内容
5、slave的offset如果在repl_back_buffer中,则master会将缓存中从slave的offset之后的数据一次性同步给slave节点,否则全量同步
master node
复制数据
过期 key 处理:slave 不会过期 key,只会等待 master 过期 key。如果 master 过期了一个 key,或者通过 LRU 淘汰了一个 key,那么会模拟一条 del 命令发送给 slave。
2、master最近数据的缓存(写命令)
7、master通过socket长连接持续把写命令发送给slave,保证主从数据一致性
2、master最近数据的缓存(写命令)持久化期间,master会继续接收客户端的请求,它会把这些可能修改数据集的请求缓存在内存中
slave对自己的查询操作,它会用旧的数据集来提供服务;但是复制完成的时候,需要删除旧数据集,加载新数据集,这个时候就会暂停对外服务了
6、生成包含buffer数据的完整RDB并load到内存
读
4、send buffer数据
redis replication -> 主从架构 -> 读写分离 -> 水平扩容支撑读高并发
slave
全量复制
1、连接断开
部分复制
repl_back_buffer
5、flush old data
2、收到psync命令执行bgsave生成最新RDB快照数据
heartbeat:主从节点互相都会发送 heartbeat 信息。master 默认每隔 10秒 发送一次 heartbeat,slave node 每隔 1秒 发送一个 heartbeat。
master
如果 rdb 复制时间超过 60秒(repl-timeout),那么 slave node 就会认为复制失败,可以适当调大这个参数(对于千兆网卡的机器,一般每秒传输 100MB,6G 文件,很可能超过 60s)
4、pysnc(offset)
slave node
如果在复制期间,内存缓冲区持续消耗超过 64MB,或者一次性超过 256MB,那么停止复制,复制失败
写
1、psync命令同步数据,发送命令之前会跟master建立socket长连接
3、send RDB数据
RDB数据
从 redis2.8 开始,就支持主从复制的断点续传,如果主从复制过程中,网络连接断掉了,那么可以接着上次复制的地方,继续复制下去,而不是从头开始复制一份。master node 会在内存中维护一个 backlog(默认1MB),master 和 slave 都会保存一个 replica offset 还有一个 master run id,offset 就是保存在 backlog 中的。如果 master 和 slave 网络连接断掉了,slave 会让 master 从上次 replica offset 开始继续复制,如果没有找到对应的 offset,那么就会执行一次full resynchronization。
3、重新连接到master,建立的是socket长连接
先写入本地磁盘,然后再从本地磁盘加载到内存
异步复制 :master 每次接收到写命令之后,先在内部写入数据,然后异步发送给 slave node。
0 条评论
下一页