# zookeeper **Repository Path**: lycnihao/zookeeper ## Basic Information - **Project Name**: zookeeper - **Description**: No description available - **Primary Language**: Java - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2020-08-20 - **Last Updated**: 2021-02-22 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ### Zookeeper安装 > Docker-Compose.yml 单机配置 ```yml version: '3.1' services: zoo1: image: zookeeper restart: always hostname: zoo1 ports: - 2181:2181 ``` 下载完成后输入命令`docekr ps`会发现启动了新服务 ``` CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 4d3d7f47ba8f zookeeper "/docker-entrypoint.…" 14 minutes ago Up 14 minutes 2888/tcp, 3888/tcp, 0.0.0.0:2181->2181/tcp, 8080/tcp docker_zk_zoo1_1 ``` 我们进入容器看一下,输入命令`docker exec -it 4d3d7f47ba8f /bin/bash ` 进入`/bin`目录可以看到我们zookeeper常用的命令的,输入` ./zkCli.sh`启动客户端。如果没报什么异常那么你的zoookeeper就启动成功了。 > Docker-Compose.yml 集群配置 ```yml version: '3.1' services: zoo1: image: zookeeper restart: always hostname: zoo1 ports: - 2181:2181 environment: ZOO_MY_ID: 1 ZOO_SERVERS: server.1=0.0.0.0:2888:3888;2181 server.2=zoo2:2888:3888;2181 server.3=zoo3:2888:3888;2181 zoo2: image: zookeeper restart: always hostname: zoo2 ports: - 2182:2181 environment: ZOO_MY_ID: 2 ZOO_SERVERS: server.1=zoo1:2888:3888;2181 server.2=0.0.0.0:2888:3888;2181 server.3=zoo3:2888:3888;2181 zoo3: image: zookeeper restart: always hostname: zoo3 ports: - 2183:2181 environment: ZOO_MY_ID: 3 ZOO_SERVERS: server.1=zoo1:2888:3888;2181 server.2=zoo2:2888:3888;2181 server.3=0.0.0.0:2888:3888;2181 ``` ### 常用命令 > 1、查询 ``` #查看当前节点下的全部子节点 ls 节点名称 #例子 ls / ``` ``` #查看当前节点下的数据 get 节点名称 #例子 get /zookeeper ``` > 2、创建节点 ``` create [-s] [-e] znode名称 znode数据 #-s:sequence,有序节点 #-e:ephemeral,临时节点 ``` > 3、修改节点数据 ``` set znode名称 znode数据 ``` > 3、删除节点数据 ``` delete znode名称 #没有子节点的znode deleteall znode名称 #递归删除全部(有些版本为rmr) ``` ### Zookeeper集群架构 ![11111](C:\Users\Lycheng\Desktop\11111.png) ### Zookeeper集群中的角色 > 1、Leader > > Master主节点 > > 2、Follower (默认的从节点) > > 从节点,参与选举全新Leader > > 3、Observer > > 从节点,不参与投票 > > 4、Looking > > 正在找Leader节点 ### Zookeeper投票策略 > 1、每一个Zookeeper服务都会被分配一个全局唯一的myid,myid是一个数字 > > 2、Zookeeper在执行写数据时,每一个节点都有一个自己的FIFO的队列,保证写每一个数据的时候,顺序是不会乱的,Zookeeper还会给每一个数据分配一个全局的zxid,数据越新zxid就越大 > 选举Leader: > > ​ 1. 选举出来zxid最大的节点作为Leader。 > > ​ 2. 在zxid相同的节点中,选举一个myid最大的节点,作为Leader. 查看当前Zookeeper角色 ``` root@zoo3:/apache-zookeeper-3.6.1-bin/bin# ./zkServer.sh status ZooKeeper JMX enabled by default Using config: /conf/zoo.cfg Client port found: 2181. Client address: localhost. Mode: leader root@zoo2:/apache-zookeeper-3.6.1-bin/bin# ./zkServer.sh status ZooKeeper JMX enabled by default Using config: /conf/zoo.cfg Client port found: 2181. Client address: localhost. Mode: follower root@zoo1:/apache-zookeeper-3.6.1-bin/bin# ./zkServer.sh status ZooKeeper JMX enabled by default Using config: /conf/zoo.cfg Client port found: 2181. Client address: localhost. Mode: follower ```