1
下载安装包
https://apache.org/ZooKeeper 不存在兼容性问题,下载最新版本即可当前最新版本是 3.7.0
2
准备工作
2.1
准备3台虚拟机
![](https://img-blog.csdnimg.cn/c4d0403451e44886a5d07c78749bea5a.png)
2.2 检查JDK安装
- 确保三台机器安装了JDK
java -version
2.3
检查主机名配置情况
- 三台机器是否都配置好了主机名
- 如果未配置,在/etc/hostname中修改主机名,修改完需重启
hostname
2.4
检查主机域名配置情况
- 确认三台机器都配置好了主机域名映射
cat /etc/hosts
2.5
检查防火墙
- 确认3台机器防火墙都关闭
systemctl status firewalld
2.6
检查
selinux
- 确保selinux是disabled
2.7
检查免密登录
- 确保免密登录没有问题
- 查看/root/.ssh/目录下最少有这些文件:authorized_keys、id_rsa、id_rsa.pub
- 查看authorized_keys内容,有对应3台机器的密钥信息
cd /root/.ssh/lscat authorized_keys
3
安装步骤
3.1
整体步骤
- 安装整体步骤
创建并配置 zoo.cfg 文件创建并配置 my.id 文件
- 选择安装目录
安装在 /opt/software/ 目录下注意安装过程中的空格问题
3.2
上传文件并解压
选择一台主机先配置(以下以
node01
进行配置),配置好后使用
scp
命令同步
使用
rz
或者
scp
方式把安装包上传到
/opt/software
目录下
解压安装包
cd /opt/software/rz
![](https://img-blog.csdnimg.cn/01ff2f1a253b48e1bb8e2c3e7c08588b.png)
- 解压安装包
tar -xvzf apache-zookeeper-3.7.0-bin.tar.gzrm -rf apache-zookeeper-3.7.0-bin.tar.gzmv apache-zookeeper-3.7.0-bin/ zookeeper-3.7.0
![](https://img-blog.csdnimg.cn/62b0760ae81143bf8a9b6847466032db.png)
- 在/opt/software/zookeeper-3.7.0目录下创建目录data用来存放ZK数据,此路径需要在coo.cfg配置 文件里面使用
cd /opt/software/zookeeper-3.7.0mkdir data
![](https://img-blog.csdnimg.cn/e9b7ebebc60445a9afca1c4d3f24b896.png)
3.3
创建并配置
zoo.cfg
文件
cd /opt/software/zookeeper-3.7.0/conf/ls
- 拷贝模板文件为zoo.cfg
cp zoo_sample.cfg zoo.cfg
- 修改配置zoo.cfg文件
zoo.cfg 配置文件中找到 dataDir 选项,修改成之前创建的 data 目录在 zoo.cfg 添加主机相关配置。服务节点的信息 , 主机编号为简单起见一般会用 1 、 2 、 3 这样的 方式来命名
vi zoo.cfg
#dataDir 配置是修改dataDir = /opt/software/zookeeper-3.7.0/data# 以下内容添加在文件末尾,需要注意配置后面不能有空格server .1 = node00:2888:3888server .2 = node01:2888:3888server .3 = node02:2888:3888
配置说明
tickTimeCS 通信心跳时间,单位毫秒。客户端与服务器或者服务器与服务器之间维持心跳,也就是每个 tickTime 时间就会发送一次心跳。通过心跳不仅能够用来监听机器的工作状态,还可以通过心跳来控制 Flower 跟 Leader 的通信时间。initLimit集群中的 follower 服务器 (F) 与 leader 服务器 (L) 之间初始连接时能容忍的最多心跳数,即 FL 连接超时时间。 10 表示 10 个心跳时间。syncLimit集群中 flower 服务器(F )跟 leader (L )服务器之间的请求和答应最多能容忍的心跳数。数据同步超时时间。dataDir该属性对应的目录是用来存放 myid 信息跟一些版本,日志,跟服务器唯一的 ID 信息等。clientPort客户端连接的接口,客户端连接 zookeeper 服务器的端口, zookeeper 会监听这个端口,接收客户端的请求访问!这个端口默认是 2181 。
![](https://img-blog.csdnimg.cn/55148b47f75d4e1a88b1a3a2c0f4fc3e.png)
3.4
创建并配置
myid
文件
在
cd /opt/software/zookeeper-3.7.0/data/
目录下创建
myid
文件
当前主机是
node00
,只需要配置
1
即可。
cd /opt/software/zookeeper-3.7.0/data/vi myid1
![](https://img-blog.csdnimg.cn/b30fa18b4ba648789f7f85d0e9ea5406.png)
3.5
同步
ZK
以上就完成了
node00
的配置,此时需要把
node01
的
ZK
同步给
node02
和
node03
同步使用
SCP
命令
同步完成后确认
node01
、
node02
机器上文件已经同步成功
cd /opt/softwarescp -r zookeeper-3.7.0/ node02: $PWDscp -r zookeeper-3.7.0/ node01: $PWD
![](https://img-blog.csdnimg.cn/6ce710b23f24432493192c5e0307f2b0.png)
3.6
修改
node01
和
node02
修改
node02
和
node03
的配置
myid
vi /opt/software/zookeeper-3.7.0/data/myid
3.7
添加环境变量配置
添加
ZooKeeper
环境变量
vi /etc/profileexport ZOOKEEPER_HOME = /opt/software/zookeeper-3.7.0export PATH = ${PATH} : ${ZOOKEEPER_HOME} /bin
![](https://img-blog.csdnimg.cn/61727898d10b4ce78a5b8f0c36d7fd16.png)
使得环境变量配置文件生效
source /etc/profile
![](https://img-blog.csdnimg.cn/97a7496235fc421c98b5030f6099af3e.png)
4
启动
ZK
服务
4.1
服务器端脚本
服务端命令是通过
zkServer.sh
脚本来完成的,后面跟不同的参数可以实现不同的功能,
zkServer.sh start ,其中 start 参数可以实现启动 ZooKeeper 服务的功能。zkServer.sh status ,通过 status 参数可以查看 ZooKeeper 启动后服务的状态,即在集群中是 leader 节点还是 follower 节点。zkServer.sh stop ,通过 stop 参数可以停止 ZooKeeper 服务。z
4.2
启动服务
3
台虚拟机同时执行
ZK
启动命令
zkServer.sh start
4.2
验证是否启动成功
jps
命令
查看 3 台机器是否都有 QuorumPeerMain 进程![]()
zkServer.sh status
![](https://img-blog.csdnimg.cn/a812d22777dc45489ebffa8788e2d23f.png)
查看
ZK
状态,其中有一台是
leader
,
2
台是
follower
4.3
服务启动失败解决
zkServer.sh startzkServer.sh status
4.3.2
端口被占用错误
错误情况Client port found: 2181. Client address: localhost.原因分析8080 端口,可能是和 tomcat 抢占端口(无 tomcat 安装,此原因可排除)2181 端口被占用
解决方案 1yum install lsoflsof -i :2181 # 假设查询到的端口为 20974kill -9 xxx #xxx 的位置就填
解决方案 2yum -y install net-toolsnetstat -lnp |grep 2181 # 假设查询到的端口为 13681kill -9 xxx #xxx 的位置就填 13681