绑定完请刷新页面
取消
刷新

分享好友

×
取消 复制
redis 复制很简单? 树上qi个猴,一枪还剩几个猴
2020-02-04 18:34:41

相对比使用RDS ,NOSQL 数据库的虽使用,但被忽视的不少,相对于数据库之间的复制,(物理复制, 逻辑复制),redis 的复制,不少人认为还是比较简单的。那下面有一些问题


1 redis 复制对对于内存有什么要求

2 redis 复制到底是推数据还是拉数据

3 如果两台 redis 拥有同样的replicationID 和 offset 是否能他们的数据一致。

4 redis 可以拥有两个复制ID吗?


首先有几个facts 需要别列出来


1 复制是异步的

2 复制不会阻止master 服务器的上的工作

3 master 上可以连接多个slaves

4 复制是可控的

5 Slave 都是只读的

6 副本可以是master ,也就是具有级联的概念


复制的配置很简单,只要在从库配置了 replicaof 信息,以及master 认证,初步的复制就会工作了。


在Master 和 replica 之间建立复制的关系后,,由master发送指令给replica,并且将所发生的操作,键值过期以及处理,等信息发送给replica。

当master和replica主键由于某些原因断开后,进行重新连接后进行重新的同步,将replica中没有的数据,从主同步到replica,当这样的复制方式不能进行正常的同步,则要在主中先进行snapshot  当前所有的数据发送给replica然后在将后续复制过程中,master操作的数据在复制并重放到replica.



问题1 

redis 在复制中内存比单机的redis要考虑的更多,通常redis 被分配的内存的60% 用于主要的工作,而剩下的是需要为bgsave 和后期的数据同步服务的。

后一句话的意思是,reids 的复制其实的数据是要灌入到内存中,而不是和传统数据库要进行落盘的操作,在进行数据的硬化。所以redis的数据复制是依赖于内存的,并且内存预留的越大,则复制的速度也越快,所以预留足够的内存给REDIS 对加速复制是有好处的。


问题2 redis 的数据应该是属于推的方式

这个问题其实我也查过一些资料,但特别清晰的定义数据是 pull 还是push 的并没有。但下面的一段官方的文字或许可以回答这个问题。当 replica  连接到主后, 会发送psync命令到主,其中包含如果之前已经有主,并且有复制的话,则发送他目前拥有的主以及复制的offset 偏移量,然后主就会根据这个信息,将他目前的偏移量进行比对,如果可以进行数据的发送则开始发送数据。 如果副本引用的历史记录(复制ID)不再已知,则会发生完全重新同步:在这种情况下,副本将从头获得数据集的完整副本。


所以根据这段文字我认为redis复制的方式是 从主推送数据。


问题 3  

复制ID基本上标记了给定的数据集历史。每当一个实例作为主实例从头开始,或者一个副本被提升为主副本时,都会为这个实例生成一个新的复制ID。连接到主服务器的副本将在握手后继承其复制ID。因此,具有相同ID的两个实例之间存在关联,因为它们拥有相同的数据,但可能在不同的时间。对于保存新数据集的给定历史记录(复制ID),偏移量作为需要理解的逻辑时间。所以具有相同的复制ID 以及 OFFSET 偏移量的两个REDIS 数据是同步的。


问题 4  

Redis实例有两个复制id的原因是将副本提升到主副本。故障转移之后,提升的副本仍然需要记住它以前的复制ID,因为这样的复制ID是以前的主副本ID。这样,当其他副本将与新主副本同步时,它们将尝试使用旧主副本ID执行部分重新同步。这将像预期的那样工作,因为当副本被提升为主ID时,它将把它的辅助ID设置为主ID,记住这个ID切换发生时的偏移量。稍后,它将选择一个新的随机复制ID,因为一个新的历史记录开始了。在处理连接的新副本时,主副本将使用当前ID和辅助ID匹配它们的ID和偏移量(为安全起见,大偏移量为给定偏移量)。简而言之,这意味着在故障转移之后,连接到新提升的主服务器的副本不必执行完全同步。所以一个REDIS 在进行故障转移后,并且还要挂载其他的新的replica的情况下,是拥有两个replica ID的。



分享好友

分享这个小栈给你的朋友们,一起进步吧。

数据库杂货铺
创建时间:2021-12-10 09:57:47
分享数据库管理,运维,源代码 ,业界感受, 吐槽
展开
订阅须知

• 所有用户可根据关注领域订阅专区或所有专区

• 付费订阅:虚拟交易,一经交易不退款;若特殊情况,可3日内客服咨询

• 专区发布评论属默认订阅所评论专区(除付费小栈外)

栈主、嘉宾

查看更多
  • liuaustin
    栈主

小栈成员

查看更多
  • miemieMIA
  • 578154454
  • ylfxml
戳我,来吐槽~