zookeeper集群搭建以及常用命令
一集群搭建:本次使用docker-compose.yml来搭建三个节点的zookeeper
1. 如果linux没安装docker-compose:
1.curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose 2. chmod +x /usr/local/bin/docker-compose 3. docker-compose --version
2.编写docker-compose.yml文件:
version: '3' services: zoo1: image: zookeeper restart: always ports: - 2182:2181 environment: ZOO_MY_ID: 1 ZOO_SERVERS: server.1=zoo1:2888:3888;2181 server.2=zoo2:2888:3888;2181 server.3=zoo3:2888:3888;2181 zoo2: image: zookeeper restart: always ports: - 2183:2181 environment: ZOO_MY_ID: 2 ZOO_SERVERS: server.1=zoo1:2888:3888;2181 server.2=zoo2:2888:3888;2181 server.3=zoo3:2888:3888;2181 zoo3: image: zookeeper restart: always ports: - 2184:2181 environment: ZOO_MY_ID: 3 ZOO_SERVERS: server.1=zoo1:2888:3888;2181 server.2=zoo2:2888:3888;2181 server.3=zoo3:2888:3888;2181
3. 执行 docker-compose up -d 命令,等待安装完即可
二:zookeeper常用命令:
1. 登录其中一个节点使用命令: docker exec -it 容器Id /bin/bash
2. 进入容器后,cd bin进入到bin目录,然后执行 zkCli.sh -server 127.0.0.1:2181 连接上zookeeper客户端
3. 使用命令 ls -R / 查询当前zookeeper的目录:
4. 创建一个永久节点: create 目录 数据 如: create /order "ddddd" 重复执行该命令会报错
5. 获取节点的数据: get 目录 如: get /order
6. 创建一个永久顺序节点: create -s 目录 数据 如: create -s /order/dto "6666" 执行2次该命令,就多了2条数据
7. 创建临时节点: create -e 目录 数据: 如 create -e /order/temp "ddd" 重复执行该命令会报错
8. 创建临时顺序节点: create -es 目录 数据 如:create -es /order /temp2 "ccc" 执行2次会多2条数据
临时节点:当你退出客户端连接时,再次进来,临时节点就不存在了
9:退出客户端并且再次连接: 使用:quit命令退出客户端,然后再用命令zkCli.sh -server 127.0.0.1:2181 进行连接客户端:此时使用 ls -R /order观察临时节点是否还存在
10. 给目录增加一次监控: ls -w 目录 如:ls -w /order 当/order节点发生改变时,如增加子节点,删除子节点会得到通知,但如果是改数据的话就不会得到通知
11. 对路径增加永久监控:命令:addWatch -m PERSISTENT 目录 如 addWatch -m PERSISTENT /order 对order目录的修改会触发监控,但对/order下的子节点修改不会触发监控,如
create /order/order/dto0000000000/kk "aa" 不会触发监控,如果要子路径修改也触发监控,使用命令 addWatch -m PERSISTENT_RECURSIVE 目录 如: addWatch -m PERSISTENT_RECURSIVE /order
12. 删除节点:delete 目录 如 delete /order,只能删除最后一级的目录,如果有子目录会报错,如果要删除包含子目录的节点,使用命令 deleteall 目录 如:deleteall /order
13. 设置节点的值: set 目录 值: 如 set /order "ddd"
14. 查询集群的配置: config -c | -w |-s
15. 查询历史执行的命令 history
16. 重复执行历史的某个命令 redo +上面查询到的序号
17. 移除监控 removewatches 目录 如:removewatches /order
18. 查询子节点的数量: getAllChildrenNumber path 如 getAllChildrenNumber /shop
19. 查询临时节点:getEphemerals path 如 getEphemerals /shop
20.关闭当前连接使用close命令
21. 连接其他节点:connect ip:port; 也可以直接写对方在节点中配置的服务名,如connect zoo1
22: 查询目录的详细信息 stat 目录 如stat /shop效果和ls -s /shop差不多
23.前面说的监听,对数据变更是没效果的,如果要对数据变更进行监听使用get -w 目录,如:
三、权限管理:
1. 登录账号(账户不存在会自动创建):addauth digest 账户:密码 如 addauth digest root:admin
2. 查询当前登录的用户 whoami
2. 给指定目录授权:setAcl 目录 auth:账户:密码:权限 如: setAcl /shop auth:root:admin:cdrwa
3. 查询指定目录的权限 getAcl 目录,如getAcl /shop
登录其他节点,再访问该目录看看:connect zoo3登录节点3,然后再查询该节点(可以发现没权限访问)
但你访问子节点是有权限的 如: get /shop/dto
因此,如果你想所有的子节点都要权限访问,在设置权限时加上-R参数,如setAcl -R /shop auth:root:admin:cdrwa
4.登录账户再次访问看看: