查看原文
其他

带你了解 Pulsar 里的跨机房复制

Sylvia StreamNative 2021-10-19
上周日,TGIP-CN 004 继续为大家讲述了 Geo Replication 跨机房复制。后续大家还想了解关于 Pulsar 的任何问题,都可以去这个 repo 下提 issue。同时关于每一次直播的各种参考细节,也可以在此 repo 下找到。
https://github.com/streamnative/tgip-cn

一起来看下到底什么是 geo replication 吧。



 关于 geo replication 

Geo replication 其实就是跨机房复制,详细来说就是:把分散在不同地域的集群通过一定的配置方式,让各集群之间可以相互复制。


比如上图中的三个集群,以相互联通的方式进行复制,这种模式也叫 full mesh。

Geo replication 里最核心的一个概念是 Configuration Store(老版本中称为 Global ZooKeeper),它存储的是集群复制信息,让集群之间互相了解各自的地址。同时还包括一些 clients 或 namespace 的相关配置信息。这样做的目的可以简化操作,只需一步即可将各个集群信息一同更新。


这里也给大家讲解两个概念。

一个是 allowed cluster。在 geo replication 状态下创建租户时,需要进行的一个操作。指在一个 geo replication  集群里,指定某个租户的数据可以允许放置在哪几个集群里。

第二个是 replicated clusters。即在 namespace 层面里,指定 namespace 在哪几个集群之间进行相互复制。



 Geo replication 如何运行?

我们将上边提到的 full mesh replication 简化到两个集群间的复制。如下图,两个集群分别在北京和上海,同时两地均有 producer 和 consumer。


北京的 producer 会先将消息发给本地集群 topic,然后创建一个 replication cursor,用于专门复制的游标。

Cursor 创建后,北京的集群同时会创建一个 replication producer,即 cursor 对应一个 producer。这个 replication producer 会将北京集群的数据读出,通过生产方式发送到远端机房(上海集群)。

上海集群收到后会将其存在相同名字的 topic 里,这时在上海集群的 consumer 就会收到来自北京集群发送的消息。

同理上海集群也会反向传给北京集群,所以达到了双向复制的效果。即两个 producer 都可以同时在北京和上海发送消息,并拿到完整的数据。

这就是 full mesh replication(即 geo replication)。

当然也有朋友会提出疑问:因为是双向复制,是不是会出现上海将北京复制给它的消息又复制回去呢?其实不会。

因为 producer 在发送消息时,是明确知道消息位于哪个集群的,类似于出门前给你贴了个「地域」标签,用来识别。所以不用担心上面这个问题。

有的朋友可能还有疑问:跨机房复制过程中,能否保证数据复制的过程有且只有一次。

这个是可以的,因为 Pulsar broker 端是有区域去重的机制。比如北京机房复制消息时,它的 Messageid 是唯一的,所以 replication producer 复制消息时,会在后续产生唯一的 producer name,保证了整个跨机房复制是不会重复的。

默认的 Pulsar geo replication 是异步复制,也就是在北京机房生产的消息何时到达上海机房,是取决于两地机房之间的网络延迟。

具体关于双向复制 geo replication 的实际操作和利用,可以参考下方视频中 18:00-48:55 时间段的内容来观看此 demo 的展示。


其中 demo 里提到的 Pulsarctl 的相关信息,可以参考 Pulsarctl 介绍 

  单向复制  


在集群复制时,如果出现多个终端小集群需要复制到一个大集群的场景时,,即上图 123 集群都要将消息复制到 4 里,这时就需要单向复制的操作。


另一种方式就是 failover pattern (active 到 standby),大部分情况下是将数据备份到远端机房,远端机房不会有 producer 和 consumer。只有当主机房挂了,producer 和 consumer 会换到从机房,才会开始使用。

目前如果使用了 global ZooKeeper 的话,是无法使用以上两种方式进行单向复制的。但是也可以依靠其他途径进行单向复制。

因为 global ZooKeeper 唯一的作用是记录集群的配置信息,以及相应的 namespace 配置信息。所以如果想要进行单向复制,其实不需要 global ZooKeeper。

具体的操作 demo 可以参考上方视频中 51:12-66:00 时间段的内容。



 本期 Q&A 汇总 


1. Failover 切换过程中,消费进度可以切换吗?

默认配置是本地消费,2.4.0 引入了复制订阅的概念,会有消费状态的复制,消费状态会随数据一起复制到远端的机房,当使用相同名字的订阅,在迁移的时候会恢复到之前的消费状态

2. 如果必须共用一个 ZooKeeper,多集群搭建需要注意什么?

  • 需要保证集群初始化的时候需要保证共用 ZooKeeper 集群是搭建好的

  • 然后搭建 Pulsar 确保 Configuration store 的地址正确

  • 跨机房复制的时候,要给出正确的URL


3. 跨机房同步过程中,消息只在 BookKeeper 存了一份?

集群之间是异步复制的方式,数据是在每一个机房单独存储,可以认为是多份存储。

4. Tennant cluster 可以动态修改吗?

可以,一旦修改,每个机房都可以收到,每个机房都会 reload。

5. Pulsar 尝试过实战跨洲际的 geo replication 吗?

有,比如推特在美国的数据中心,就是东西海岸跨机房复制。

6.本地 topic 数据是通过一个 producer 将消息写入远端集群,为何会有 replication 的订阅?

这个订阅是为了保证能够追踪究竟复制到哪,保证复制过程中不丢失数据。

7. 集群大于等于 3 时,是有什么机制阻止跨集群流动的?

进行全复制机房设置的时候,消息在复制的时候会加上 replica from 的元数据。

8. 详细介绍 geo replication 与 failover 模式,以及如何实现?

Failover 模式最核心的是做单向复制,集群看到的复制信息是不一样的,保证数据单向流动,接下来需要开启 replica subscription 的设置,这个时候数据是单项复制,replica subscription 的状态也是单向复制。



  总结  

本期给大家带来了关于 Pulsar geo replication 的概念和应用描述,希望大家可以通过以上文字和视频 demo 的呈现,更清楚了解 geo replication 的运行机制,进而对 Pulsar 的使用可以更自如。

想要获取本次直播的 slides,可以点击「阅读原文」进行查看或下载。

更多参考信息可在 TGIP-CN repo 下查看:
https://github.com/streamnative/tgip-cn/tree/master/episodes/004

周末继续期待我们的 TGIP 直播吧,直播间等你哦!

b 站直播可直接扫描图片二维码观看即可
Zoom 直播间链接:
https://zoom.us/j/238511208?pwd=SEZIMUxvNXlheDR3TERobU5NVFRKdz09

如果你无法通过链接进入,也可以手动输入房间信息:


Meeting ID: 238 511 208
Password: fy436h


: . Video Mini Program Like ,轻点两下取消赞 Wow ,轻点两下取消在看

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存