本次搭建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集群自动化脚本搭建-只需一个脚本相关推荐

  1. 将你的前端应用打包成docker镜像并部署到服务器?仅需一个脚本搞定

    1.前言 前段时间,自己搞了个阿里云的服务器.想自己在上面折腾,但是不想因为自己瞎折腾而污染了现有的环境.毕竟,现在的阿里云已经没有免费的快照服务了.要想还原的话,最简单的办法就是重新装系统.而一旦重 ...

  2. docker image name 更改_将前端应用打包成docker镜像并部署?仅需一个脚本就搞定

    1.前言 前段时间,自己搞了个阿里云的服务器.想自己在上面折腾,但是不想因为自己瞎折腾而污染了现有的环境.毕竟,现在的阿里云已经没有免费的快照服务了.要想还原的话,最简单的办法就是重新装系统.而一旦重 ...

  3. ZK锦集:Zookeeper的下载和安装 | 真/伪集群的快速搭建| 总结的很详细

    前言 文章力求:通俗易懂.图文并茂.系统全面,语言精练,主要介绍以下知识点: 1.zk基础知识铺路,做到屋里有粮,心中不慌 2.zk的下载.安装.核心参数配置.节点参数释义 3.zk集群快速搭建的两种 ...

  4. linux集群自动化脚本和增量复制

    linux集群自动化脚本和增量复制 Linux集群shell自动化脚本和集群增量增量复制 xcall.sh代码: xcall.sh脚本解释: xsync.sh代码: xsync.sh脚本解释: 自定义 ...

  5. ZooKeeper实战篇之zk集群搭建、zkCli.sh操作、权限控制ACL、ZooKeeper JavaAPI使用

    在看了史上最全的Zookeeper原理详解(万字长文),了解Zookeeper的原理后,你是不是蠢蠢欲动想着手实践呢?这篇文章将手把手教你在Linux上搭建ZooKeeper集群,并调用相关API实现 ...

  6. springboot+dubbo+zk集群搭建

    zookeeper的集群搭建在上一编已经说过,不会的可以查看. 下面开始搭建springboot+dubbo+zk注册中心的demo 生产者工程目录如图 一.创建dubbo-provider父工程 父 ...

  7. redis 集群搭建_一文轻松搞懂redis集群原理及搭建与使用

    转载:https://juejin.im/post/5ad54d76f265da23970759d3 作者:SnailClimb 这里总结一下redis集群的搭建以便日后所需同时也希望能对你有所帮助. ...

  8. 判断zk是否挂掉_Zookeeper入门学习第一天,zk集群简单介绍

    一.Zookeeper集群搭建及基本使用 1.centOs虚拟机三台 ,集群最好是奇数台容灾性好一些,由于允许不过半节点宕机,例五台可以挂掉两台,四台可以挂掉一台.简单说就是过半可用. 2.Zooke ...

  9. Linux搭建eureka集群,基于dns搭建eureka集群

    eureka集群方案: 1.通常我们部署的eureka节点多于两个,根据实际需求,只需要将相邻节点进行相互注册(eureka节点形成环状),就达到了高可用性集群,任何一个eureka节点挂掉不会受到影 ...

最新文章

  1. NYOJ 35 表达式求值
  2. linux socket使用情况 ss -s ss -t -a | cat /proc/net/socketstat
  3. Bye Bye Embed-再见了Embed,符合web标准的媒体播放器代码
  4. 【Kafka】Kafka 如何读取offset topic内容 (__consumer_offsets)
  5. Android Studio导入项目运行出现大量警告,且报错GC,解决办法
  6. LINUX编译sofia-sip
  7. 六个超大规模Hadoop部署案例-Hadoop
  8. 计算机Word文档新建样式A1是啥意思,高会《职称计算机》Word 2007:创建新样式
  9. 做到这五点,才算是好用户体验 -- 转自周鸿祎在UPA用户体验大会上的演讲
  10. 不属于计算机完成科学特点的是,2019年网络教育统考《计算机应用基础》试卷版练习题2...
  11. Xcode6 中URL Scheme的具体使用
  12. Windows修改注册表实现开机自启动
  13. 读取第n行python_Python如何一次读取N行
  14. 区块链开发先达区块链跨境支付系统解决方案
  15. linux内核开发(基础)
  16. 在群晖NAS上搭建 Git Server
  17. ***.http.converter.HttpMessageNotReadableException: I/O error while reading input message; 的解决办法
  18. 常用电平标准——LVTTL、LVCMOS、LVDS
  19. 读 曹林的《人脸识别与人体动作识别技术及应用》笔记
  20. 前端_实现文本溢出显示三个小圆点“...“

热门文章

  1. 计量经济学 李子奈 第四版 pdf
  2. 如何快速打好Java基础?
  3. 看看这个示例,就能知道小学科学实验教案怎么写了
  4. 三款实用且颜值高的国内wordpress主题,免费下载
  5. 知识工程重点知识介绍-3
  6. 13-Liunx笔记
  7. 华为交换机telnet远程登录
  8. 照片的GPS位置信息读取
  9. 阅读笔记-数据结构(C语言)-严蔚敏老师-单链表
  10. Linux - netstat 查看系统端口占用和监听情况