单机部署
- 新建
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客户端连接