docker环境下zookeeper集群部署(一)

docker环境下zookeeper集群部署(一)

单节点docker,多个zookeeper容器集群

直接使用shell脚本完成镜像下载、子网创建、部署集群等功能。

部署脚本
#!/bin/bash
#Get zookeeper image
zkimage=`docker images | grep zookeeper | awk {'print $1'}`
if [ -n "$zkimage" ]
then
    echo 'The zookeeper image is already existed.'
else
    echo 'Pull the latest zookeeper image.'
    docker pull zookeeper
fi

#Create network for zookeeper containers
zknet=`docker network ls | grep zknetwork | awk {'print $2'}`
if [ -n "$zknet" ]
then
    echo 'The zknetwork is already existed.'
else
    echo 'Create zknetwork.'
    docker network create zknetwork
fi

#Start zookeeper cluster
echo 'Start 3 zookeeper servers.'

ZOO_SERVERS="server.1=zkServer1:
<think>我们正在处理用户关于使用dockerrun命令部署Zookeeper集群的问题。用户希望得到教程或指南。注意,用户特别要求使用dockerrun,而不是docker-compose。根据引用内容,虽然引用中主要使用docker-compose,但我们可以从中提取关键配置信息,然后将其转换为dockerrun命令。关键点:1.Zookeeper集群需要多个节点,每个节点需要唯的ID。2.节点之间需要通信,因此需要配置网络(如创建自定义网络)。3.每个节点需要配置环境变量(如ZOO_MY_ID,ZOO_SERVERS等)。步骤:1.创建自定义网络(如果尚未创建)。2.为每个Zookeeper节点运行个容器,使用dockerrun命令。3.配置每个容器的环境变量和网络设置。具体步骤:1.拉取Zookeeper镜像(如果尚未拉取):dockerpullzookeeper2.创建自定义网络(例如bridge类型):dockernetworkcreate--driverbridge--subnet172.18.0.0/16zookeeper_net3.运行第个节点(例如leader,id=1):dockerrun-d\--namezookeeper1\--networkzookeeper_net\-eZOO_MY_ID=1\-eZOO_SERVERS="server.1=zookeeper1:2888:3888;2181server.2=zookeeper2:2888:3888;2181server.3=zookeeper3:2888:3888;2181"\-p2181:2181\-p2888:2888\-p3888:3888\zookeeper4.运行第二个节点(id=2):dockerrun-d\--namezookeeper2\--networkzookeeper_net\-eZOO_MY_ID=2\-eZOO_SERVERS="server.1=zookeeper1:2888:3888;2181server.2=zookeeper2:2888:3888;2181server.3=zookeeper3:2888:3888;2181"\-p2182:2181\-p2889:2888\-p3889:3888\zookeeper5.运行第三个节点(id=3):dockerrun-d\--namezookeeper3\--networkzookeeper_net\-eZOO_MY_ID=3\-eZOO_SERVERS="server.1=zookeeper1:2888:3888;2181server.2=zookeeper2:2888:3888;2181server.3=zookeeper3:2888:3888;2181"\-p2183:2181\-p2890:2888\-p3890:3888\zookeeper注意:-每个节点的端口映射需要不同,以避免冲突(如第个节点2181映射到宿主机的2181,第二个节点2181映射到宿主机的2182,以此类推)。-在ZOO_SERVERS中,我们使用容器名称(如zookeeper1)作为主机名,因为它们在同个自定义网络zookeeper_net中,可以通过容器名互相访问。-环境变量ZOO_MY_ID必须唯(1,2,3),并且与ZOO_SERVERS中配置的server.x的x对应。-环境变量ZOO_SERVERS的格式:server.<id>=<host>:<port1>:<port2>;2181,其中port1用于follower连接leader,port2用于选举。6.验证集群:进入任意个容器,执行zkServer.shstatus查看状态:dockerexec-itzookeeper1/bin/bash./bin/zkServer.shstatus或者使用zkCli.sh连接:dockerrun-it--rm--networkzookeeper_netzookeeperzkCli.sh-serverzookeeper1:2181注意事项:-如果宿主机端口已经被占用,请更换端口映射。-在ZOO_SERVERS中,每个server的id必须和对应容器的ZOO_MY_ID致。-自定义网络允许容器通过名称相互访问,因此无需使用IP地址。另外,引用[4]提到权限问题,如果遇到权限问题,可以尝试在命令前加sudo或将当前用户加入docker组。因此,我们给出了使用dockerrun部署Zookeeper集群的步骤。生成相关问题:1.如何验证Zookeeper集群是否正常工作?2.在部署Zookeeper集群时,如何处理网络配置问题?3.如何扩展Zookeeper集群的节点数量?4.如何配置Zookeeper集群的持久化存储?5.在Docker部署Zookeeper集群时,如何配置容器的资源限制(如内存、CPU)?注意:回答中不需要再次显示引用标识,因为用户的问题已经通过引用内容获得了关键信息,并且我们根据这些信息给出了dockerrun的步骤。</think>### 使用 docker run 部署 Zookeeper 集群教程 以下是使用 `docker run` 命令手动部署 Zookeeper 集群的详细步骤: #### 1. **创建专用网络** ```bash docker network create --driver bridge --subnet 172.18.0.0/16 zookeeper_net ``` #### 2. **启动第个节点(Leader)** ```bash docker run -d \ --name zookeeper1 \ --network zookeeper_net \ --ip 172.18.0.101 \ -e ZOO_MY_ID=1 \ -e ZOO_SERVERS="server.1=172.18.0.101:2888:3888;2181 server.2=172.18.0.102:2888:3888;2181 server.3=172.18.0.103:2888:3888;2181" \ -p 2181:2181 \ -p 2888:2888 \ -p 3888:3888 \ zookeeper:latest ``` #### 3. **启动第二个节点(Follower)** ```bash docker run -d \ --name zookeeper2 \ --network zookeeper_net \ --ip 172.18.0.102 \ -e ZOO_MY_ID=2 \ -e ZOO_SERVERS="server.1=172.18.0.101:2888:3888;2181 server.2=172.18.0.102:2888:3888;2181 server.3=172.18.0.103:2888:3888;2181" \ -p 2182:2181 \ -p 2889:2888 \ -p 3889:3888 \ zookeeper:latest ``` #### 4. **启动第三个节点(Follower)** ```bash docker run -d \ --name zookeeper3 \ --network zookeeper_net \ --ip 172.18.0.103 \ -e ZOO_MY_ID=3 \ -e ZOO_SERVERS="server.1=172.18.0.101:2888:3888;2181 server.2=172.18.0.102:2888:3888;2181 server.3=172.18.0.103:2888:3888;2181" \ -p 2183:2181 \ -p 2890:2888 \ -p 3890:3888 \ zookeeper:latest ``` #### 5. **验证集群状态** ```bash # 检查任意节点状态 docker exec -it zookeeper1 /bin/bash -c "zkServer.sh status" # 预期输出示例 Mode: leader # 或 follower ``` #### 关键参数说明 1. **`--network`**:指定自定义网络,确保容器间互通 2. **`-e ZOO_MY_ID`**:唯节点ID(1-255) 3. **`-e ZOO_SERVERS`**:集群节点列表,格式: $$ \text{server.<ID>=<IP>:<FOLLOWER_PORT>:<ELECTION_PORT>;<CLIENT_PORT>} $$ 4. **端口映射**: - `2181`:客户端连接端口 - `2888`:Follower与Leader通信端口 - `3888`:选举通信端口 > **注意**:若遇到权限问题(如`docker.sock`权限),需将当前用户加入`docker`组或使用`sudo`[^4] #### 集群测试 ```bash # 使用客户端连接 docker run -it --rm --network zookeeper_net \ zookeeper:latest zkCli.sh -server 172.18.0.101:2181 # 创建测试节点 create /test_node "hello" ``` --- ### 相关问题 1. Zookeeper 集群选举机制是如何工作的? 2. 如何配置 Zookeeper 集群的数据持久化存储? 3. Docker 网络模式(bridge/host)对 Zookeeper 集群性能有何影响? 4. 如何监控 Docker 容器中 Zookeeper 节点的运行状态? 5. 集群扩容时如何动态添加新的 Zookeeper 节点?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

shiter

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值