集群角色
zookeeper 集群中的機器分為一下三種角色
leader:為客戶端提供讀寫服務(事務性操作),并維護集群狀態,它是由集群選舉所產生的;
follower:為客戶端提供讀(非事務性操作),轉發給leader寫(事務性操作),參與選舉操作;
observer:角色與follower類型,但無選舉操作;
zookeeper端口
1:2181:對client端提供服務
2:2888:集群內機器通訊使用(leadre監聽此端口)
1:3888:選舉leader使用
docker-compose.yml文件
version: '3'
services:zoo1:image: zookeeper:latestrestart: alwayscontainer_name: zoo1ports:- "2181:2181"environment:ZOO_MY_ID: 1ZOO_SERVERS: server.1=zoo1:2888:3888;2181 server.2=zoo2:2888:3888;2181 server.3=zoo3:2888:3888;2181zoo2:image: zookeeper:latestrestart: alwayscontainer_name: zoo2 ports:- "2182:2181" environment:ZOO_MY_ID: 2ZOO_SERVERS: server.1=zoo1:2888:3888;2181 server.2=zoo2:2888:3888;2181 server.3=zoo3:2888:3888;2181zoo3:image: zookeeper:latestrestart: alwayscontainer_name: zoo3ports:- "2183:2181"environment:ZOO_MY_ID: 3ZOO_SERVERS: server.1=zoo1:2888:3888;2181 server.2=zoo2:2888:3888;2181 server.3=zoo3:2888:3888;2181zoonavigator:image: elkozmon/zoonavigator:latestports:- "9000:9000"environment:ZKUI_ZK_SERVER: "zoo1:2181,zoo2:2181,zoo3:2181"
如果是部署在不同的服務器可以在每個容器設置network_mode: bridge或者network_mode: host
通過一下命令查看那個zk是leader活著follower
[root@localhost zookeeperDocker]# docker exec -it zoo1 ./bin/zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /conf/zoo.cfg
Client port found: 2181. Client address: localhost. Client SSL: false.
Mode: follower
[root@localhost zookeeperDocker]# docker exec -it zoo2 ./bin/zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /conf/zoo.cfg
Client port found: 2181. Client address: localhost. Client SSL: false.
Mode: follower
[root@localhost zookeeperDocker]# docker exec -it zoo3 ./bin/zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /conf/zoo.cfg
Client port found: 2181. Client address: localhost. Client SSL: false.
Mode: leader