为保证集群高可用,Zookeeper 集群的节点数最好是奇数,最少有三个节点,所以这里演示搭建一个三个节点的集群。这里我使用三台主机进行搭建,主机名分别为 hadoop001,hadoop002、hadoop003。
1. 前期准备
主机名与ip地址映射,随后的配置文件内会使用主机名来映射ip地址,每台服务器都要进行设置:
[root@hadoop01 ~]# vim /etc/hosts xxx.xx.x.x hadoop01 hadoop01 xxx.xx.x.x hadoop02 hadoop02 xxx.xx.x.x hadoop03 hadoop03 # hosts生效 [root@hadoop01 ~]# /etc/init.d/network restart Restarting network (via systemctl): [ OK ]
安装jdk,zookeeper也需要运行在Java环境下:
[root@hadoop01 logs]# java -version java version "1.8.0_251" Java(TM) SE Runtime Environment (build 1.8.0_251-b08) Java HotSpot(TM) 64-Bit Server VM (build 25.251-b08, mixed mode)
关闭防火墙【所有节点】:
# 查看防火墙状态 [root@hadoop01 logs]# firewall-cmd --state not running # 如果是开启状态,关闭防火墙: [root@hadoop01 logs]# systemctl stop firewalld.service
2. 安装配置
- 在安装包所在文件夹下解压并移动到 /usr/local/ 文件夹下
tar -zxvf apache-zookeeper-3.6.0-bin.tar.gz mv ./apache-zookeeper-3.6.0-bin/ /usr/local/zookeeper
- 配置环境变量
配置环境变量的方法比较多,这里统一将环境变量放在 /etc/profile.d/my_env.sh 内。
# 配置环境变量: vim /etc/profile.d/my_env.sh # 添加 ZOOKEEPER_HOME 和 PATH export ZOOKEEPER_HOME=/usr/local/zookeeper export PATH=$PATH:$ZOOKEEPER_HOME/bin # 使得配置的环境变量立即生效: # 首先是要赋权限【只操作一次就行】 chmod +x /etc/profile.d/my_env.sh source /etc/profile.d/my_env.sh
- 修改 zoo.cfg 配置【集群版有两个不同的地方:一个是zoo.cfg配置内容,另一个是myid】
进入${ZOOKEEPER_HOME}/conf/ 目录下,拷贝配置样本并进行修改:
[root@hadoop01 conf]# cp zoo_sample.cfg zoo.cfg
指定数据存储目录和日志文件目录(目录不用预先创建,程序会自动创建),修改后完整配置如下:
root@hadoop01 conf]# vim zoo.cfg # 无关注释不再贴出 # 主要是配置这两个文件夹【默认也是可以的 把数据和日志文件夹都放在zookeep下 易于远程拷贝】 dataDir=/usr/local/zookeeper/data dataLogDir=/usr/local/zookeeper/log # 以下是默认值 tickTime=2000 initLimit=10 syncLimit=5 clientPort=2181 # 以下是集群版配置信息【不同点一】 server.1=hadoop001:2287:3387 server.2=hadoop002:2287:3387 server.3=hadoop003:2287:3387
以上安装与单机版一致,详情可以参考单机版安装指南。单机版的参数说明不再赘述,解释以下集群配置:server.A=B:C:D
- A:是服务器的标识,可以是任意有效数字,标识这是第几个服务器节点【影响集群首次启动的leader选举】;
- B:是A对应的服务器 ip 地址;
- C:Zookeeper服务器之间的通信端口;
- D:Leader选举的端口。
以上是集群版单机安装的内容,之后使用 scp 命令将安装包分发到其他两台服务器上:
# 将安装包分发到hadoop002 scp -r /usr/local/zookeeper/ hadoop002:/usr/local/ # 将安装包分发到hadoop003 scp -r /usr/local/zookeeper/ hadoop003:/usr/local/
【不同点二】集群版要在${dataDir}目录下添加 myid 文件
Zookeeper 集群通过myid 文件识别集群节点,并通过上文配置的节点通信端口和选举端口来进行节点通信,选举出Leader 节点。【标识要跟 zoo.cfg 文件保持一致】
# hadoop001主机 echo "1" > /usr/local/zookeeper/data/myid # hadoop002主机 echo "2" > /usr/local/zookeeper/data/myid # hadoop003主机 echo "3" > /usr/local/zookeeper/data/myid
3. 集群启动
分别在三台主机上,执行如下命令启动服务:
[root@hadoop01 hadoop]# zkServer.sh start ZooKeeper JMX enabled by default Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg Starting zookeeper ... STARTED
4. 集群验证
启动后使用 zkServer.sh status 查看集群各个节点状态。三个节点进程均启动成功,并且 hadoop002 为 leader 节点,hadoop001 和 hadoop003 为 follower 节点。