Zookeeper升级新版本步骤

半兽人 发表于: 2016-12-02   最后更新时间: 2017-12-12 13:28:46  
{{totalSubscript}} 订阅, 14,990 游览

一、需求

由于旧版本的zookeeper无法支持新特性,公司决定对zookeeper进行升级。从3.3.6升级至3.4.9。

二、升级步骤

  1. 去官方下载zookeeper的包。

     wget https://mirrors.cnnic.cn/apache/zookeeper/zookeeper-3.4.9/zookeeper-3.4.9.tar.gz
    
  2. 解压到/usr/local路径下

     tar xf zookeeper-3.4.9.tar.gz -C /usr/local/
    
  3. 在/usr/local/zookeeper-3.4.9/conf/做配置文件配置,根据老版本的

    配置文件

    配置。特别注意myid与server id一致,dataDir与dataLogDir与老版本保持一致。

     cd /usr/local/zookeeper-3.4.9/conf/
     cp zoo_sample.cfg zoo.cfg
     vim zoo.cfg
    

    添加如下配置

     tickTime=2000
     initLimit=10
     syncLimit=5
     dataDir=/data/zookeeper/data
     dataLogDir=/data/zookeeper/logs
     clientPort=2191
     server.1=192.168.1.1:2888:3888
     server.2=192.168.1.2:2888:3888
     server.3=192.168.1.3:2888:3888
    
    注释:

    tickTime:ZK中的一个时间单元。ZK中所有时间都是以这个时间单元为基础,进行整数倍配置的。例如,session的最小超时时间是2*tickTime

    initLimit:Follower在启动过程中,会从Leader同步所有最新数据,然后确定自己能够对外服务的起始状态。Leader允许F在

    initLimit 时间内完成这个工作。通常情况下,我们不用太在意这个参数的设置。如果ZK集群的数据量确实很大了,F在启动的时候,从Leader上同步数据的时间也会相应变长,因此在这种情况下,有必要适当调大这个参数了。

    syncLimit:在运行过程中,Leader负责与ZK集群中所有机器进行通信,例如通过一些心跳检测机制,来检测机器的存活状态。如果L发出心跳包在syncLimit之后,还没有从F那里收到响应,那么就认为这个F已经不在线了。注意:不要把这个参数设置得过大,否则可能会掩盖一些问题。

    dataDir:存储快照文件snapshot的目录。默认情况下,事务日志也会存储在这里

    dataLogDir:事务日志输出目录。

    clientPort:客户端连接server的端口,即对外服务端口

    server.35=192.168.14.35:2888:3888:这里的35是一个数字,与myid文件中的id是一致的。右边可以配置两个端口,第一个端口用于F和L之间的数据同步和其它通信,第二个端口用于Leader选举过程中投票通信。

  4. 复制zookeeper-3.4.9目录到其它节点一份

     scp -r -P2828 /usr/local/zookeeper-3.4.9/ root@192.168.14.36:/usr/local/
    
     scp -r -P2828 /usr/local/zookeeper-3.4.9/ root@192.168.14.37:/usr/local/
    
  5. 割接版本。

    查看原有数据是否还在

    echo stat | nc localhost 2191查看zookeeper状态,先从follower开始升级,最后升级leader。

    1)停止老版本服务

     /usr/local/zookeeper/bin/zkServer.sh stop
    

    2)删除老版本软连接

     rm -rf /usr/local/zookeeper
    

    3)做新版本软连接

     ln -sv /usr/local/zookeeper-3.4.9/ /usr/local/zookeeper
    

    4)开启新版本服务

     /usr/local/zookeeper/bin/zkServer.sh start
    

    5)查看状态,观察集群是否建立起来。

     /usr/local/zookeeper/bin/zkServer.sh status
    
     ZooKeeper JMX enabled by default
     Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
     Mode: follower
    

    6)查看升级后数据是否还在

      数据没变,则说明升级成功!
    

三、回滚操作

如果升级过程中出现问题,尽量解决,如果解决问题需要时间长,就执行回滚操作

/usr/local/zookeeper/bin/zkServer.sh stop

rm -rf /usr/local/zookeeper

ln -sv /usr/local/zookeeper-3.3.6/ /usr/local/zookeeper

/usr/local/zookeeper/bin/zkServer.sh start

查看状态,如果正常,就去思考失败的原因。总结失败,找出原因,在计划下次升级。

四、注意事项

  1. 保持myid与server.id一致

  2. dataDir,dataLogDir与原版本保持一致

  3. 注意不管是用域名还是ip调用,都要保证能够解析

  4. 保证数据可靠,集群能够建立

更新于 2017-12-12
在线,16分钟前登录

冰海落花 3年前

请问下,如果割接升级zk从节点时,能否不使用老节点快照,直接搭建一个新的zk集群,从lead节点同步数据呢?

半兽人 -> 冰海落花 3年前

新节点加入到zk集群,自然会同步lead的数据呀

冰海落花 -> 半兽人 3年前

感谢回复。因为文中说:配置dataDir与dataLogDir与老版本保持一致,说明要使用老版本的快照。 我的问题是,能否配置新的dataDir与dataLogDir路径,通过从lead同步数据后,从节点自己生成快照。

查看zookeeper更多相关的文章或提一个关于zookeeper的问题,也可以与我们一起分享文章