手把手实战:CentOS 7 上部署 ZooKeeper 完全分布式集群

一、集群规划

节点IP 角色 数据目录 服务端口 选举端口 通信端口
192.168.220.30 Leader $ZK_HOME/zkdata 2181 3888 2888
192.168.220.31 Follower $ZK_HOME/zkdata 2181 3888 2888
192.168.220.32 Follower $ZK_HOME/zkdata 2181 3888 2888

二、基础环境准备

1.安装包:apache-zookeeper-3.5.10-bin.tar.gz

2.关闭防火墙、安装JDK、配置hosts解析

3.SSH免密登录

三、Zookeeper安装配置

1.上传Zookeeper安装包

将本地计算机中准备好的 ZooKeeper 安装包 apache-zookeeper-3.5.10-bin.tar.gz 上传到虚拟机hadoop101/opt/software目录。

2.安装Zookeeper

以解压的方式将 ZooKeeper 安装到虚拟机hadoop101/opt/apps目录。

[root@hadoop101 software]# tar zxvf apache-zookeeper-3.5.10-bin.tar.gz -C /opt/apps/

将 ZooKeeper 安装目录重命名为zookeeper-3.5.10

[root@hadoop101 software]# cd /opt/apps/
[root@hadoop101 apps]# ls
apache-zookeeper-3.5.10-bin  hadoop-2.7.6  jdk1.8.0_202
[root@hadoop101 apps]# mv apache-zookeeper-3.5.10-bin zookeeper-3.5.10

3.修改Zookeeper配置文件

进入虚拟机 hadoop101/opt/apps/zookeeper-3.5.10/conf 目录,通过复制该目录中 ZooKeeper 提供的模板文件 zoo_sample.cfg,创建ZooKeeper配置文件 zoo.cfg

[root@hadoop101 apps]# cd zookeeper-3.5.10/conf/
[root@hadoop101 conf]# ls
configuration.xsl  log4j.properties  zoo_sample.cfg
[root@hadoop101 conf]# cp zoo_sample.cfg zoo.cfg

执行 vi zoo.cfg 命令编辑配置文件 zoo.cfg 并修改其内容,配置数据持久化目录和 ZooKeeper 集群中每个节点的地址。

[root@hadoop101 conf]# vi zoo.cfg
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/opt/apps/zookeeper-3.5.10/zkdata
clientPort=2181
server.1=hadoop101:2888:3888
server.2=hadoop102:2888:3888
server.3=hadoop103:2888:3888

zoo.cfg文件配置

4.创建数据持久化目录

在虚拟机 hadoop101 创建数据持久化目录 /opt/apps/zookeeper-3.5.10/zkdata

[root@hadoop101 conf]# cd ..
[root@hadoop101 zookeeper-3.5.10]# mkdir zkdata
[root@hadoop101 zookeeper-3.5.10]# ls
bin  conf  docs  lib  LICENSE.txt  NOTICE.txt  README.md  README_packaging.txt  zkdata

5.创建myid文件

myid 文件用于标识 ZooKeeper 集群中每个节点的编号,该文件需要存放在数据持久化目录,编号的内容与文件 zoo.cfg 中指定每个节点的编号一致。如在配置文件 zoo.cfg 指定 ZooKeeper 集群中编号为1的节点运行在虚拟机 hadoop101,那么需要在虚拟机 hadoop101 中的数据持久化目录创建myid文件,并在该文件中写入值1。

[root@hadoop101 zookeeper-3.5.10]# cd zkdata/
[root@hadoop101 zkdata]# echo 1 > ./myid

6.配置Zookeeper系统环境变量

在虚拟机 hadoop101 执行 vi /etc/profile 命令编辑系统环境变量文件 profile,在该文件的底部添加如下内容。

[root@hadoop101 zookeeper-3.5.10]# vi /etc/profile
# ZK_HOME
export ZK_HOME=/opt/apps/zookeeper-3.5.10
export PATH=$PATH:$ZK_HOME/bin

为了让系统环境变量文件中添加的内容生效,执行 source /etc/profile 命令初始化系统环境变量使添加的ZooKeeper系统环境变量生效。

[root@hadoop101 zookeeper-3.5.10]# source /etc/profile
注意需要在 hadoop102、hadoop103 两个节点上配置系统环境变量,并立即生效。

7.分发Zookeeper安装目录至其他主机

通过scp命令将虚拟机 hadoop101 的ZooKeeper安装目录分发至虚拟机 hadoop102hadoop103/opt/apps目录。

[root@hadoop101 zookeeper-3.5.10]# cd ..
[root@hadoop101 apps]# scp -r zookeeper-3.5.10 hadoop102:/opt/apps/		# 分发至虚拟机hadoop102
[root@hadoop101 apps]# scp -r zookeeper-3.5.10 hadoop103:/opt/apps/		# 分发至虚拟机hadoop103

8.修改其他主机myid文件

分别将虚拟机hadoop102hadoop103myid 文件的内容修改为23

[root@hadoop102 ~]# echo 2 > /opt/apps/zookeeper-3.5.10/zkdata/myid		# 在虚拟机hadoop102执行
[root@hadoop103 ~]# echo 3 > /opt/apps/zookeeper-3.5.10/zkdata/myid		# 在虚拟机hadoop103执行

9.启动Zookeeper

启动ZooKeeper时,需要在ZooKeeper集群的每个节点启动ZooKeeper服务

[root@hadoop101 zookeeper-3.5.10]# zkServer.sh start		# 在虚拟机hadoop101执行
[root@hadoop102 zookeeper-3.5.10]# zkServer.sh start		# 在虚拟机hadoop102执行
[root@hadoop103 zookeeper-3.5.10]# zkServer.sh start		# 在虚拟机hadoop103执行

启动zookeeper

10.查看Zookeeper运行状态

查看ZooKeeper运行状态时,需要查看ZooKeeper集群的每个节点中ZooKeeper服务的运行状态。

[root@hadoop101 zookeeper-3.5.10]# zkServer.sh status		# 在虚拟机hadoop101执行
[root@hadoop102 zookeeper-3.5.10]# zkServer.sh status		# 在虚拟机hadoop102执行
[root@hadoop103 zookeeper-3.5.10]# zkServer.sh status		# 在虚拟机hadoop103执行

查看zookeeper状态

四、常见故障排查

1.无法选举Leader

# 检查各节点 myid 文件是否匹配 server.x 配置
# 检查3888端口连通性:nc -vz zk-node1 3888

2.数据目录权限问题

chown -R zookeeper:zookeeper /data/zk /opt/zookeeper

3.Zxid冲突

# 清空dataDir目录下version-2日志(谨慎操作!)