目录
前言
在单台服务器上,部署三个docker容器,搭建zookeeper集群,模拟多台服务器上安装zookeeper集群,其实步骤是一样的,我们把三个容器看成三台不同的服务器就行了,这里我们使用docker官网最新的zookeeper镜像搭建集群
1. 拉取镜像
docker pull zookeeper
这里不指定tag,它会默认拉取最新的镜像
或者指定镜像版本
docker pull zookeeper:3.4.10
2. 启动容器
docker run -d --name zk01 -p 2181:2181 --ip 10.88.0.19 zookeeper
docker run -d --name zk02 -p 2182:2181 --ip 10.88.0.20 zookeeper
docker run -d --name zk03 -p 2183:2181 --ip 10.88.0.21 zookeeper
或者是
docker run -d --name zk01 -p 2181:2181 --ip 10.88.0.19 zookeeper:3.4.10
docker run -d --name zk02 -p 2182:2181 --ip 10.88.0.20 zookeeper:3.4.10
docker run -d --name zk03 -p 2183:2181 --ip 10.88.0.21 zookeeper:3.4.10
可以看到我这里已经有了三个zookeeper容器,注意:宿主机要用不同的端口去映射zookeeper的2181端口,否则从第二个容器开始会启动失败,还有就是ip地址要指定设置成静态,否则后面容器停了之后再次启动ip地址可能会有改变,这样导致集群搭建失败,现在我们看到三个容器已成功启动,状态都是Up.
3. 查看容器IP
如果wangwang
docker inspect -f '{{.NetworkSettings.IPAddress}}' zk01
docker inspect -f '{{.NetworkSettings.IPAddress}}' zk02
docker inspect -f '{{.NetworkSettings.IPAddress}}' zk03
4. 修改容器配置文件
4.1 修改容器(10.88.0.19)的zoo.cfg文件
(1)将容器配置文件zoo.cfg复制到宿主机
docker cp zk01:/conf/zoo.cfg ./
(2)编辑zoo.cfg配置文件
vim zoo.cfg
加上以下三行配置
server.1=10.88.0.19:2888:3888;2181
server.2=10.88.0.20:2888:3888;2181
server.3=10.88.0.21:2888:3888;2181
(3)将修改好的zoo.cfg放回容器内
docker cp ./zoo.cfg zk01:/conf
(4)将容器中的myid文件复制到宿主机
docker cp zk01:/data/myid ./
(5)编辑myid文件
vim myid
将编号改为1,当然这个容器的myid就是1,所以这里也不用修改,修改zk02、zk03的就好了
4.2 修改容器(10.88.0.20)的zoo.cfg文件
(1)将容器配置文件zoo.cfg复制到宿主机
docker cp zk02:/conf/zoo.cfg ./
(2)编辑zoo.cfg配置文件
vim zoo.cfg
加上以下三行配置
server.1=10.88.0.19:2888:3888;2181
server.2=10.88.0.20:2888:3888;2181
server.3=10.88.0.21:2888:3888;2181
这里10.88.0.X表示的是三台zookeeper容器对应的ip地址;2888是zookeeper容器间通信的端口,3888是zookeeper选举投票的端口,一般来说都是固定的
(3)将修改好的zoo.cfg放回容器内
docker cp ./zoo.cfg zk02:/conf
(4)将容器中的myid文件复制到宿主机
docker cp zk02:/data/myid ./
(5)编辑myid文件
vim myid
将编号改为2
(6)将修改好的myid文件放回容器内
docker cp ./myid zk02:/data/
4.3 修改容器(10.88.0.21)的zoo.cfg文件
(1)将容器配置文件zoo.cfg复制到宿主机
docker cp zk03:/conf/zoo.cfg ./
(2)编辑zoo.cfg配置文件
vim zoo.cfg
加上以下三行配置
server.1=10.88.0.19:2888:3888;2181
server.2=10.88.0.20:2888:3888;2181
server.3=10.88.0.21:2888:3888;2181
(3)将修改好的zoo.cfg放回容器内
docker cp ./zoo.cfg zk03:/conf
(4)将容器中的myid文件复制到宿主机
docker cp zk03:/data/myid ./
(5)编辑myid文件
vim myid
将编号改为3
(6)将修改好的myid文件放回容器内
docker cp ./myid zk03:/data/
注意:
请注意,如果你是在Linux环境下直接搭建zookeeper,请修改本机所在节点的ip为0.0.0.0
例如我当前节点是server.1,则ip修改为0.0.0.0(非docker环境)
server.1=0.0.0.0:2888:3888;2181
server.2=10.88.0.20:2888:3888;2181
server.3=10.88.0.21:2888:3888;2181
6. 重启容器
到这里我们就已经配置好了三台zk服务器,接下来只要将其启动起来即可
docker restart zk01
docker restart zk02
docker restart zk03
7. 查看集群状态
进入容器查看zookeeper启动状态
zk01状态:
[root@localhost ~]# docker exec -it zk01 /bin/bash
root@01851ffefb21:/apache-zookeeper-3.7.0-bin# ./bin/zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /conf/zoo.cfg
Client port found: 2181. Client address: localhost. Client SSL: false.
Mode: follower
root@01851ffefb21:/apache-zookeeper-3.7.0-bin#
zk02状态:
[root@localhost ~]# docker exec -it zk02 /bin/bash
root@6fc2cb97e5fb:/apache-zookeeper-3.7.0-bin# ./bin/zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /conf/zoo.cfg
Client port found: 2181. Client address: localhost. Client SSL: false.
Mode: leader
root@6fc2cb97e5fb:/apache-zookeeper-3.7.0-bin#
zk03状态:
[root@localhost ~]# docker exec -it zk03 /bin/bash
root@13e18e279a7a:/apache-zookeeper-3.7.0-bin# ./bin/zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /conf/zoo.cfg
Client port found: 2181. Client address: localhost. Client SSL: false.
Mode: follower
root@13e18e279a7a:/apache-zookeeper-3.7.0-bin#
查询以上三台容器的zookeeper状态可以看到:zk02为主机,zk01和zk03为从机,到此zookeeper集群搭建完成。