前面讲了 动态迁移Kafka节点,本篇文章讲Zookeeper的无感知迁移。
实际问题:
生产上有5个节点的ZK服务器,要换新服务器且IP地址要改变,怎么办?
大概的方案为:先给zk扩容,扩到11个节点(原来的5个+新增5个+1个临时节点)。然后再干掉原来的5个及临时的1个,剩下5个新加的节点。
扩节点,两个两个加:
(如下步骤,如无特殊说明,每次启停节点后,都要等待2~10分钟直到集群状态稳定)
第一步,+2等于7个节点,新增的节点,conf配置里面都是当前已有的全部IP地址。观察集群状态,新增的两个节点会成为follower(解释一下:因为旧的5个节点已经组成集群了,新增的节点,一律服从之前的领导,所以是follower,参见Zookeeper的选举机制)。
但是原来的5个旧节点,配置并没有更新,所以要手动更新一下,更新完配置之后,依次重启5个旧节点(注意先重启Follower节点、最后重启Leader节点),每次重启一个,隔一段时间集群状态稳定后,再操作下一个。(解释一下:Follower节点挂掉时,重新加入就行了,但是Leader节点挂掉后,集群就会重新选举,参见另一篇Zookeeper选举算法原理)
第二步,再+2等于9个节点,第三步+2等于11个节点。(方法同第一步)
(备注:为保险起见,第二次只增加2个节点,而不是一次性加4个节点)
以上方案,在生产环境测试通过。
最后,将应用的zk连接地址(域名)解析到新的IP上,当旧应用全部重启后(可不急,慢慢来),再进行缩容操作(很简单,此处省略)。
另外,引申一个问题:Zookeeper配置的 myid = N,这个N关系到leader的选举,那N的设置有没有什么建议?
看到过有人提到这个问题,但我也没具体测试过,参见:https://blog.csdn.net/h2604396739/article/details/82668779