前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >redis 复制很简单? 树上qi个猴,一枪还剩几个猴

redis 复制很简单? 树上qi个猴,一枪还剩几个猴

作者头像
AustinDatabases
发布2020-02-21 14:25:23
4880
发布2020-02-21 14:25:23
举报
文章被收录于专栏:AustinDatabasesAustinDatabases

相对比使用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的。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-02-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 AustinDatabases 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 Redis
腾讯云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档