Kafka作为当今一款最为流行的高性能消息中间件,确保其高可用性并具备跨区容灾能力是很多企业运维人员的职责之一。现在我们将我们平时帮客户做kafka集群跨区容灾迁移实践经验分享给大家,供参考。
一、跨区容灾总体方案:
整个kafka集群迁移主要分为:Zookeeper迁移、kafka broker迁移。下面我们就分布阐述当前两个组件的迁移。
二、Zookeeper在线迁移具体步骤
第一步:先查看原先的ZooKeeper集群情况
在node1节点上执行 echo mntr|nc localhost 2181 命令查看每个节点的状态,leader 还是 follower节点,并做好记录。这里我 们假设node1位leader节点,node2、node3为follower节点。
第二步:在四区准备2个新Zookeeper 节点,node4,node5 ,分别将每台新节点zoo.cfg配置文件改为如下: server.1=node1:2888:3888
server.2=node2:2888:3888
server.3=node3:2888:3888
server.4=node4:2888:3888
server.5=node5:2888:3888
第三步:分别用命令启动新增node4,node5节点。
./zkServer.sh status
第四步:先查看现在的ZooKeeper集群整体情况,验证新加节点后的结果。
在node1节点上执行 echo mntr|nc localhost 2181 命令查看每个节点的状态。 可以看到zk_followers为4,连接到的 follower从2变为4了 而且zk_synced_followers为4,说明新加入的2个也同步好了。整个集群节点数成功的从3个变为5。
第五步:接下来我们滚动修改并且重启node2,node3,node1原来三个节点。(注:node1为 leader节点,最后重启操作。)
- 使用命令./zkServer.sh stop先关掉进程。
- 修改zoo.cfg配置
- 使用命令 ./zkServer.sh start 重启节点。
- 操作完leader节点重启之后,必然会发生切换,ZooKeeper会尽可能的选择myid最大的机器为Leader,因此原本的node5变 为了Leader节点,在 新的Leader上查看集群情况,进行验证。
第六步:下线node1节点。
1、分别滚动停止并修改node2、3、4 节点的zoo.cfg配置文件,去除node1配置后重启
修改后配置为:
server.2=node2:2888:3888
server.3=node3:2888:3888
server.4=node4:2888:3888
server.5=node5:2888:3888
2、最后修改node5(leader节点),在node5节点上新增node6配置。
3、node5节点配置修改后,重启节点。触发重选举,此刻node4成为leader节点。
第七步:上线node6节点。(此时node4为leader节点,需最后操作)。
1、滚动停止并修改node2、3节点,添加node6配置后重启。
server.2=node2:2888:3888
server.3=node3:2888:3888
server.4=node4:2888:3888
server.5=node5:2888:3888
server.6=node5:2888:3888
2、上线node6节点,配置与node2、3相同。
3、修改并重启node4(此刻leader节点),此时会触发选举,选择node6为新leader。
4、至此5个节点配置完全相同,node6加入集群且为新leader。
第八步:此时在线节点有node2、3、4、5、6。其中node6为leader节点。
第九步:滚动修改并且重启3个kafka broker节点。等一台操作完成观察,等正常运行后再操作下一台。
1、逐台停止broker进程。
2、逐台将kafka-broker server.properties配置zookeeper.connect=node4:2181,node5:2181,node6:2181。
3、逐台启动broker进程。
第十步:最后再下线zk node2、3节点。leader节点最后操作。
1、滚动执行关闭、修改node4,5,6节点配置为
2、启动node4,5,6节点。
3、关闭node2,node3经常。此时zk节点从node1、2、3切换到了node4、5、6。
三、Broker迁移-大集群整体迁移方案
采用kafka原生大集群的方案,步骤如下(broker逐台替换):
1、在四区准备好相同数量和配置的机器,注意先不要启动kafka进程。
2、停止1台三区的kafka进程。
3、观察集群leader全切换
4、在四区部署一台kafka机器,kafka配置文件和刚停止的三区机器除ip外,其他保持一致。
5、启动新部署机器的kafka进程6、观察数据同步是否正常,完成后继续进行下一台替换。(每次操作依据checklist进行验证)。
注意点
基于kafka集群特性,需要确保一台一台来进行切换,并且验证切换是否正常,如果正常就开始下一台切换。如果出现异常就立即重启原理的节点。因为节点切换,可能会触发重新选举,对客户端的消息读写会造成短暂的抖动,这里我们建议客户端需要做好生产侧的失败重试策略,确保在切换过程中,数据写入可靠,不丢失,同时消费端会触发短暂重平衡之后会恢复正常。注意观察消费堆积,最好是在消息堆积小的情况下执行,减少数据同步时间。
四、broker迁移-ckecklist
迁移过程中需要对如下指标进行验证
1、生产消费耗时
2、未同步副本数
3、请求队列长度
4、gc频率、耗时5、cpu、内存、io、fd数等机器性能指标