
# Zookeeper部署
#### 前置条件
安装JDK
3台机器2888和3888端口能互通
#### 安装目录约定
- 安装目录：/opt/zookeeper-3.6.1
- 配置文件：/opt/zookeeper-3.6.1/conf/zoo.cfg
- 数据目录：/data/zookeeper-3.6.1/data
- 日志目录：/data/zookeeper-3.6.1/logs
#### 安装配置
三台zookeeper配置，解压并创建目录
上传安装apache-zookeeper-3.6.1-bin.tar.gz包到**3**台服务器，分别都解压并创建目录
```
# cd /soft/zookeeper/
# tar -vxf apache-zookeeper-3.6.1-bin.tar.gz
# mv apache-zookeeper-3.6.1-bin /opt/zookeeper-3.6.1
# mkdir -p /data/zookeeper-3.6.1/{data,logs}
```
1. Zookeeper节点一配置 在节点一机器执行以下操作
   添加集群节点身份标识
   ```
   # echo &quot;1&quot; &gt;/data/zookeeper-3.6.1/data/myid
   ```
   新增配置集群信息
   ```
   # vim /opt/zookeeper-3.6.1/conf/zoo.cfg
   clientPort=2181
   tickTime=2000
   initLimit=20
   syncLimit=10
   dataDir=/data/zookeeper-3.6.1/data
   dataLogDir=/data/zookeeper-3.6.1/logs
   #2888是leader与flower之间的访问端口(心跳端口)，3888是投票选举leader端口(数据端口)
   #配置3个zookeeper节点地址
   server.1=192.168.0.190:2888:3888
   server.2=192.168.0.228:2888:3888
   server.3=10.201.0.168:2888:3888
   #开启四字命令
   4lw.commands.whitelist=*
   ```
   配置日志目录
   ```
   # sed -i 's/ZOO_LOG_DIR\=\&quot;\$ZOOKEEPER_PREFIX\/logs\&quot;/ZOO_LOG_DIR\=\&quot;\/data\/zookeeper-3.6.1\/logs\&quot;/g' /opt/zookeeper-3.6.1/bin/zkEnv.sh
   ```
   
2. Zookeeper节点二配置 **在节点二机器执行以下操作**
   添加集群节点身份标识
   ```
   # echo &quot;2&quot; &gt;/data/zookeeper-3.6.1/data/myid
   ```
   新增配置集群信息
   ```
   # vim /opt/zookeeper-3.6.1/conf/zoo.cfg
   clientPort=2181
   tickTime=2000
   initLimit=20
   syncLimit=10
   dataDir=/data/zookeeper-3.6.1/data
   dataLogDir=/data/zookeeper-3.6.1/logs
   #2888是leader与flower之间的访问端口(心跳端口)，3888是投票选举leader端口(数据端口)
   #配置3个zookeeper节点地址
   server.1=192.168.0.190:2888:3888
   server.2=192.168.0.228:2888:3888
   server.3=10.201.0.168:2888:3888
   #开启四字命令
   4lw.commands.whitelist=*
   ```
   配置日志目录
   ```
   # sed  -i 's/ZOO_LOG_DIR\=\&quot;\$ZOOKEEPER_PREFIX\/logs\&quot;/ZOO_LOG_DIR\=\&quot;\/data\/zookeeper-3.6.1\/logs\&quot;/g' /opt/zookeeper-3.6.1/bin/zkEnv.sh
   ```
   
3. Zookeeper节点三配置 **在节点三机器执行以下操作**
   添加集群节点身份标识
   ```
   # echo &quot;3&quot; &gt;/data/zookeeper-3.6.1/data/myid
   ```
   新增配置集群信息
   ```
   # vim /opt/zookeeper-3.6.1/conf/zoo.cfg
   clientPort=2181
   tickTime=2000
   initLimit=20
   syncLimit=10
   dataDir=/data/zookeeper-3.6.1/data
   dataLogDir=/data/zookeeper-3.6.1/logs
   #2888是leader与flower之间的访问端口(心跳端口)，3888是投票选举leader端口(数据端口)
   #配置3个zookeeper节点地址
   server.1=192.168.0.190:2888:3888
   server.2=192.168.0.228:2888:3888
   server.3=10.201.0.168:2888:3888
   #开启四字命令
   4lw.commands.whitelist=*
   ```
   配置日志目录
   ```
   # sed  -i 's/ZOO_LOG_DIR\=\&quot;\$ZOOKEEPER_PREFIX\/logs\&quot;/ZOO_LOG_DIR\=\&quot;\/data\/zookeeper-3.6.1\/logs\&quot;/g' /opt/zookeeper-3.6.1/bin/zkEnv.sh
   ```
   
#### 启动zookeeper
1. 3个节点分别创建zookeeper系统启动文件
   ```
   # vim /etc/systemd/system/zookeeper.service
   [Unit]
   Description=zkServer
   After=network.target remote-fs.target nss-lookup.target
   ConditionPathExists=/opt/zookeeper-3.6.1/conf/zoo.cfg
   [Service]
   Type=forking
   Environment=JAVA_HOME=/opt/jdk1.8.0_131
   ExecStart=/opt/zookeeper-3.6.1/bin/zkServer.sh start
   ExecStop=/opt/zookeeper-3.6.1/bin/zkServer.sh stop
   PrivateTmp=true
   [Install]
   WantedBy=multi-user.target
   ```
   
2. 重新加载systemctl配置
   ```
   # systemctl daemon-reload
   ```
   
3. 设置跟随linux启动，并启动zookeeper
   ```
   # systemctl start zookeeper && systemctl enable zookeeper
   ```
   图1启动   
   ![](https://support.huaweicloud.com/deepexidip-dma/zh-cn_image_0000001862245700.png) 
4. 查看状态
   ```
   # /opt/zookeeper-3.6.1/bin/zkServer.sh status
   ```
   主节点
   图2启动   
   ![](https://support.huaweicloud.com/deepexidip-dma/zh-cn_image_0000001908165605.png)
   从节点
   图3启动   
   ![](https://support.huaweicloud.com/deepexidip-dma/zh-cn_image_0000001862085852.png) 
 
