因为工作需要,最近开始接触大数据技术,为了充分了解大数据,准备搭建一个大数据集群。出于对大数据处理流程和需要部署的相关组件的了解,决定跳出一般大数据学习思维,先将集群资源管理组件搭建起来,然后以资源管理组件为基础慢慢填充集群内容,所以搭建Zookeeper作为大数据学习的第一步。
一、下载Zookeeper
官网下载地址:http://mirror.bit.edu.cn/apache/zookeeper/
因为不了解各个版本的区别,看网上大多都是用的3.4.14版本,考虑到遇到问题好找解决方案,所以决定用3.4.14版本。
由于zookeeper集群的运行需要Java运行环境,所以安装Zookeeper前需要首先安装 JDK,关于安装步骤,不再此处具体描述。
二、单机部署Zookeeper
1.解压Zookeeper-3.4.14压缩包
在 /usr/local 目录下新建 Zookeeper目录,然后将 zookeeper 压缩文件上传到该目录中,然后通过如下命令解压。
tar -zxvf zookeeper-3.4.14.tar.gz
2. 配置环境变量
vim /etc/profile
export ZOOKEEPER_HOME=/usr/app/zookeeper-3.4.14
export PATH=$ZOOKEEPER_HOME/bin:$PATH
使得配置的环境变量生效:
source /etc/profile
3.修改配置文件zoo.cfg
将zookeeper压缩文件解压后,进入到 conf 目录,将 zoo_sample.cfg 文件复制并重命名为 zoo.cfg 文件。
cp zoo_sample.cfg zoo.cfg
然后通过 vim zoo.cfg 命令对该文件进行修改:
上面红色框住的内容即是我们修改的内容:
(1)tickTime:基本事件单元,这个时间是作为Zookeeper服务器之间或客户端与服务器之间维持心跳的时间间隔,每隔tickTime时间就会发送一个心跳;最小 的session过期时间为2倍tickTime
(2)dataDir:存储内存中数据库快照的位置,除非另有说明,否则指向数据库更新的事务日志。注意:应该谨慎的选择日志存放的位置,使用专用的日志存储设备能够大大提高系统的性能,如果将日志存储在比较繁忙的存储设备上,那么将会很大程度上影响系统性能。
(3)client:监听客户端连接的端口。
(4)initLimit:允许follower连接并同步到Leader的初始化连接时间,以tickTime为单位。当初始化连接时间超过该值,则表示连接失败。
(5)syncLimit:表示Leader与Follower之间发送消息时,请求和应答时间长度。如果follower在设置时间内不能与leader通信,那么此follower将会被丢弃。
4.启动
由于已经配置过环境变量,直接使用下面命令启动即可:
zkServer.sh start
5.验证
使用 JPS 验证进程是否已经启动,出现 QuorumPeerMain
则代表启动成功。
三、集群部署Zookeeper
为保证集群高可用,Zookeeper 集群的节点数最好是奇数,最少有三个节点,所以这里演示搭建一个三个节点的集群。这里我使用三台主机进行搭建,主机名分别为 master,hadoop1,hadoop2。
1.修改zoo.cfg配置
# server.1 这个1是服务器的标识,可以是任意有效数字,标识这是第几个服务器节点,这个标识要写到dataDir目录下面myid文件里
# 指名集群间通讯端口和选举端口
server.1=master:2288:3388
server.2=hadoop1:2288:3388
server.3=hadoop2:2288:3388
2.标识节点
分别在三台主机的 dataDir
目录下新建 myid
文件,并写入对应的节点标识。Zookeeper 集群通过 myid
文件识别集群节点,并通过上文配置的节点通信端口和选举端口来进行节点通信,选举出 Leader 节点。
创建存储目录:
# 三台主机均执行该命令
mkdir -vp /data/zookeeper/data/
创建并写入节点标识到 myid
文件:
# master主机
echo "1" > /data/zookeeper/data/myid
# hadoop1主机
echo "2" > /data/zookeeper/data/myid
# hadoop2主机
echo "3" > /data/zookeeper/data/myid
3.启动集群
分别在三台主机上,执行如下命令启动服务:
# 此命令可以在任何目录下执行,但是建议还是在zookeeper安装目录下,因为执行下面命令时会在当前目录下生成一个zookeeper.out文件,该文件为日志文件,可以根据文件内容查看启动运行过程,方便问题查找。
zkServer.sh start
4.集群验证
分别在三台主机上,执行如下命令验证启动是否成功。
zkServer.sh status
查看集群各个节点状态。如图所示:三个节点进程均启动成功,并且 master 为 leader 节点,hadoop1 和 hadoop2 为 follower 节点。
.四、遇到的问题及解决方案
搭建过程中遇到的主要问题就是三个节点可以单独启动,但是无法实现通信,无法通信便无法选出leader。针对搭建过程中出现的问题,最有效的解决方法就是查看日志文件。zookeeper日志文件目录在dataDir配置的目录下,文件名为:zookeeper.out。通过查看日志来解决相应的问题。
.针对我遇到的zookeeper集群出现 Error contacting service. It is probably not running 问题主要是因为防火墙阻止了通讯,只要关闭防火墙就可以了。
firewalld 和IPtables的关闭方法:
firewalld(一般是centos7以及以上):
临时关闭: systemctl stop firewalld.service
查看状态:systemctl status firewalld.service
开机禁用(需要重启生效):systemctl disable firewalld.service
IPtables(centos6之前的):
暂时关闭防火墙:(立即生效,开机重启,会重新打开)
service iptables stop
永久关闭防火墙(关机重启才会生效)
chkconfig iptables off
如果是centos7里面,那就要换一种写法了:
systemctl stop iptables.service 其他一样的