docker compose部署zookeeper

本文详细介绍了如何使用docker-compose配置和启动单机版Zookeeper服务,以及通过Python的kazoo库实现ZooKeeper客户端的连接、节点操作和事务处理。包括创建节点、数据操作和事件监听功能。

单机部署

  • 新建docker-compose.yaml
version: '3'
services:
  zookeeper:
    image: zookeeper:3.5.7
    container_name: base-zookeeper
    hostname: zookeeper
    privileged: true
    restart: always
    ports:
      - 2181:2181
    environment:
      TZ: "Asia/Shanghai"
    volumes:
      - ./volumes/zookeeper/datalog:/datalog
      - ./volumes/zookeeper/logs:/logs
      - ./volumes/zookeeper/data:/data
      - ./volumes/zookeeper/conf:/conf
  • 使用docker-compose启动
docker-compose -f docker-compose.yaml up -d
  • 测试连接
docker-compose -f docker-compose.yaml exec -it zookeeper zkCli.sh -serv
er zookeeper

看到下面信息表示客户端连接成功
在这里插入图片描述

  • 测试使用
set /name zs
get /name

在这里插入图片描述

集群部署

todo

python访问测试

  • 安装库
pip install kazoo -i https://pypi.douban.com/simple
  • 新建test_zk.py
from kazoo.client import KazooClient


zk = KazooClient(hosts='zookeeper:2181')  # # 创建一个ZooKeeper客户端实例
zk.start()  # 启动ZooKeeper客户端连接

# 检查是否成功连接到ZooKeeper
if zk.connected:
    print("成功连接到ZooKeeper!")

# 进行其他操作,例如创建节点、获取节点数据等
zk.set('/name', b'zs')
value = zk.get('/name')
print(value)

zk.stop()  # 关闭ZooKeeper客户端连接
  • 运行
    在这里插入图片描述

python常用操作

from kazoo.client import KazooClient

# 创建一个ZooKeeper客户端实例
zk = KazooClient(hosts='zookeeper:2181')

# 启动ZooKeeper客户端连接
zk.start()

# 检查是否成功连接到ZooKeeper
if zk.connected:
    print("成功连接到ZooKeeper!")

# 进行其他操作,例如创建节点、获取节点数据等
zk.create('/app_01', b'app_01')  # 创建节点
zk.exists('/app_01')  # 检查节点是否存在
zk.get('/app_01')  # 获取节点数据
zk.set('/app_01', b'app_01_back')  # 修改节点数据

zk.create('/app_01/sub_app_01')
zk.create('/app_01/sub_app_02')
zk.get_children('app_01')  # 获取指定节点的所有子节点
zk.delete('app_01/sub_app_01')  # 删除节点


# 监听器监听子节点,当子节点发生变化时触发
@zk.ChildrenWatch('/app_01')
def watch_children(children):
    print("this is watch_children %s" % children)


# 监听器监听数据,当节点数据发生变化时触发
@zk.DataWatch("/app_01")
def watch_data(data, state):
    print("app_01 node is %s" % data)


# 事务,自v3.4以后,zookeeper支持一次发送多个命令,这些命令作为一个原子进行提交,要么全部执行成功,要么全部失败
transaction = zk.transaction()
transaction.check('/china/beijing', version=3)
transaction.create('/china/shanghai', b"shanghai")
results = transaction.commit()

zk.stop()  # 关闭ZooKeeper客户端连接
### 使用 Docker Compose 部署 ZooKeeper 的最佳实践与示例 #### 创建 Docker Compose 文件 为了在多台虚拟机上部署 ZooKeeper 和 Kafka 集群,可以按照以下方法创建 `docker-compose` 文件并配置 ZooKeeper 实例。以下是具体的实现方式: 1. **准备基础环境** 确保每台虚拟机已安装 DockerDocker Compose,并确认其正常运行[^1]。 2. **定义 ZooKeeper 节点的 IP 地址** 假设三台虚拟机的 IP 地址分别为: - 192.168.88.130 (server02) - 192.168.88.131 (server03) - 192.168.88.132 (server04) 3. **编写 Docker Compose 文件** 下面是一个典型的 `docker-compose.yml` 文件示例,用于部署单个 ZooKeeper 实例。此文件将在每台虚拟机上分别执行以形成集群。 ```yaml version: '3' services: zookeeper: image: wurstmeister/zookeeper:latest container_name: zookeeper environment: ZOO_MY_ID: ${ZOO_MY_ID} ZOO_SERVERS: server.1=192.168.88.130:2888:3888;2181 \ server.2=192.168.88.131:2888:3888;2181 \ server.3=192.168.88.132:2888:3888;2181 ports: - "2181:2181" volumes: - ./data:/data - ./datalog:/datalog ``` 上述配置中: - `image`: 使用官方推荐的 Wurstmeister 提供的 ZooKeeper 镜像。 - `environment.ZOO_MY_ID`: 定义当前节点的 ID(需设置为唯一的整数)。可以通过 `.env` 文件传递变量[^2]。 - `environment.ZOO_SERVERS`: 列出所有参与集群的 ZooKeeper 节点及其通信端口。 - `ports`: 映射容器内的默认客户端连接端口到宿主机。 - `volumes`: 将本地目录挂载至容器内,以便持久化数据存储。 4. **配置 .env 文件** 在同一目录下创建一个 `.env` 文件,指定每个节点的唯一 ID。例如,在不同服务器上的 `.env` 文件内容如下: - 对于 `192.168.88.130`: ``` ZOO_MY_ID=1 ``` - 对于 `192.168.88.131`: ``` ZOO_MY_ID=2 ``` - 对于 `192.168.88.132`: ``` ZOO_MY_ID=3 ``` 5. **启动服务** 执行以下命令以启动 ZooKeeper 服务: ```bash docker-compose up -d ``` 此命令将以守护模式运行容器,并自动加载 `.env` 中的变量[^3]。 6. **验证集群状态** 连接到任意一台虚拟机中的 ZooKeeper 容器,检查集群成员关系是否正常: ```bash docker exec -it zookeeper zkCli.sh ``` 输入以下命令查看集群信息: ```bash echo stat | nc localhost 2181 ``` --- ### 注意事项 - 如果需要扩展集群规模,只需增加新的虚拟机并将新节点加入 `ZOO_SERVERS` 参数即可。 - 数据卷路径应根据实际需求调整,确保有足够的磁盘空间支持业务负载。 - 推荐定期备份 `/data` 和 `/datalog` 目录下的重要数据以防丢失。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值