Zookeeper版本升级

前言

bash 复制代码
因Apache ZooKeeper 3.9.1之前、3.8.3之前、3.7.2之前版本存在安全漏洞,所以需要将原来的3.5.9版本升级到3.9.3版本。为了保险起见,需要进行短暂的停服,对Zookeeper数据目录(version-2)进行备份。

一、安装新版本Zookeeper

1、准备安装包

bash 复制代码
#下载安装包,可能会因为网站限制wget或者curl的命令会报403,需要下载本地再上传服务器
wget https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/zookeeper-3.9.3/apache-zookeeper-3.9.3-bin.tar.gz --no-check-certificate
#解压并重命名
tar xvf apache-zookeeper-3.9.3-bin.tar.gz && mv apache-zookeeper-3.9.3-bin zookeeper-3.9.3 && mv zookeeper-3.9.3 /data

2、创建数据目录,修改配置文件(注意:配置文件不需要改路径!!!)

bash 复制代码
#进入到zookeeper,创建data文件夹,作为zk存放数据的目录
cd /data/zookeeper-3.9.3 && mkdir data
#复制配置文件
cd conf && cp zoo_sample.cfg zoo.cfg
#修改配置文件
vim zoo.cfg   
tickTime=2000                 #心跳基本时间单位,毫秒级,ZK基本上所有的时间都是这个时间的整数倍 
initLimit=10                  #tickTime的个数,表示在leader选举结束后,followers与leader同步需要的时间,如果followers比较多或者说leader的数据灰常多时,同步时间相应可能会增加,那么这个值也需要相应增加。当然,这个值也是follower和observer在开始同步leader的数据时的最大等待时间(setSoTimeout) 
syncLimit=5                   #tickTime的个数,这时间容易和上面的时间混淆,它也表示follower和observer与leader交互时的最大等待时间,只不过是在与leader同步完毕之后,进入正常请求转发或ping等消息交互时的超时时间
dataDir=/data/zookeeper/data  #内存数据库快照存放地址,如果没有指定事务日志存放地址(dataLogDir),默认也是存放在这个路径下,建议两个地址分开存放到不同的设备上。
clientPort=2181               #配置ZK监听客户端连接的端口
admin.serverPort=8520         #AdminServer是一个内置的Jetty服务。默认的服务启动在8080端口,这里将其改为8520端口。

3、脚本启动、停止zookeeper(注意:先不要启动!!!)

bash 复制代码
#启动
cd /data/zookeeper-3.9.3/bin
sh zkServer.sh start
sh zkServer.sh status
#停止
sh zkServer.sh stop
#打开客户端
sh zkCli.sh

4、设置开机自启动,用service管理(注意:配置不需要改,先不要启动!!!)

bash 复制代码
#设置开机自启动
#进入/etc/init.d目录
cd /etc/init.d
#创建zookeeper文件(JAVA_HOME需要确定一下)

vim zookeeper
#!/bin/bash
#chkconfig:2345 20 90
#description:zookeeper
#processname:zookeeper
ZK_PATH=/data/zookeeper
export JAVA_HOME=/usr/java/jdk1.8.0_212-amd64
case $1 in
         start) sh  $ZK_PATH/bin/zkServer.sh start;;
         stop)  sh  $ZK_PATH/bin/zkServer.sh stop;;
         status) sh  $ZK_PATH/bin/zkServer.sh status;;
         restart) sh $ZK_PATH/bin/zkServer.sh restart;;
         *)  echo "require start|stop|status|restart"  ;;
esac

#给zookeeper添加执行权限
chmod 755 zookeeper
#将其注册为服务
chkconfig --add zookeeper
#用service启动
service zookeeper start
#查看zookeeper状态
service zookeeper status

二、迁移旧版Zookeeper数据

1、停服

bash 复制代码
# 停Nginx服务,停Java服务,停Zookeeper服务,前面服务就不赘述了
# 停zookeeper服务
service zookeeper stop
#查看zookeeper状态
service zookeeper status

2、复制旧版Zookeeper数据目录到新版

bash 复制代码
#将新版Zookeeper的version-2备份,并清空(执行rm -f命令要看好再操作)
mv /data/zookeeper-3.9.3/data/version-2  /data/zookeeper-3.9.3/data/version-2-$(date +"%Y%m%d-%H%M%S")
rm -f /data/zookeeper-3.9.3/data/version-2/*
#复制旧版version-2到新版data目录下
cp -a /data/zookeeper/data/version-2 /data/zookeeper-3.9.3/data/version-2

3、重命名旧版Zookeeper安装目录

bash 复制代码
mv /data/zookeeper /data/zookeeper-$(date +"%Y%m%d-%H%M%S")

4、创建软连接

bash 复制代码
ln -sv /data/zookeeper-3.9.3 /data/zookeeper

三、启动新版Zookeeper

bash 复制代码
#用service启动
service zookeeper start
#查看zookeeper状态
service zookeeper status

#升级完成!!!可以通过可视化工具连接Zookeeper进行验证,推荐可视化工具PrettyZoo
#下载地址:https://github.com/vran-dev/PrettyZoo/releases
相关推荐
林浅不想努力28 分钟前
LVS知识点总结
服务器·云原生·lvs
阿里云云原生7 小时前
将内核专家经验封装进 Agent:SysOM 巡检 Skill 开源,赋能你的运维自动化闭环
云原生
笨鸟先飞的橘猫8 小时前
游戏后端分布式学习——消息队列在游戏的用法
分布式·学习·游戏
Wang's Blog8 小时前
Go-Zero项目开发40: 基于Jaeger的分布式链路跟踪实战
开发语言·分布式·golang
wWYy.8 小时前
基于Raft分布式Kv存储:sendAppendEntries
分布式
自律懒人8 小时前
AI应用从原型到上线的最后一公里——灵光闪应用一键部署深度实测,30+免费API + Serverless零配置发布
人工智能·云原生·开源·serverless
风曦Kisaki10 小时前
Kubernetes(K8s)笔记Day03: Pod命名空间,标签,Pod 的调度,污点与容忍度,Pod 常见状态和重启策略,Pod 生命周期
linux·运维·笔记·docker·云原生·容器·kubernetes
张忠琳10 小时前
【NVIDIA】NVIDIA k8s-device-plugin v0.19.3 资源管理器模块深度分析之三
云原生·容器·架构·kubernetes·nvidia
Chengbei1112 小时前
云安全漏洞挖掘SKILL、一站式云漏洞挖掘工具,支持S3爆破、IMDS探测、K8s检测与AK/SK权限利用
前端·人工智能·网络安全·云原生·容器·kubernetes·系统安全
范什么特西12 小时前
关于kafka
分布式·kafka