Docker Zookeeper集群搭建(伪集群)

主要通过修改容器 zookeeper 里面的配置文件实现

1、Docker安装

zookeeper镜像获取各个版本的docker安装需要自行百度, 基本上都是采用 yum install docke 或者 apt-get install docker 等方式安装

2、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

3、Zookeeper镜像获取

[root@localhost ~]$ docker pull zookeeper
  • 这个命令会默认拉取最新的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、zookeeper单节点

4.1)zookeeper单节点启动

[root@localhost ~]$ docker run --name zk1 -d zookeeper:latest
80a20ba3881c980800d4e54f6840e8405d2758e1b501e9749812c1c8af264557
  • docker run: 该命令是从镜像启动一个容器, 使其运行起来
  • --name: 该参数是指定容器的名称, 如果不指定该参数, 则默认为这个容器的唯一ID, 也就是上面一串字符串的前面几位, 类似于git的版本记录
  • -d: 是让该容器以守护进程运行
  • zookeeper:latest: 指定zookeeper镜像及其版本, :是镜像与版本的分隔符

4.2)查看镜像中zookeeper的配置情况

[root@localhost ~]$ docker exec -it zk1 /bin/bash
bash-4.4# 
  • 这个命令是建立与zk1之间的一个连接, 这个连接通过bash命令进行交互(我是这么理解的, 如有不对, 请指正)
  • -i: 建立标准输入通道进行交互
  • -t: 分配一个tty (我理解为linux登录之后分配的一个会话)

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集群是一样的

5、Zookeeper的Docker容器集群搭建

由于是宿主机只有一个, 所以所有docker容器在本机中都存在与一个网段中, 相互之间是可以进行通信的, 不需要使用--link命令也可以通信, 如果对docker有更进一步配置, 就需要要参照其它文档进行设置了

5.1、启动两个节点 

重新按照如上命令启动两个节点, 加上zk1就3个节点了
通过docker inspect {container_name}命令我们可以获取到所有zookeeper单节点的ip地址

  • zk1: 172.17.0.2
  • zk2: 172.17.0.3
  • zk3: 172.17.0.4

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
  • 可以看出我把后面启动的两个zk的ip地址信息都添加进来了
  • 2888, 是zk之间通信的端口
  • 3888, 是zk之间投票选举的端口

保存退出

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

猜你喜欢

转载自blog.csdn.net/axing2015/article/details/82563584