加入收藏 | 设为首页 | 会员中心 | 我要投稿 济南站长网 (https://www.0531zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长资讯 > 评论 > 正文

Redis 三种集群模式

发布时间:2021-04-07 10:49:51 所属栏目:评论 来源:互联网
导读:后,如果此时从服务器宕机了一段时间,重新上线后势必要重新同步一下主服务器,SYNC与 PSYNC命令的区别就在于断线后重复制阶段处理的方式不同。 SYNC 从服务器重新向主服务器发起 SYNC命令,主服务器将所有数据再次重新生成 RDB 快照发给从服务器开始同步 PS

后,如果此时从服务器宕机了一段时间,重新上线后势必要重新同步一下主服务器,SYNC与 PSYNC命令的区别就在于断线后重复制阶段处理的方式不同。

  • SYNC

从服务器重新向主服务器发起 SYNC命令,主服务器将所有数据再次重新生成 RDB 快照发给从服务器开始同步

  • PSYNC

从服务器重新向主服务器发起 PSYNC命令。主服务器根据双方数据的偏差量判断是否是需要完整重同步还是仅将断线期间执行过的写命令发给从服务器。

明显可以发先 PSYNC 相比 SYNC 效率好很多,要知道同步所有数据是一个非常费资源(磁盘 IO,网络)的操作,而如果只是因为短暂网络不稳定就同步所有资源是非常不值的。因此 Redis 在 2.8 版本后都开始使用 PSYNC 进行复制

PSYNC 如何实现部分重同步?

实现部分重同步主要靠三部分

1. 记录复制偏移量

主服务器与从服务器都会维护一个复制偏移量。

  • 当主服务器向从服务器发送 N 个字节的数据后,会将自己的复制偏移量 +N。
  • 当从服务器收到主服务器 N 个字节大小数据后,也会将自己的复制偏移量 +N。

当主从双方数据是同步时,这个偏移量是相等的。而一旦有个从服务器断线一段时间而少收到了部分数据。那么此时主从双方的服务器偏移量是不相等的,而他们的差值就是少传输的字节数量。如果少传输的数据量不是很大,没有超过主服务器的复制积压缓冲区大小,那么将会直接将缓冲区内容发送给从服务器避免完全重同步。反之还是需要完全重同步的。

2. 复制积压缓冲区

复制积压缓冲区是由主服务器维护的一个先进先出的字节队列,默认大小是 1mb。每当向从服务器发送写命令时,都会将这些数据存入这个队列。每个字节都会记录自己的复制偏移量。从服务器在重连时会将自己的复制偏移量发送给主服务器,如果该复制偏移量之后的数据存在于复制积压缓冲区中,则仅需要将之后的数据发送给从服务器即可。

3. 记录服务器 ID

当执行主从同步时,主服务器会将自己的服务器 ID (一般是自动生成的 UUID ) 发送给从服务器。从服务器在断线恢复后会判断该 ID 是否为当前连接的主服务器。如果是同一个 ID 则代表主服务器没变尝试部分重同步。如果不是同一个

(编辑:济南站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读