记Pulsar集群数据迁移流程
背景
公司业务调整,需要将一批运行在云上的Pulsar集群迁移到自建机房中。于是折腾了Pulsar迁移的流程,这里记录下主要操作。
Pulsar集群迁移主要有两种方式:
1、基于geo-replication跨机房复制的方式迁移;
2、通过节点扩缩容的方式替换节点完成集群迁移。
基于geo-replication迁移
基于跨机房复制的方案,基本架构就是将pulsar内部维护一个消费者将数据发送到副本集群。通过开启复制订阅,将消费者消费信息同步到副本集群,实现跨机房消费无缝切换(默认复制间隔为1s,消费切换时可能存在1s的重复消费)
这种方式适用于,集群Topic较少,只迁移部分数据的迁移场景。
操作流程:
- 搭建新集群B
- 在新集群B上按需创建需要复制的tenant、namespace,以及partitioned-Topic。(普通Topic会自动创新,分区Topic需要手动创建并指定分区数,否则会以普通Topic的形式自动创建各个分区的Topic)
- 把新集群B添加到旧集群A中:
bin/pulsar-admin clusters create --broker-url pulsar://gz-idc-pulsar-metric-split.company.info:6650 --url http://gz-idc-pulsar-metric-split.company.info:8080 pulsar-gz-idc-metric-split-cluster
- 在A集群上,将B集群更新到需要复制的tenant、namespace中
bin/pulsar-admin tenants update neo -c pulsar-gz-txcloud-cluster,pulsar-gz-idc-metric-split-cluster
bin/pulsar-admin namespaces set-clusters neo/metrics -c pulsar-gz-txcloud-cluster,pulsar-gz-idc-metric-split-cluster
- 更新Topic消费端,启动复制订阅
- 验证消费订阅是否启动,验证Topic数据复制
bin/pulsar-admin topics partitioned-stats-internal persistent://neo/metrics/neo-metrics
-
在A集群执行可看到同步数据的游标已经创建
-
在A集群可看到消费程序开启订阅复制
- 切换消费者和生产者程序到集群B的serviceURL
基于扩缩容迁移
-
先将迁移的目标节点加入集群,在新节点上部署Broker、bookeeper服务。具体操作可参照:官方文档 pulsar裸机部署 部署完需确认Broker、Bookie服务已注册到zk上。
-
下线旧机房的Broker服务。Broker兼容自适应扩缩容,确定机器负载没问题后,逐台下线即可。客户端的连接会自动重连到剩余可用Broker服务上。
-
下线Bookie。
- 确保剩余Bookie数量 >= Write Quorum >= Ack Quorum
- 开启自动拷贝:
bookkeeper shell autorecovery -enable
; 设置bookie为只读模式:修改conf/bk_server.confreadOnlyModeEnabled=true
、forceReadOnlyBookie=true
bookkeeper shell listunderreplicated
确定没有待复制的bookie列表- 等待无数据流入后下线Bookie服务
bin/bookkeeper-daemon.sh stop bookie