docker实战之zookeeper集群

环境

  • centos7
  • zookeeper 3.4.12
  • docker 18.03.1-ce

Preface

基于docker创建zookeeper集群.

Install

开始之前,先梳理下几个关键问题:

  • zookeeper的配置文件、日志、数据文件需要映射到宿主机中
  • docker hub中提供的镜像,其在容器中zookeeper的路径(需查阅dockerfile文件)

Pull Image

1
$ docker pull zookeeper:3.4.12

Prepare

create persistent directory

1
2
# 创建数据持久目录、日志目录、启动配置文件目录
$ mkdir -p {/opt/zookeeper/conf,/data/zookeeper,/data/logs/zookeeper}

create zoo.cfg、myid

1
2
3
4
5
6
7
8
9
10
11
12
13
# 这里看需要多少节点的集群,配置文件有适当调整,这里以三台为例.
$ vim /opt/zookeeper/conf/zoo.cfg
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/data
dataLogDir=/datalog
clientPort=20181
server.1=58.221.62.131:2888:3888
server.2=58.221.61.57:2888:3888
server.3=58.221.61.62:2888:3888
# 对应机器,都需要myid文件里的值不能重复.
$ echo 1 > /data/zookeeper/myid

Start

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
# 每台机器分别启动,注意替换--name的值
$ docker run -ti --restart always -d \
-v /opt/zookeeper/conf/zoo.cfg:/conf/zoo.cfg \
-v /data/zookeeper:/data \
-v /data/logs/zookeeper:/datalog \
--network host \
--name zoo1 \
zookeeper:3.4.12
# 如果使用--network host参数,则不需要映射端口
-p 20181:20181 \
-p 2888:2888 \
-p 3888:3888 \
# 查询容器日志,需要全部启动才不会报错.
$ docker logs -t zoo1
# 查看集群,stat
$ telnet 58.221.62.131 20181
Trying 58.221.61.57...
Connected to 58.221.61.57.
Escape character is '^]'.
stat # 输入
Zookeeper version: 3.4.12-e5259e437540f349646870ea94dc2658c4e44b3b, built on 03/27/2018 03:55 GMT
Clients:
/58.221.62.131:52061[0](queued=0,recved=1,sent=0)

Latency min/avg/max: 0/2/17
Received: 16
Sent: 15
Connections: 1
Outstanding: 0
Zxid: 0x100000bb0
Mode: follower
Node count: 1009
Connection closed by foreign host.

# 以下只做记录,不会出现这种问题.可用于其他docker容器启动报错排查参考.
mkdir: can't create directory '/opt/': Permission denied
# 查看容器使用用户
$ docker run -ti --rm --entrypoint="/bin/bash" zookeeper:3.4.12 -c "whoami && id"
# 查询容器中zookeeper目录权限
$ docker run -ti --rm --entrypoint="/bin/bash" zookeeper:3.4.12 -c "ls -la"
......
drwxr-xr-x 2 zookeepe zookeepe 4096 Jun 12 01:28 bin
-rw-rw-r-- 1 zookeepe zookeepe 87945 Mar 27 04:32 build.xml
drwxr-xr-x 2 zookeepe zookeepe 6 Jun 12 01:28 conf
....
# 查询容器启动用户id
$ docker run -ti --rm --entrypoint="/bin/bash" zookeeper:3.4.12 -c "cat /etc/passwd | grep zookeeper"
zookeeper:x:1000:1000:Linux User,,,:/home/zookeeper:
# 修改目录权限所属用户
$ chown -R 1000:1000 /opt/zookeeper

Don’t Forget

1
2
3
4
5
6
# 防火墙添加端口
## zookeeper访问端口,和配置文件中的clientPort一致
$ firewall-cmd --add-port=20181/tcp --permanent
$ firewall-cmd --add-port=2888/tcp --permanent
$ firewall-cmd --add-port=3888/tcp --permanent
$ firewall-cmd --reload

Use Ansible-playbook

待完成

参考

docker zookeeper

Docker部署Zookeeper集群

坚持原创技术分享,您的支持将鼓励我继续创作!
Fork me on GitHub