主要通过修改容器 zookeeper 里面的配置文件实现
zookeeper镜像获取各个版本的docker安装需要自行百度, 基本上都是采用 yum install docke
或者 apt-get install docker
等方式安装
[root@localhost ~]$ docker version
Client:
Version: 1.13.1
API version: 1.26
Package version: docker-1.13.1-74.git6e3bb8e.el7.centos.x86_64
Go version: go1.9.4
Git commit: 6e3bb8e/1.13.1
Built: Tue Aug 21 15:23:37 2018
OS/Arch: linux/amd64
Server:
Version: 1.13.1
API version: 1.26 (minimum version 1.12)
Package version: docker-1.13.1-74.git6e3bb8e.el7.centos.x86_64
Go version: go1.9.4
Git commit: 6e3bb8e/1.13.1
Built: Tue Aug 21 15:23:37 2018
OS/Arch: linux/amd64
Experimental: false
[root@localhost ~]$ docker pull zookeeper
docker images
命令可以查看到当前主机中存在的镜像[root@localhost ~]$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.io/zookeeper 3.5 0cf9a81ab80b 4 days ago 130 MB
docker.io/zookeeper latest 72d44402c57a 4 days ago 149 MB
4.1)zookeeper单节点启动
[root@localhost ~]$ docker run --name zk1 -d zookeeper:latest
80a20ba3881c980800d4e54f6840e8405d2758e1b501e9749812c1c8af264557
4.2)查看镜像中zookeeper的配置情况
[root@localhost ~]$ docker exec -it zk1 /bin/bash
bash-4.4#
zookeeper的标准配置就在/conf
下
[root@localhost ~]$ docker exec -it zk1 /bin/bash
bash-4.4$ cat /conf/zoo.cfg
clientPort=2181
dataDir=/data
dataLogDir=/datalog
tickTime=2000
initLimit=5
syncLimit=2
autopurge.snapRetainCount=3
autopurge.purgeInterval=0
maxClientCnxns=60
当我们启动容器的时候, zookeeper会自动启动, 并加载这个配置文件, 这个文件稍后我们还会用到, 留意一下
4.3)Zookeeper单节点运行情况查看
[root@localhost ~]$ docker logs zk1
...
-> 中间省略很多内容没有贴出来
...binding to port 0.0.0.0/0.0.0.0:2181
查看zookeeper镜像启动日志(具体这个日志是怎么输出到这里的, 我还没去弄明白)
4.4)zookeeper运行状态
查看docker 容器的一些构建信息, 这里主要是查询该容器的ip地址
[root@localhost ~]$ docker inspect zk1
[...
-> 中间省略很多内容没有贴出来
"IPAddress": "172.17.0.2",
]
接下在宿主机中执行命令, 查看zookeeper运行状态,如果执行下面命令报错,请安装 nc 执行 yum -y install nc 命令
[root@localhost ~]$ echo stat | nc 172.17.0.2 2181
Zookeeper version: 3.4.13-2d71af4dbe22557fda74f9a9b4309b15a7487f03, built on 06/29/2018 04:05 GMT
Clients:
/172.17.0.1:57734[0](queued=0,recved=1,sent=0)
Latency min/avg/max: 0/0/0
Received: 1
Sent: 0
Connections: 1
Outstanding: 0
Zxid: 0x0
Mode: standalone
Node count: 4
由此Mode: standalone可知, 我们当前的zookeeper是单节点运行的, 接下来搭建集群版, 很简单哦, 正常配置zookeeper集群是一样的
由于是宿主机只有一个, 所以所有docker容器在本机中都存在与一个网段中, 相互之间是可以进行通信的, 不需要使用
--link
命令也可以通信, 如果对docker有更进一步配置, 就需要要参照其它文档进行设置了
5.1、启动两个节点
重新按照如上命令启动两个节点, 加上zk1就3个节点了
通过docker inspect {container_name}命令我们可以获取到所有zookeeper单节点的ip地址
5.2、配置
进入zk1, 编辑配置文件
[root@localhost ~]$ docker exec -it zk1 /bin/bash
bash-4.4$ vi /conf/zoo.cfg
结果
clientPort=2181
dataDir=/data
dataLogDir=/datalog
tickTime=2000
initLimit=5
syncLimit=2
server.1=172.17.0.2:2888:3888
server.2=172.17.0.3:2888:3888
server.3=172.17.0.4:2888:3888
保存退出
echo 1 > /data/myid
这条命令的意思是, 将1
输出到/data/myid
文件中, 这个是什么作用呢?
从我们的配置中可以看出, zk1的服务名是server.1, 这个1就是指定的服务名称
zk2, 和 zk3, 在配置文件上进行相同操作, 但是在echo
命令上分别输出2, 3,到对应的myid
文件中
说一下为什么要放在/data目录下
因为从配置文件中我们知道, zookeeper配置了数据目录在/data
, 所以我们要将myid文件放在/data
目录下
5.3、全部保存退出, 重启容器
[root@localhost ~]$ docker restart zk1
[root@localhost ~]$ docker restart zk2
[root@localhost ~]$ docker restart zk3
5.4、查看集群是否部署成功
[root@localhost ~]$ echo stat | nc 172.17.0.2 2181
Zookeeper version: 3.4.13-2d71af4dbe22557fda74f9a9b4309b15a7487f03, built on 06/29/2018 04:05 GMT
Clients:
/172.17.0.1:57736[0](queued=0,recved=1,sent=0)
Latency min/avg/max: 0/0/0
Received: 1
Sent: 0
Connections: 1
Outstanding: 0
Zxid: 0x0
Mode: follower
Node count: 4
可以明显看到之前查询的mode从standlone变成了follower, 说明集群部署成功, 好了~~
转载来源:https://www.jianshu.com/p/9a2963c2998a