当前位置 : 主页 > 编程语言 > java >

【Docker】搭建Zookeeper集群

来源:互联网 收集:自由互联 发布时间:2023-02-04
【Docker】搭建Zookeeper集群 下载镜像 docker pull zookeeper:3.5.8wy:study wy$ docker pull zookeeper:3.5.83.5.8: Pulling from library/zookeeperDigest: sha256:12af523731cbe390f5332d6c1e254f1d56c734a786910d5582653445a5cee299Status: Do

【Docker】搭建Zookeeper集群

下载镜像

docker pull zookeeper:3.5.8wy:study wy$ docker pull zookeeper:3.5.83.5.8: Pulling from library/zookeeperDigest: sha256:12af523731cbe390f5332d6c1e254f1d56c734a786910d5582653445a5cee299Status: Downloaded newer image for zookeeper:3.5.8docker.io/library/zookeeper:3.5.8docker images

【Docker】搭建Zookeeper集群_java-zookeeper

Standalone模式

启动容器

通过如下命令启动容器:

docker run -p 8080:8080 --name zookeeper-standalone --restart always -d zookeeper:3.5.8

上述命令在后台运行一个名为 zookeeper-standalone 的容器。由于 Zookeeper 是’快速失败’,因此最好通过 --retart参数设置容器在意外停止时自动重启。默认是 no,表示不重启。-p 参数将宿主机端口 8080 与容器端口 8080 映射。

通过如下命令查看运行中的 Zookeeper 容器:

[root@codingce0 docker]# docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES2268f5dd10f2 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个端口:2181 2888 3888 8080(分别是 Zookeeper 客户端端口,主从节点交互信息的端口,选举端口以及 AdminServer 端口)。暴露端口主要是镜像包含了 EXPOSE 2181 2888 3888 8080 命令,具体可以参阅镜像Dockerfile。

Zookeeper 3.5 版本开始提供 AdminServer 功能。AdminServer 是嵌入式 Jetty 服务器,为四字母命令提供 HTTP 接口。默认端口是8080。由于在启动容器时做了端口映射,可以直接通过 http://localhost:8080/commands/stats 进行访问。

在Docker中容器默认是无法与外部通信,需要将容器内的端口映射到本地宿主机的端口,这样用户通过访问宿主机指定端口时相当于访问容器内的端口。

进入容器

通过如下命令进入容器内:

docker exec -it zookeeper-standalone /bin/bashroot@2268f5dd10f2:/apache-zookeeper-3.5.8-bin#

容器的默认工作目录为 /apache-zookeeper-3.5.8-bin,是因为 Zookeeper 镜像做如下设置:

ARG DISTRO_NAME=apache-zookeeper-3.5.8-binWORKDIR $DISTRO_NAME

配置文件默认在 /conf 目录下,具体看一下默认配置:

root@2268f5dd10f2:/apache-zookeeper-3.5.8-bin# cat /conf/zoo.cfgdataDir=/datadataLogDir=/datalogtickTime=2000initLimit=5syncLimit=2autopurge.snapRetainCount=3autopurge.purgeInterval=0maxClientCnxns=60standaloneEnabled=trueadmin.enableServer=trueserver.1=localhost:2888:3888;2181

可以使用 ​​zkServer.sh status​​ 命令来查看 Zookeeper 启动状态:

root@2268f5dd10f2:/apache-zookeeper-3.5.8-bin# zkServer.sh statusZooKeeper JMX enabled by defaultUsing config: /conf/zoo.cfgClient port found: 2181. Client address: localhost.Mode: standalone

连接Zookeeper服务

可以使用如下命令连接Zookeeper服务:

zkCli.sh -server 127.0.0.1:2181

可以不用先进入容器再连接Zookeeper服务,使用如下命令一步到位:

docker exec -it zookeeper-standalone zkCli.sh -server 127.0.0.1:2181

集群模式

搭建3个 Zookeeper 节点的集群。

启动容器

Docker Compose

