zk集群自动化脚本搭建-只需一个脚本
本次搭建zk集群为了方便,以docker容器的方式来演示
1.创建三个docker实例并按装jdk8
docker run --privileged -dit --name zk1 --hostname zk1 docker.io/centos:7.6.1810 /usr/sbin/init
docker run --privileged -dit --name zk2 --hostname zk2 docker.io/centos:7.6.1810 /usr/sbin/init
docker run --privileged -dit --name zk3 --hostname zk3 docker.io/centos:7.6.1810 /usr/sbin/init
#为了方便这里直接使用yum安装
docker exec -ti zk1 /bin/bash -c "yum -y install java-1.8.0-openjdk.x86_64"
docker exec -ti zk2 /bin/bash -c "yum -y install java-1.8.0-openjdk.x86_64"
docker exec -ti zk3 /bin/bash -c "yum -y install java-1.8.0-openjdk.x86_64"
2.查出每个docker的ip(在创建时指定ip也可以)
[root@wfw zk]# docker inspect -f='{{.NetworkSettings.IPAddress}} {{.Config.Hostname}}' $(sudo docker ps -a -q) > hostname
[root@wfw zk]# ll
total 4
-rw-r--r-- 1 root root 45 Jan 11 23:30 hostname
[root@wfw zk]# cat hostname
172.17.0.4 zk3
172.17.0.3 zk2
172.17.0.2 zk1
3.配置每个docker的hosts
#将hostname文件拷贝到各个docker中的home路径下
docker cp hostname zk1:/home/hostname
docker cp hostname zk2:/home/hostname
docker cp hostname zk3:/home/hostname#将hostname内容写入hosts文件
docker exec -ti zk1 /bin/bash -c "cat /home/hostname >> /etc/hosts"
docker exec -ti zk2 /bin/bash -c "cat /home/hostname >> /etc/hosts"
docker exec -ti zk3 /bin/bash -c "cat /home/hostname >> /etc/hosts"
4.下载zk并复制到各个docker
wget https://archive.apache.org/dist/zookeeper/zookeeper-3.4.10/zookeeper-3.4.10.tar.gz#将zk复制到各个docker的home路径下
docker cp zookeeper-3.4.10.tar.gz zk1:/home/zookeeper-3.4.10.tar.gz
docker cp zookeeper-3.4.10.tar.gz zk2:/home/zookeeper-3.4.10.tar.gz
docker cp zookeeper-3.4.10.tar.gz zk3:/home/zookeeper-3.4.10.tar.gz#解压所有docker上的zk包
docker exec -ti zk1 /bin/bash -c "tar zxvf /home/zookeeper-3.4.10.tar.gz -C /home"
docker exec -ti zk2 /bin/bash -c "tar zxvf /home/zookeeper-3.4.10.tar.gz -C /home"
docker exec -ti zk3 /bin/bash -c "tar zxvf /home/zookeeper-3.4.10.tar.gz -C /home"
5.登陆zk1,配置zk的配置文件zoo.cfg
[root@zk1 home]# cd /home/zookeeper-3.4.10/conf/
[root@zk1 conf]# touch zoo.cfg
[root@zk1 conf]# vi zoo.cfg
[root@zk1 conf]# cat zoo.cfg
tickTime=2000
initLimit=10
syncLimit=5
dataLogDir=/opt/zookeeper/logs
dataDir=/opt/zookeeper/data
clientPort=2181
autopurge.snapRetainCount=500
autopurge.purgeInterval=24
server.1=zk1:2888:3888
server.2=zk2:2888:3888
server.3=zk3:2888:3888
6.拷贝zoo.cfg到其他两个docker的同路径下,为了方便也可以在宿主机中创建该文件像上述方法拷贝到所有docker
docker cp zoo.cfg zk1:/home/zookeeper-3.4.10/conf/zoo.cfg
docker cp zoo.cfg zk2:/home/zookeeper-3.4.10/conf/zoo.cfg
docker cp zoo.cfg zk3:/home/zookeeper-3.4.10/conf/zoo.cfg
7.创建data路径及myid文件
docker exec -ti zk1 /bin/bash -c "mkdir -p /opt/zookeeper/{logs,data}; echo "1" > /opt/zookeeper/data/myid"
docker exec -ti zk2 /bin/bash -c "mkdir -p /opt/zookeeper/{logs,data}; echo "2" > /opt/zookeeper/data/myid"
docker exec -ti zk3 /bin/bash -c "mkdir -p /opt/zookeeper/{logs,data}; echo "3" > /opt/zookeeper/data/myid"
8.启动每个docker中的zk进程
[root@wfw zk]# docker exec -ti zk3 /bin/bash -c "/home/zookeeper-3.4.10/bin/zkServer.sh start"
ZooKeeper JMX enabled by default
Using config: /home/zookeeper-3.4.10/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
[root@wfw zk]# docker exec -ti zk2 /bin/bash -c "/home/zookeeper-3.4.10/bin/zkServer.sh start"
ZooKeeper JMX enabled by default
Using config: /home/zookeeper-3.4.10/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
[root@wfw zk]# docker exec -ti zk1 /bin/bash -c "/home/zookeeper-3.4.10/bin/zkServer.sh start"
ZooKeeper JMX enabled by default
Using config: /home/zookeeper-3.4.10/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
9.查询zk状态
[root@wfw zk]# docker exec -ti zk3 /bin/bash -c "/home/zookeeper-3.4.10/bin/zkServer.sh status"
ZooKeeper JMX enabled by default
Using config: /home/zookeeper-3.4.10/bin/../conf/zoo.cfg
Mode: follower
[root@wfw zk]# docker exec -ti zk2 /bin/bash -c "/home/zookeeper-3.4.10/bin/zkServer.sh status"
ZooKeeper JMX enabled by default
Using config: /home/zookeeper-3.4.10/bin/../conf/zoo.cfg
Mode: leader
[root@wfw zk]# docker exec -ti zk1 /bin/bash -c "/home/zookeeper-3.4.10/bin/zkServer.sh status"
ZooKeeper JMX enabled by default
Using config: /home/zookeeper-3.4.10/bin/../conf/zoo.cfg
Mode: follower
附:
如果三个docker已经配置了ssh免密登陆,还可以只在一个docker启动左右集群的zk进程
#!/bin/bash
usage="Usage: zkRun.sh [start|stop|status|restart]"
if [ $# -ne 1 ]; thenecho $usageexit 1
fi
case $1 in(start)cmd="start";;(stop)cmd="stop";;(status)cmd="status";;(restart)cmd="restart";;(*)echo $usageexit 1;;
esac
docker_hostname=$(cat ./hostname|awk '{print $2}')
for salve in $docker_hostname ; dossh $docker_hostname "/home/zookeeper-3.4.10/bin/zkServer.sh $cmd"
done
在一开始生成hostname文件时就是直接通过查询docker容器列表详情获得的,也可以通过脚本形式来生成zk的zoo.cfg配置文件,过程也不复杂
#!/bin/bash
# zoo_gen.sh
# generate zoo.cfg
echo "tickTime=2000" >> zoo.cfg
echo "initLimit=10" >> zoo.cfg
echo "syncLimit=5" >> zoo.cfg
echo "dataLogDir=/opt/zookeeper/logs" >> zoo.cfg
echo "dataDir=/opt/zookeeper/data" >> zoo.cfg
echo "clientPort=2181" >> zoo.cfg
echo "autopurge.snapRetainCount=500" >> zoo.cfg
echo "autopurge.purgeInterval=24" >> zoo.cfgid=0
for hostname in $(cat ./hostname|awk '{print $2}')do((id++))echo "server.$id=$hostname:2888:3888" >> zoo.cfgdone
myid文件的自动生成和推送其实也不是难做,只不过需要ssh免密登陆,稍微复杂一些,这里就略过了,感兴趣的可以自己试着写写,方法思路有很多种
zk_auto.sh
#!/bin/sh
#docker pull openjdk:8u242-jdk
#wget https://archive.apache.org/dist/zookeeper/zookeeper-3.4.10/zookeeper-3.4.10.tar.gzdocker stop zk1 && docker rm zk1
docker stop zk2 && docker rm zk2
docker stop zk3 && docker rm zk3#创建docker
image=mamohr/centos-java:latest
docker run --privileged -dit --name zk3 --hostname zk3 ${image} /usr/sbin/init
docker run --privileged -dit --name zk2 --hostname zk2 ${image} /usr/sbin/init
docker run --privileged -dit --name zk1 --hostname zk1 ${image} /usr/sbin/init#生成hostname
docker inspect -f='{{.NetworkSettings.IPAddress}} {{.Config.Hostname}}' $(sudo docker ps -a -q) | grep zk > hostname#将hostname文件拷贝到各个docker中的home路径下
docker cp hostname zk1:/home/hostname
docker cp hostname zk2:/home/hostname
docker cp hostname zk3:/home/hostname#将hostname内容写入hosts文件
docker exec -ti zk1 /bin/bash -c "cat /home/hostname >> /etc/hosts"
docker exec -ti zk2 /bin/bash -c "cat /home/hostname >> /etc/hosts"
docker exec -ti zk3 /bin/bash -c "cat /home/hostname >> /etc/hosts"#将zk复制到各个docker的home路径下
docker cp zookeeper-3.4.10.tar.gz zk1:/home/zookeeper-3.4.10.tar.gz
docker cp zookeeper-3.4.10.tar.gz zk2:/home/zookeeper-3.4.10.tar.gz
docker cp zookeeper-3.4.10.tar.gz zk3:/home/zookeeper-3.4.10.tar.gz#解压所有docker上的zk包
docker exec -ti zk1 /bin/bash -c "tar zxf /home/zookeeper-3.4.10.tar.gz -C /home"
docker exec -ti zk2 /bin/bash -c "tar zxf /home/zookeeper-3.4.10.tar.gz -C /home"
docker exec -ti zk3 /bin/bash -c "tar zxf /home/zookeeper-3.4.10.tar.gz -C /home"#生成zoo.cfg
echo "tickTime=2000" > zoo.cfg
echo "initLimit=10" >> zoo.cfg
echo "syncLimit=5" >> zoo.cfg
echo "dataLogDir=/opt/zookeeper/logs" >> zoo.cfg
echo "dataDir=/opt/zookeeper/data" >> zoo.cfg
echo "clientPort=2181" >> zoo.cfg
echo "autopurge.snapRetainCount=500" >> zoo.cfg
echo "autopurge.purgeInterval=24" >> zoo.cfgid=0
for hostname in $(cat ./hostname|awk '{print $2}')do((id++))echo "server.$id=$hostname:2888:3888" >> zoo.cfgdonedocker cp zoo.cfg zk1:/home/zookeeper-3.4.10/conf/zoo.cfg
docker cp zoo.cfg zk2:/home/zookeeper-3.4.10/conf/zoo.cfg
docker cp zoo.cfg zk3:/home/zookeeper-3.4.10/conf/zoo.cfgdocker exec -ti zk1 /bin/bash -c "mkdir -p /opt/zookeeper/{logs,data}; echo "1" > /opt/zookeeper/data/myid"
docker exec -ti zk2 /bin/bash -c "mkdir -p /opt/zookeeper/{logs,data}; echo "2" > /opt/zookeeper/data/myid"
docker exec -ti zk3 /bin/bash -c "mkdir -p /opt/zookeeper/{logs,data}; echo "3" > /opt/zookeeper/data/myid"docker exec -ti zk1 /bin/bash -c "/home/zookeeper-3.4.10/bin/zkServer.sh start"
docker exec -ti zk2 /bin/bash -c "/home/zookeeper-3.4.10/bin/zkServer.sh start"
docker exec -ti zk3 /bin/bash -c "/home/zookeeper-3.4.10/bin/zkServer.sh start"docker exec -ti zk1 /bin/bash -c "/home/zookeeper-3.4.10/bin/zkServer.sh status"
docker exec -ti zk2 /bin/bash -c "/home/zookeeper-3.4.10/bin/zkServer.sh status"
docker exec -ti zk3 /bin/bash -c "/home/zookeeper-3.4.10/bin/zkServer.sh status"
zk集群自动化脚本搭建-只需一个脚本相关推荐
- 将你的前端应用打包成docker镜像并部署到服务器?仅需一个脚本搞定
1.前言 前段时间,自己搞了个阿里云的服务器.想自己在上面折腾,但是不想因为自己瞎折腾而污染了现有的环境.毕竟,现在的阿里云已经没有免费的快照服务了.要想还原的话,最简单的办法就是重新装系统.而一旦重 ...
- docker image name 更改_将前端应用打包成docker镜像并部署?仅需一个脚本就搞定
1.前言 前段时间,自己搞了个阿里云的服务器.想自己在上面折腾,但是不想因为自己瞎折腾而污染了现有的环境.毕竟,现在的阿里云已经没有免费的快照服务了.要想还原的话,最简单的办法就是重新装系统.而一旦重 ...
- ZK锦集:Zookeeper的下载和安装 | 真/伪集群的快速搭建| 总结的很详细
前言 文章力求:通俗易懂.图文并茂.系统全面,语言精练,主要介绍以下知识点: 1.zk基础知识铺路,做到屋里有粮,心中不慌 2.zk的下载.安装.核心参数配置.节点参数释义 3.zk集群快速搭建的两种 ...
- linux集群自动化脚本和增量复制
linux集群自动化脚本和增量复制 Linux集群shell自动化脚本和集群增量增量复制 xcall.sh代码: xcall.sh脚本解释: xsync.sh代码: xsync.sh脚本解释: 自定义 ...
- ZooKeeper实战篇之zk集群搭建、zkCli.sh操作、权限控制ACL、ZooKeeper JavaAPI使用
在看了史上最全的Zookeeper原理详解(万字长文),了解Zookeeper的原理后,你是不是蠢蠢欲动想着手实践呢?这篇文章将手把手教你在Linux上搭建ZooKeeper集群,并调用相关API实现 ...
- springboot+dubbo+zk集群搭建
zookeeper的集群搭建在上一编已经说过,不会的可以查看. 下面开始搭建springboot+dubbo+zk注册中心的demo 生产者工程目录如图 一.创建dubbo-provider父工程 父 ...
- redis 集群搭建_一文轻松搞懂redis集群原理及搭建与使用
转载:https://juejin.im/post/5ad54d76f265da23970759d3 作者:SnailClimb 这里总结一下redis集群的搭建以便日后所需同时也希望能对你有所帮助. ...
- 判断zk是否挂掉_Zookeeper入门学习第一天,zk集群简单介绍
一.Zookeeper集群搭建及基本使用 1.centOs虚拟机三台 ,集群最好是奇数台容灾性好一些,由于允许不过半节点宕机,例五台可以挂掉两台,四台可以挂掉一台.简单说就是过半可用. 2.Zooke ...
- Linux搭建eureka集群,基于dns搭建eureka集群
eureka集群方案: 1.通常我们部署的eureka节点多于两个,根据实际需求,只需要将相邻节点进行相互注册(eureka节点形成环状),就达到了高可用性集群,任何一个eureka节点挂掉不会受到影 ...
最新文章
- NYOJ 35 表达式求值
- linux socket使用情况 ss -s ss -t -a | cat /proc/net/socketstat
- Bye Bye Embed-再见了Embed,符合web标准的媒体播放器代码
- 【Kafka】Kafka 如何读取offset topic内容 (__consumer_offsets)
- Android Studio导入项目运行出现大量警告,且报错GC,解决办法
- LINUX编译sofia-sip
- 六个超大规模Hadoop部署案例-Hadoop
- 计算机Word文档新建样式A1是啥意思,高会《职称计算机》Word 2007:创建新样式
- 做到这五点,才算是好用户体验 -- 转自周鸿祎在UPA用户体验大会上的演讲
- 不属于计算机完成科学特点的是,2019年网络教育统考《计算机应用基础》试卷版练习题2...
- Xcode6 中URL Scheme的具体使用
- Windows修改注册表实现开机自启动
- 读取第n行python_Python如何一次读取N行
- 区块链开发先达区块链跨境支付系统解决方案
- linux内核开发(基础)
- 在群晖NAS上搭建 Git Server
- ***.http.converter.HttpMessageNotReadableException: I/O error while reading input message; 的解决办法
- 常用电平标准——LVTTL、LVCMOS、LVDS
- 读 曹林的《人脸识别与人体动作识别技术及应用》笔记
- 前端_实现文本溢出显示三个小圆点“...“