zookeeper集群迁移实战

线上环境需要做迁移,所以就需要动手了。

环境说明

需要将以下zk迁移至新的机器上

1
2
3
server.1=172.31.0.4:2888:3888
server.2=172.31.0.4:2889:3889
server.3=172.31.0.4:2890:3890

新机器上面的zk先不要启动

1
2
3
server.6=172.31.0.5:2888:3888
server.7=172.31.0.5:2889:3889
server.8=172.31.0.5:2890:3890

手工操作

1
2
3
4
start) /opt/zookeeper/zookeeperServer0/bin/zkServer.sh start /opt/zookeeper/zk1/conf/zoo.cfg
stop) /opt/zookeeper/zookeeperServer0/bin/zkServer.sh stop /opt/zookeeper/zk1/conf/zoo.cfg
status) /opt/zookeeper/zookeeperServer0/bin/zkServer.sh status /opt/zookeeper/zk1/conf/zoo.cfg
restart) /opt/zookeeper/zookeeperServer0/bin/zkServer.sh restart /opt/zookeeper/zk1/conf/zoo.cfg

总体原则

详细步骤

zk集群中有半数以上节点存活即可提供服务,使用这个特性可以把3个节点的集群扩容到5个节点的集群,然后在依次缩容,减少的3个节点的集群。通过这个过程达到迁移的目的。

准备集群环境:

Myid IP 端口
1 172.31.0.4 2181
2 172.31.0.4 2182
3 172.31.0.4 2183
6 172.31.0.5 2181
7 172.31.0.5 2182
8 172.31.0.5 2183

旧集群是172.31.0.4,新集群是172.31.0.5。新集群的myid必须要比旧集群的大,不然服务启动不了。

扩容

  1. 修改myid为 6 7的配置,启动这2个进程:

    1
    2
    3
    4
    5
    server.1=172.31.0.4:2888:3888
    server.2=172.31.0.4:2889:3889
    server.3=172.31.0.4:2890:3890
    server.6=172.31.0.5:2888:3888
    server.7=172.31.0.5:2889:3889

    使用 /opt/zookeeper/zookeeperServer0/bin/zkServer.sh status /opt/zookeeper/zk1/conf/zoo.cfg 这个命令来查看状态,如果是follower即可。

    启动节点4和节点5的zk服务,并在leader节点查看数据是否同步。在leader上面查询followers数:

    1
    2
    3
    [root@gl7wid90gwcewn ~]# echo mntr|nc 172.31.0.5 2182 |grep followers
    zk_followers 4
    zk_synced_followers 4

    这时可以看到zk_followers为4,zk_synced_followers表示已经同步的follower。

  2. 依次修改配置myid 1 2 3这三个进程的配置,并重启服务。配置的话,将 server.6 server.7 这两个配置添加到原有的旧zk配置里面。然后按以下规则进行重启:

    • 重启时应保证先重启myid最小的机器,由小向大进行重启。
    • Leader无论其myid大小,都放到最后重启。ZooKeeper的机制中,myid大的会向小的发起连接,而小的不会向大的发起连接。因此如果最后重启myid最小的机器,则其可能无法加入集群
    • 重启follower节点无影响,当重启leader节点时会触发leader选举,zxid最新的默认优先当选新的leader,当zxid相同,myid最大的优先当选新的leader
    • 重启完成之后,需要确认这5个zk进程的状态是否是正常的。

缩容

将5节点缩容为3节点,将myid 1 2停止zk服务下线,假设这两个节点为follower,修改myid 3 6 7配置,按照重启原则重启这个3个节点的zk服务:

  1. 直接将myid 1 2的zk服务停止

  2. 按照重启原则对myid 3 6 7的服务进行重启:

    • 由于现在leader是在myid 7上面,这时就放最后面重启

    • 先修改myid 3的zoo.cfg的配置,将server修改为如下,然后重启zk

    1
    2
    3
    server.3=172.31.0.4:2890:3890
    server.6=172.31.0.5:2888:3888
    server.7=172.31.0.5:2889:3889
    • 再修改myid 6的zoo.cfg的配置,重启ZK
    • 最后面修改myid 7的zoo.cfg的配置,重启ZK
    • 再次查看状态,可以看到leader已经是在myid 6上面了。

最后一台迁移

按上面的方式,先扩容,再缩容即可。一定要按照重启原则进行重启。注意,最后迁移时,只用4个进程,不会受影响。

https://nurhier.github.io/2017/07/19/migrate-zookeeper/index.html

https://cloud.tencent.com/developer/article/1406910

  • 本文作者: wumingx
  • 本文链接: https://www.wumingx.com/linux/zookeeper-move.html
  • 本文主题: zookeeper集群迁移实战
  • 版权声明: 本站所有文章除特别声明外,转载请注明出处!如有侵权,请联系我删除。
0%