1. Zookeeper 基本使用
下载 zookeeper 镜像
默认下载最新版本,指定版本可以在 zookeeper 后面添加 tag,如 zookeeper:latest
1 | docker pull zookeeper |
启动 zookeeper 镜像。
1 | docker run --name first-zk -d zookeeper |
这个命令会创建名为 first-zk 的 zookeeper 容器,在后台运行,并默认导出 2181 端口。
测试 zookeeper 容器
以下命令通过输出日志可以查看 zk 运行情况。
1 | docker logs -f first-zk |
客户端连接 zk 服务器
1. 在已创建的 first-zk 容器中,执行 zkCli.sh:
1 | docker exec -it first-zk zkCli.sh |
2. 新建 zookeeper 容器作为客户端,并连接到 first-zk:
1 | docker run -it --rm --link first-zk zookeeper zkCli.sh -server first-zk |
这里
--link first-zk
通过 docker 的 link 机制来访问 first-zk 容器;--rm
在容器退出后会自动删除容器;zkCli.sh -server first-zk
则启动 zkCli.sh 命令,连接到 first-zk。
zkCli.sh 常用命令的使用,请参考这里。
2. Zookeeper 集群搭建
编写 docker-compose.yml 文件
1 | version: '2.2' |
在这个配置文件中,docker 运行了 3 个 zookeeper 镜像,通过 ports
字段分别将本地的 2181, 2182, 2183 端口绑定到对应容器的 2181 端口上。
ZOO_MY_ID
和ZOO_SERVERS
是搭建 Zookeeper 集群需要的两个环境变量。ZOO_MY_ID
标识服务的 id,为 1-255 之间的整数,必须在集群中唯一。ZOO_SERVERS
是集群中的主机列表。
在 docker-compose.yml
所在目录下执行 COMPOSE_PROJECT_NAME=docker-zk-cluster docker-compose up
1 | ➜ docker-zk-cluster COMPOSE_PROJECT_NAME=docker-zk-cluster docker-compose up |
COMPOSE_PROJECT_NAME=docker-zk-cluster
设置该环境变量是为当前的 compose 工程取的名字,与其他工程做区分。
启动后,打开另一终端窗口,运行 COMPOSE_PROJECT_NAME=docker-zk-cluster docker-compose ps
,查看服务运行状态
1 | ➜ COMPOSE_PROJECT_NAME=docker-zk-cluster docker-compose ps |
使用 Docker 命令行客户端连接 ZK 集群
1 | docker run -it --rm --link zk1 --link zk2 --link zk3 --net docker-zk-cluster_default zookeeper zkCli.sh -server zk1:2181,zk2:2181,zk3:2181 |
--net docker-zk-cluster_default
其中docker-zk-cluster
是 compose 工程名,不作这个配置会导致docker: Error response from daemon: Cannot link to /zk1, as it does not belong to the default network.
异常。具体原因请看这里。
查看集群
通过 nc 命令连接到指定 Zookeeper 服务器,发送 stat 来查看状态。
1 | ➜ ~ echo stat | nc localhost 2181 |
如上,我们发现 zk3(端口为 2183)为 leader,其他为 follower。