一、需求
由于旧版本的zookeeper无法支持新特性,公司决定对zookeeper进行升级。从3.3.6升级至3.4.9。
二、升级步骤
去官方下载zookeeper的包。
wget https://mirrors.cnnic.cn/apache/zookeeper/zookeeper-3.4.9/zookeeper-3.4.9.tar.gz
解压到/usr/local路径下
tar xf zookeeper-3.4.9.tar.gz -C /usr/local/
在/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选举过程中投票通信。
复制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/
割接版本。
查看原有数据是否还在
用
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
查看状态,如果正常,就去思考失败的原因。总结失败,找出原因,在计划下次升级。
四、注意事项
保持myid与server.id一致
dataDir,dataLogDir与原版本保持一致
注意不管是用域名还是ip调用,都要保证能够解析
保证数据可靠,集群能够建立
请问下,如果割接升级zk从节点时,能否不使用老节点快照,直接搭建一个新的zk集群,从lead节点同步数据呢?
新节点加入到zk集群,自然会同步lead的数据呀
感谢回复。因为文中说:配置dataDir与dataLogDir与老版本保持一致,说明要使用老版本的快照。 我的问题是,能否配置新的dataDir与dataLogDir路径,通过从lead同步数据后,从节点自己生成快照。