启动zookeeper_Shell应用:Zookeeper集群一站式安装脚本

背景

Kafka 作为一个比较流行的消息中间件,它的集群部署是依赖于 Zookeeper 的,所以集群部署的第一步就是部署 Zookeeper 集群,并记录 Zookeeper 集群信息,将其作为 server.properties 配置中 zookeeper.connect 的值。

本文就来实现一个 Zookeeper 集群自动部署脚本。Apache 旗下有很多应用都是这类需要解压、配置、启动的,如果能统一提供一个脚本那就太好了,因为这些看似简单的部署操作,弄多了也很折磨人呐!既然没有,就自己动手吧!

手动部署流程

Zookeeper 部署流程,还是比较简单的:

  1. 上传 Zookeeper 部署包
  2. 解压
  3. 修改操作系统配置文件,添加 ZK_HOME 环境变量
  4. 创建 Zookeeper 启动配置文件 zoo.cfg
  5. 修改 zoo.cfg 配置
  6. 创建 myid 文件,其值与 5 配置的 server.id 一致
  7. 执行启动脚本 zkServer.sh

这是手动部署的基本流程,虽然并不复杂,但是这一堆操作在部署多个节点的时候,还是挺繁琐的。所以需要一个一站式的部署脚本,脚本参数如下:

  1. baseDir 部署包目录
  2. dataDir 数据文件目录
  3. myid 值
  4. server 集群通信配置,用逗号分隔

编写脚本

根据部署流程,编写 zk 安装脚本如下:

#接收参数

basePath=$1

dataDir=$2

myId=$3

serverInfos=$4

#解压 zk

cd $basePath

tar -zxvf apache-zookeeper-3.5.5-bin.tar.gz

mv apache-zookeeper-3.5.5-bin zookeeper

#修改系统配置文件

echo "export ZK_HOME=$basePath/zookeeper">>/etc/profile

echo 'export PATH=$ZK_HOME/bin:$PATH'>>/etc/profile

. /etc/profile

#配置 zoo.cfg,dataDir 需要转义 / 后使用 sed 替换

dataDir=$basePath/zookeeper/$dataDir

translate=${dataDir/}

echo 'dataDir is'$dataDir

cd $basePath/zookeeper/conf

cp zoo_sample.cfg zoo.cfg

sed -i -c "s/dataDir=.*/dataDir=${translate}/i" zoo.cfg

#解析 serverInfo 成每个配置,添加到 zoo.cfg

serverArray=(${serverInfos//,/ })

for var in ${serverArray[@]}

do

echo "server."$var >> zoo.cfg

done

#创建集群的 myid 文件,并将本机的 myid 值写入

mkdir $dataDir

cd $dataDir

touch myid

echo $myId >> myid

#进入 bin 目录,启动 zk

cd $basePath/zookeeper/bin

sh zkServer.sh stop

sh zkServer.sh start

sh zkServer.sh status

脚本重点

脚本本身并不复杂,但是测试了十几遍才成功,复盘自动化脚本实现的要点如下:

  1. 根据 sample 配置文件,修改实际的配置信息时,使用 sed 命令直接替换文件内容
  2. 防火墙必须为机器通信端口放行,否则集群模式下启动不会成功
  3. myid 的内容必须与本机 IP 对应的 server.id 值一致
  4. 启动 zkServer.sh 之前先 stop 一下,防止端口被占用
  5. 修改 dataDir 配置时,使用 sed 替换目录需要转义 / 字符 ${dataDir/}

运行脚本

参数列表:

1./home/myzk 部署包所在目录

2. data zk 数据文件相对 zookeeper 目录的相对路径

3. 0 当前 zk 节点的编号

4. 0=100.10.126.140:2888:3888,1=100.10.126.141:2888:3888,2=100.10.126.142:2888:3888 server.id=IP 等集群节点配置信息,用逗号分隔

启动命令:

sh installzk.sh

/home/myzk

data

0

0=100.10.126.140:2888:3888,1=100.10.126.141:2888:3888,2=100.10.126.142:2888:3888

执行结果:

6680374a63543762449d02a76a1c128c.png

集群部署

批量部署三台集群时,只需要顺次执行安装脚本即可。但是 ZooKeeper 部署集群时会有一个选举动作,但是首次部署时由于节点是依次启动的,第一个、第二个节点启动的时候,是无法跟另外未启动的节点进行选举通信的,因此会在启动日志中看到如下异常信息:

umCnxManager@677] - Cannot open channel to 0 at election address

此外 zk.Server.sh status 提示 zookeeper 可能未启动,实际上 zookeeper 进程是存在的,不需要关注这个集群选举异常。当所有节点都启动、且等待一段时间通信稳定后, status 命令就能正常使用了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值