1、Zookeeper介绍
Zookeeper是一个开源分布式协调服务,其独特的Leader-Follower集群结构,很好的解决了分布式单点问题。目前主要用于诸如:统一命名服务、配置管理、锁服务、集群管理等场景。大数据应用中主要使用Zookeeper的集群管理功能。在这里使用Zookeeper配合实现Hadoop集群的高可用(HA)。
任务的主要内容为在slave1、slave2、slave3三个从节点上安装Zookeeper,分别启动Zookeeper并验证可用性。
2、Zookeeper集群安装配置过程:
- 准备Zookeeper安装包
- slave1节点解压安装包
- 配置用户环境变量
- 配置Zookeeper配置文件
- 创建zookeeper的数据存储目录和日志存储目录
- 在data目录中创建一个文件myid
- 修改zookeeper的日志输出路径
- 分发Zookeeper到其他节点
- 修改myid文件,保证每台节点的myid唯一
- Zookeeper集群启动,测试
例如:在Zookeeper的某节点上执行【 # zkServer.sh status 】命令。
任务实现
1. 安装配置Zookeeper(slave1、slave2、slave3)
本集群使用zookeeper-3.4.5版本,该安装包已经放在slave1节点的/home/software目录下。首先在slave1节点安装Zookeeper,方法如下:
- 在slave1节点中解压zookeeper安装包
[root@slave1 ~]# tar -zxvf /home/software/zookeeper-3.4.5.tar.gz -C /home/
2. 配置用户环境变量
- 使用【# vi /etc/profile】打开配置文件,增加如下内容:
export ZOOKEEPER_HOME=/home/zookeeper-3.4.5
export PATH=$PATH:$ZOOKEEPER_HOME/bin
- 使修改的环境变量生效
[root@slave1 ~]# source /etc/profile
3. 配置Zookeeper
- 在slave1节点上,修改zookeeper的配置文件
[root@slave1 ~]# cd /home/zookeeper-3.4.5/conf/
[root@slave1 conf]# cp zoo_sample.cfg zoo.cfg
[root@slave1 conf]# vi zoo.cfg
- 修改如下内容(可将原文件中的所有内容进行覆盖):
# 客户端心跳时间(毫秒)
tickTime=2000
# 允许心跳间隔的最大时间
initLimit=10
# 同步时限
syncLimit=5
# 数据存储目录
dataDir=/home/zookeeper-3.4.5/data
# 数据日志存储目录
dataLogDir=/home/zookeeper-3.4.5/data/logs
# 端口号
clientPort=2181
# 集群节点和服务端口配置
server.1=slave1:2888:3888
server.2=slave2:2888:3888
server.3=slave3:2888:3888
# 以下为优化配置
# 服务器最大连接数,默认为10,改为0表示无限制
maxClientCnxns=0
# 快照数
autopurge.snapRetainCount=3
# 快照清理时间,默认为0
autopurge.purgeInterval=1
- 创建zookeeper的数据存储目录和日志存储目录
[root@slave1 conf]# mkdir -p /home/zookeeper-3.4.5/data
[root@slave1 conf]# mkdir -p /home/zookeeper-3.4.5/data/logs
- 在/home/zookeeper-3.4.5/data目录中创建一个文件myid,输入内容为1
[root@slave1 conf]# echo "1" >> /home/zookeeper-3.4.5/data/myid
- 修改zookeeper的日志输出路径
[root@slave1 conf]# vi /home/zookeeper-3.4.5/bin/zkEnv.sh
- 修改内容如下(在文件中找到对应的内容进行修改):
if [ "x${ZOO_LOG_DIR}" = "x" ]
then
ZOO_LOG_DIR="$ZOOKEEPER_HOME/data/logs"
fi
if [ "x${ZOO_LOG4J_PROP}" = "x" ]
then
ZOO_LOG4J_PROP="INFO,ROLLINGFILE"
fi
- 修改zookeeper的日志配置文件
[root@slave1 conf]# vi /home/zookeeper-3.4.5/conf/log4j.properties
- 修改内容如下(在文件中找到对应的内容进行修改):
zookeeper.root.logger=INFO,ROLLINGFILE
- 在slave1中将zookeeper目录复制到其它节点
[root@slave1 conf]# scp -rq /home/zookeeper-3.4.5 slave2:/home/
[root@slave1 conf]# scp -rq /home/zookeeper-3.4.5 slave3:/home/
- 在slave2中使用vi命令修改data目录中的myid文件
[root@slave2 ~]# vi /home/zookeeper-3.4.5/data/myid
- 将其文件中的1删除,并修改为2
2
- 在slave3中使用vi命令修改data目录中的myid文件
[root@slave3 ~]# vi /home/zookeeper-3.4.5/data/myid
- 将其文件中的1删除,并修改为3
3
- 为保证所有节点的/etc/profile文件内容一致,避免出现缺少环境变量的问题,现将slave1上的/etc/profile拷贝到其它所有节点上
[root@slave1 ~]# scp -rq /etc/profile master1:/etc/
[root@slave1 ~]# scp -rq /etc/profile master2:/etc/
[root@slave1 ~]# scp -rq /etc/profile slave2:/etc/
[root@slave1 ~]# scp -rq /etc/profile slave3:/etc/
- 文件拷贝完成后,使用【# source /etc/profile】使文件生效,例如:
注意:在所有节点上执行【# source /etc/profile】命令。
4. Zookeeper启动,测试
- 分别在slave1、slave2、slave3节点中启动Zookeeper集群
# zkServer.sh start
- 确保slave1、slave2、slave3节点上的Zookeeper的运行状态均为STARTED。
- 在slave1、slave2、slave3节点上分别启动Zookeeper后,在三个节点上再分别使用如下命令,查看Zookeeper的运行状态,是否已经启动,以及是leader还是follwer(注意:每个人的环境可能存在差异,所以leader和follwer所在的节点也可能会不同):
# zkServer.sh status
- 例如:在slave1中zookeeper的状态为Follower
- 在slave2中zookeeper的状态为Leader
- 在slave3中zookeeper的状态为Follower
- 当所有节点中都可检查到对应的角色信息时,则Zookeeper集群启动成功,Zookeeper集群角色分为Leader和Follower,集群会根据Zookeeper的选举机制来选举哪台节点为Leader角色
- 如果要关闭Zookeeper集群,则需要在slave1、slave2、slave3三台节点中分别执行如下命令,即可关闭
# zkServer.sh stop