Linux 上可以从 Github 上下载它的二进制包来使用,最新发行的版本地址:​​​https://github.com/docker/compose/releases​​ 运行以下命令以下载 Docker Compose 的当前稳定版本:

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

将可执行权限应用于二进制文件:

sudo chmod +x /usr/local/bin/docker-compose

创建软链

sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose

测试是否安装成功

docker-compose --version

启动容器操作

为了避免一个一个的启动,使用 docker-compose 的方式来启动 Zookeeper 集群。首先创建一个名为 docker-compose.yml 的文件, 其内容如下:

【Docker】搭建Zookeeper集群_apache_02

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,同时会告诉 Docker 运行三个 Zookeeper 容器:zoo1、zoo2、zoo3,并分别将本地的 2181, 2182, 2183 端口绑定到对应的容器的 2181 端口上。

ZOO_MY_ID 和 ZOO_SERVERS 是搭建 Zookeeper 集群需要设置的两个环境变量, 其中 ZOO_MY_ID 表示 Zookeeper 服务的 id, 它是1-255 之间的整数, 必须在集群中唯一。ZOO_SERVERS 是Zookeeper 集群的主机列表。

接着在 docker-compose.yml 当前目录下运行如下命令:

【Docker】搭建Zookeeper集群_docker_03

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 环境变量是为 compose 工程起一个名字。

COMPOSE_PROJECT_NAME=zookeeper_cluster docker-compose up -dCreating network "zookeeper_cluster_default" with the default driverCreating zookeeper_cluster_zoo1_1 ... doneCreating zookeeper_cluster_zoo3_1 ... doneCreating zookeeper_cluster_zoo2_1 ... done

通过​​docker p​​命令查看运行中的 Zookeeper 集群容器

[root@codingce0 docker]# docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES2268f5dd10f2 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-11e08efd91c98 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-10006137a82f2 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]#

进入容器

通过​​docker exec -it zookeeper_clusteroo1-1 /bin/bash​​命令进入 zookeeper_cluster-zoo1-1 容器内:

[root@codingce0 docker]# docker exec -it zookeeper_cluster-zoo1-1 /bin/bashroot@zoo1:/apache-zookeeper-3.5.8-bin#

​​zkServer.sh status​​ 查看 Zookeeper 的启动状态

root@zoo1:/apache-zookeeper-3.5.8-bin# zkServer.sh statusZooKeeper JMX enabled by defaultUsing config: /conf/zoo.cfgClient port found: 2181. Client address: localhost.Mode: followerroot@zoo1:/apache-zookeeper-3.5.8-bin#

可以看到该节点是 Follower 节点,以此类推,查看 zookeeper_cluster-zoo2-1、zookeeper_cluster-zoo3-1 容器的启动状态:

[root@codingce0 docker]# docker exec -it zookeeper_cluster-zoo2-1 /bin/bashroot@zoo2:/apache-zookeeper-3.5.8-bin# zkServer.sh statusZooKeeper JMX enabled by defaultUsing config: /conf/zoo.cfgClient port found: 2181. Client address: localhost.Mode: followerroot@zoo2:/apache-zookeeper-3.5.8-bin#[root@codingce0 docker]# docker exec -it zookeeper_cluster-zoo3-1 /bin/bashroot@zoo3:/apache-zookeeper-3.5.8-bin# zkServer.sh statusZooKeeper JMX enabled by defaultUsing config: /conf/zoo.cfgClient port found: 2181. Client address: localhost.Mode: leader

创建了一个主节点Leader,2个从节点Follower。

连接Zookeeper服务

zkCli.sh -server localhost:2181

【Docker】搭建Zookeeper集群_docker_04

zoo1, zoo2, zoo3 的 2181 端口分别映射到了本地主机的 2181, 2182, 2183 端口上, 因此使用如下命令连接 Zookeeper 集群:

zkCli.sh -server localhost:2181,localhost:2182,localhost:2183

【Docker】搭建Zookeeper集群_apache_05

上一篇:分布式链路追踪-skywalking入门体验
下一篇:没有了
网友评论