Docker部署Zookeeper集群 详细步骤
-
自定义镜像mycentos
前往查看步骤——自定义mycentos镜像将Dockerfile文件 修改 EXPOSE 2181
如下图则完成自定义镜像。
-
启动3个mycentos容器,分别命名centos01、centos02、centos03。
启动三个窗口分别运行下面三条命令。docker run -it -v /Zookeeper:/zk --name centos01 mycentos:1.0 docker run -it -v /Zookeeper:/zk --name centos02 mycentos:1.0 docker run -it -v /Zookeeper:/zk --name centos03 mycentos:1.0
centos01、centos02、centos03三台服务器下各有一个
zk
文件夹,
映射主机的Zookeeper文件夹,此文件夹为该三台服务器共享。 -
打开主机根目录 /Zookeeper文件夹。
将apache-zookeeper-3.6.2-bin.tar.gz
、jdk-8u271-linux-x64.tar.gz
拷贝进来。
接下来可以在centos01、centos02、centos03三个服务器 /zk目录下可以看到这两个压缩包。
-
安装jdk
-
解压
在主机/Zookeeper目录下创建 java 目录为安装目录。
mkdir java
tar -zxvf jdk-8u271-linux-x64.tar.gz -C /Zookeeper/java
查看解压后的文件:
-
修改环境变量
进入centos01,打开文件
vim /etc/profile
在末尾追加:
扫描二维码关注公众号,回复: 13118451 查看本文章export JAVA_HOME=/zk/java/jdk1.8.0_271 export JRE_HOME=${ JAVA_HOME}/jre export CLASSPATH=.:${ JAVA_HOME}/lib:${ JRE_HOME}/lib export PATH=${ JAVA_HOME}/bin:$PATH
-
使环境变量生效
source /etc/profile
-
添加软连接(可选)
ln -s /zk/java/jdk1.8.0_271/bin/java /usr/bin/java
-
安装成功
同理配置centos02和centos03,从修改环境变量开始。
-
-
安装Zookeeper
-
解压
进入主机 /Zookeeper目录,
tar -zxvf apache-zookeeper-3.6.2-bin.tar.gz
-
向centos01、centos02、centos03三台服务器分别创建zookeeper文件夹,并把apache-zookeeper-3.6.2-bin拷贝进去。
进入centos01根目录 /
mkdir zookeeper
cp -r /zk/apache-zookeeper-3.6.2-bin/* /zookeeper
同理对centos02、centos03进行操作。
-
-
修改Zookeeper集群配置
-
首先查看centos01、centos02、centos03的ip地址。
ifconfig
或ip add
比如为:192.168.1.181
192.168.1.182
192.168.1.183 -
创建目录
-
创建配置文件
vim conf/zoo.cfg
文件内容tickTime=2000 initLimit=5 syncLimit=2 #maxClientCnxns=60 #autopurge.snapRetainCount=3 #autopurge.purgeInterval=1 dataDir=/zookeeper/conf/data dataLogDir=/zookeeper/conf/datalog clientPort=2181 server.1=192.168.1.181:2888:3888 server.2=192.168.1.182:2888:3888 server.3=192.168.1.183:2888:3888
配置参数解读: Server.A=B:C:D。
1) A是一个数字,表示这个是第几号服务器;
2) B是这个服务器的ip地址;
3) C是这个服务器与集群中的Leader服务器交换信息的端口;
4) D是万一集群中的Leader服务器挂了,需要一个端口来重新进行选举,选出一个新的Leader,而这个端口就是用来执行选举时服务器相互通信的端口。 -
创建myid,注意每台机器的文件内容不一样,我的分别为1、2、3
集群模式下配置一个文件myid,这个文件在dataDir目录下,这个文件里面有一个数据就是A的值,Zookeeper启动时读取此文件,拿到里面的数据与zoo.cfg里面的配置信息比较从而判断到底是哪个server。
vim data/myid
在centos01的 dataDir 下面创建myid文件,写入 1。
同理
centos02下 data/myid ->2
centos03下 data/myid ->3
-
-
分别启动Zookeeper
# ./zkServer.sh start 启动 # ./zkServer.sh restart 重启 # ./zkServer.sh stop 停止 # ./zkServer.sh status查看状态 # jps 提供一个显示当前所有java进程pid的命令。
解析一下上图
因为我服务器zookeeper已经启动,所以图中使用重启restart。
半数机制:集群中半数以上机器存活,集群可用。所以zookeeper适合装在奇数台机器上。当服务器获得半数以上的票数时,被选举为leader
- 当启动zk1的时候,查看zk1的状态,
./zkServer.sh status
.
可以看到zk1为跟随者follower。 - 当zk2启动后,zk2后的一半以上的票数,被选举为leader,由于选举需要时间,所以上图中显示为follower。
- zk3启动后,由于zk2已经被选举为leader。所以zk3直接作为follower。
- 当启动zk1的时候,查看zk1的状态,
如果查看状态出现如下错误,可以先启动所有服务器的Zookeeper在查看状态,如果还是报错再去查看配置文件是否正确。
===============================
(一) Zookeeper入门篇之详细介绍与安装
(二) Zookeeper内部原理之选举机制、Stat结构体与监听器原理