【Docker】搭建Zookeeper集群
下載鏡像
docker pull zookeeper:3.5.8
wy:study wy$ docker pull zookeeper:3.5.8
3.5.8: Pulling from library/zookeeper
Digest: sha256:12af523731cbe390f5332d6c1e254f1d56c734a786910d5582653445a5cee299
Status: Downloaded newer image for zookeeper:3.5.8
docker.io/library/zookeeper:3.5.8
docker images
Standalone模式
啟動容器
通過如下命令啟動容器:
docker run -p 8080:8080 --name zookeeper-standalone --restart always -d zookeeper:3.5.8
上述命令在后臺運(yùn)行一個(gè)名為 zookeeper-standalone 的容器。由于 Zookeeper 是’快速失敗’,因此最好通過 --retart參數(shù)設(shè)置容器在意外停止時(shí)自動重啟。默認(rèn)是 no,表示不重啟。-p 參數(shù)將宿主機(jī)端口 8080 與容器端口 8080 映射。
通過如下命令查看運(yùn)行中的 Zookeeper 容器:
[root@codingce0 docker]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2268f5dd10f2 zookeeper:3.5.8 "/docker-entrypoint.…" 8 minutes ago Up 8 minutes 2888/tcp, 3888/tcp, 0.0.0.0:2181->2181/tcp, 8080/tcp zookeeper-standalone
可以看到容器對外暴露了4個(gè)端口:2181 2888 3888 8080(分別是 Zookeeper 客戶端端口,主從節(jié)點(diǎn)交互信息的端口,選舉端口以及 AdminServer 端口)。暴露端口主要是鏡像包含了 EXPOSE 2181 2888 3888 8080 命令,具體可以參閱鏡像Dockerfile。
Zookeeper 3.5 版本開始提供 AdminServer 功能。AdminServer 是嵌入式 Jetty 服務(wù)器,為四字母命令提供 HTTP 接口。默認(rèn)端口是8080。由于在啟動容器時(shí)做了端口映射,可以直接通過 http://localhost:8080/commands/stats 進(jìn)行訪問。
在Docker中容器默認(rèn)是無法與外部通信,需要將容器內(nèi)的端口映射到本地宿主機(jī)的端口,這樣用戶通過訪問宿主機(jī)指定端口時(shí)相當(dāng)于訪問容器內(nèi)的端口。
進(jìn)入容器
通過如下命令進(jìn)入容器內(nèi):
docker exec -it zookeeper-standalone /bin/bash
root@2268f5dd10f2:/apache-zookeeper-3.5.8-bin#
容器的默認(rèn)工作目錄為 /apache-zookeeper-3.5.8-bin,是因?yàn)?Zookeeper 鏡像做如下設(shè)置:
ARG DISTRO_NAME=apache-zookeeper-3.5.8-bin
WORKDIR $DISTRO_NAME
配置文件默認(rèn)在 /conf 目錄下,具體看一下默認(rèn)配置:
root@2268f5dd10f2:/apache-zookeeper-3.5.8-bin# cat /conf/zoo.cfg
dataDir=/data
dataLogDir=/datalog
tickTime=2000
initLimit=5
syncLimit=2
autopurge.snapRetainCount=3
autopurge.purgeInterval=0
maxClientCnxns=60
standaloneEnabled=true
admin.enableServer=true
server.1=localhost:2888:3888;2181
可以使用 zkServer.sh status
命令來查看 Zookeeper 啟動狀態(tài):
root@2268f5dd10f2:/apache-zookeeper-3.5.8-bin# zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /conf/zoo.cfg
Client port found: 2181. Client address: localhost.
Mode: standalone
連接Zookeeper服務(wù)
可以使用如下命令連接Zookeeper服務(wù):
zkCli.sh -server 127.0.0.1:2181
可以不用先進(jìn)入容器再連接Zookeeper服務(wù),使用如下命令一步到位:
docker exec -it zookeeper-standalone zkCli.sh -server 127.0.0.1:2181
集群模式
搭建3個(gè) Zookeeper 節(jié)點(diǎn)的集群。
啟動容器
Docker Compose
Linux 上可以從 Github 上下載它的二進(jìn)制包來使用,最新發(fā)行的版本地址:
https://github.com/docker/compose/releases
運(yùn)行以下命令以下載 Docker Compose 的當(dāng)前穩(wěn)定版本:
sudo curl -L "https://github.com/docker/compose/releases/download/v2.2.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
將可執(zhí)行權(quán)限應(yīng)用于二進(jìn)制文件:
sudo chmod +x /usr/local/bin/docker-compose
創(chuàng)建軟鏈
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
測試是否安裝成功
docker-compose --version
啟動容器操作
為了避免一個(gè)一個(gè)的啟動,使用 docker-compose 的方式來啟動 Zookeeper 集群。首先創(chuàng)建一個(gè)名為 docker-compose.yml 的文件, 其內(nèi)容如下:
version: '3.1'
services:
zoo1:
image: zookeeper:3.5.8
restart: always
hostname: zoo1
ports:
- 2181:2181
environment:
ZOO_MY_ID: 1
ZOO_SERVERS: server.1=0.0.0.0:2888:3888;2181 server.2=zoo2:2888:3888;2181 server.3=zoo3:2888:3888;2181
zoo2:
image: zookeeper:3.5.8
restart: always
hostname: zoo2
ports:
- 2182:2181
environment:
ZOO_MY_ID: 2
ZOO_SERVERS: server.1=zoo1:2888:3888;2181 server.2=0.0.0.0:2888:3888;2181 server.3=zoo3:2888:3888;2181
zoo3:
image: zookeeper:3.5.8
restart: always
hostname: zoo3
ports:
- 2183:2181
environment:
ZOO_MY_ID: 3
ZOO_SERVERS: server.1=zoo1:2888:3888;2181 server.2=zoo2:2888:3888;2181 server.3=0.0.0.0:2888:3888;2181
上述配置將以副本模式啟動 Zookeeper 3.5.8,同時(shí)會告訴 Docker 運(yùn)行三個(gè) Zookeeper 容器:zoo1、zoo2、zoo3,并分別將本地的 2181, 2182, 2183 端口綁定到對應(yīng)的容器的 2181 端口上。
ZOO_MY_ID 和 ZOO_SERVERS 是搭建 Zookeeper 集群需要設(shè)置的兩個(gè)環(huán)境變量, 其中 ZOO_MY_ID 表示 Zookeeper 服務(wù)的 id, 它是1-255 之間的整數(shù), 必須在集群中唯一。ZOO_SERVERS 是Zookeeper 集群的主機(jī)列表。
接著在 docker-compose.yml 當(dāng)前目錄下運(yùn)行如下命令:
COMPOSE_PROJECT_NAME=zookeeper_cluster docker-compose up -d
或者指定配置文件名稱 COMPOSE_PROJECT_NAME=zookeeper_cluster docker-compose -f docker-compose.yml up -d。
在 docker-compose up 前添加 COMPOSE_PROJECT_NAME=zookeeper_cluster 環(huán)境變量是為 compose 工程起一個(gè)名字。
COMPOSE_PROJECT_NAME=zookeeper_cluster docker-compose up -d
Creating network "zookeeper_cluster_default" with the default driver
Creating zookeeper_cluster_zoo1_1 ... done
Creating zookeeper_cluster_zoo3_1 ... done
Creating zookeeper_cluster_zoo2_1 ... done
通過docker p
命令查看運(yùn)行中的 Zookeeper 集群容器
[root@codingce0 docker]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2268f5dd10f2 zookeeper:3.5.8 "/docker-entrypoint.…" About an hour ago Up About an hour 2888/tcp, 3888/tcp, 0.0.0.0:2181->2181/tcp, 8080/tcp zookeeper_cluster-zoo1-1
1e08efd91c98 zookeeper:3.5.8 "/docker-entrypoint.…" About an hour ago Up About an hour 2888/tcp, 3888/tcp, 8080/tcp, 0.0.0.0:2182->2181/tcp zookeeper_cluster-zoo2-1
0006137a82f2 zookeeper:3.5.8 "/docker-entrypoint.…" About an hour ago Up About an hour 2888/tcp, 3888/tcp, 8080/tcp, 0.0.0.0:2183->2181/tcp zookeeper_cluster-zoo3-1
[root@codingce0 docker]#
進(jìn)入容器
通過docker exec -it zookeeper_clusteroo1-1 /bin/bash
命令進(jìn)入 zookeeper_cluster-zoo1-1 容器內(nèi):
[root@codingce0 docker]# docker exec -it zookeeper_cluster-zoo1-1 /bin/bash
root@zoo1:/apache-zookeeper-3.5.8-bin#
zkServer.sh status
查看 Zookeeper 的啟動狀態(tài)
root@zoo1:/apache-zookeeper-3.5.8-bin# zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /conf/zoo.cfg
Client port found: 2181. Client address: localhost.
Mode: follower
root@zoo1:/apache-zookeeper-3.5.8-bin#
可以看到該節(jié)點(diǎn)是 Follower 節(jié)點(diǎn),以此類推,查看 zookeeper_cluster-zoo2-1、zookeeper_cluster-zoo3-1 容器的啟動狀態(tài):
[root@codingce0 docker]# docker exec -it zookeeper_cluster-zoo2-1 /bin/bash
root@zoo2:/apache-zookeeper-3.5.8-bin# zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /conf/zoo.cfg
Client port found: 2181. Client address: localhost.
Mode: follower
root@zoo2:/apache-zookeeper-3.5.8-bin#
[root@codingce0 docker]# docker exec -it zookeeper_cluster-zoo3-1 /bin/bash
root@zoo3:/apache-zookeeper-3.5.8-bin# zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /conf/zoo.cfg
Client port found: 2181. Client address: localhost.
Mode: leader
創(chuàng)建了一個(gè)主節(jié)點(diǎn)Leader,2個(gè)從節(jié)點(diǎn)Follower。
連接Zookeeper服務(wù)
zkCli.sh -server localhost:2181
zoo1, zoo2, zoo3 的 2181 端口分別映射到了本地主機(jī)的 2181, 2182, 2183 端口上, 因此使用如下命令連接 Zookeeper 集群:文章來源:http://www.zghlxwxcb.cn/news/detail-766386.html
zkCli.sh -server localhost:2181,localhost:2182,localhost:2183
文章來源地址http://www.zghlxwxcb.cn/news/detail-766386.html
到了這里,關(guān)于【Docker】搭建Zookeeper集群的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!