一:zookeeper安装介绍
1.因为是zookeeper也是用java实现的,所有要依赖jdk才能运行。所以单独安装时(如果集群上尚未安装jdk的话),要先安装JDK。需要JDK-linux版本
2.需要对应的zookeeper-linux版本安装包
3.zookeeper因为一般是非集群
尖叫提示:
zookeeper 是一个 java 应用框架,主要是起到分布式协调作用。在 hadoop中主要的运用是HA机制,即:HDFS HA机制和yarn HA机制的实现。HDFS HA 功能通过配置 Active/Standby 两个 nameNodes 实现在集群中对 NameNode 的热备来份解决上述问题。如果出现故障,如机器崩溃或机器需要升级维护,这时可通过此种方式将 NameNode 很快的切换到另外一台机器。其次 resourcemanager HA 机制。 HA 机制最重要的一点是:状态同步。所以某种程度来说,如果你不需要高可用,也可以不装zookeeper。当然kafaka集群是需要的。
二:单机安装zookeeper流程
一:准备工作
1.安装jdk (具体流程参考hdfs章节),配置环境变量
2.通过filezilla工具拷贝zookeeper到到linux系统下:/opt/softwares
3.修改tar包权限
chmod u+x zookeeper-3.4.10.tar.gz
4.解压到指定目
[admin@hadoop102 software]$ tar -zxvf zookeeper-3.4.10.tar.gz -C /opt/module/
二:配置修改
1. 将/opt/module/zookeeper-3.4.10/conf这个路径下的zoo_sample.cfg修改为zoo.cfg;
(mv 进入zoo.cfg文件:vim zoo.cf) 修改dataDir路径为
dataDir=/opt/module/zookeeper-3.4.10/data/zkData “data/zkData”这个路径可以自定义,但是myid要放在这个路径下。
在/opt/module/zookeeper-3.4.10/这个目录上创建data/zkData文件夹
mkdir -p data/zkData
2.操作zookeeper
(1)启动zookeeper
[admin@hadoop102 zookeeper-3.4.10]$ bin/zkServer.sh start
(2)查看进程是否启动
[admin@hadoop102 zookeeper-3.4.10]$ jps
4020 Jps
4001 QuorumPeerMain
(3)查看状态:
[admin@hadoop102 zookeeper-3.4.10]$ bin/zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /opt/module/zookeeper-3.4.10/bin/../conf/zoo.cfg
Mode: standalone
(4)启动客户端:
[admin@hadoop102 zookeeper-3.4.10]$ bin/zkCli.sh
(5)退出客户端:
[zk: localhost:2181(CONNECTED) 0] quit
(6)停止zookeeper
[admin@hadoop102 zookeeper-3.4.10]$ bin/zkServer.sh stop
二:分布式zookeeper集群的搭建
0)集群规划
因为zk的半数机制,至少要有三台节点。
在hadoop2、hadoop3和hadoop4三个节点上部署Zookeeper。通常的做法是先配置一台结点,配置完成后分发到其他结点上。因为分布式安装的结点的配置文件基本都是相同的。针对部分特殊文件在逐一修改。
1)解压安装
(1)解压zookeeper安装包到/opt/module/目录下
[admin@hadoop102 software]$ tar -zxvf zookeeper-3.4.10.tar.gz -C /opt/module/
(2)在/opt/module/zookeeper-3.4.10/这个目录下 创建data/zkData
mkdir -p data/zkData
(3)重命名/opt/module/zookeeper-3.4.10/conf这个目录下的zoo_sample.cfg为zoo.cfg
mv zoo_sample.cfg zoo.cfg
2)配置zoo.cfg文件
(1)具体配置
增加如下配置
#######################cluster##########################
server.2=hadoop102:2888:3888
server.3=hadoop103:2888:3888
server.4=hadoop104:2888:3888
(2)配置参数解读
Server.A=B:C:D。
A是一个数字,表示这个是第几号服务器;
B是这个服务器的ip地址;
C是这个服务器与集群中的Leader服务器交换信息的端口;
D是万一集群中的Leader服务器挂了,需要一个端口来重新进行选举,选出一个新的Leader,而这个端口就是用来执行选举时服务器相互通信的端口。
集群模式下配置一个文件myid,这个文件在dataDir目录下,这个文件里面有一个数据就是A的值,Zookeeper启动时读取此文件,拿到里面的数据与zoo.cfg里面的配置信息比较从而判断到底是哪个server。
3)集群操作
(1)在/opt/module/zookeeper-3.4.10/data/zkData目录下创建一个myid的文件
touch myid
添加myid文件,注意一定要在linux里面创建,在notepad++里面很可能乱码,notepad++编译没有
后缀名文件时候容易出现乱码。
(2)编辑myid文件
vi myid
在myid文件中,填写上面Server.A=B:C:D中的A代表的数字即可,即当前结点服务器的编号。每个结点的这个配置都不相同。
每台机器的myid就是自己的id.可以在一台主机配置完后分完到别的主机。
然后其余的再用自己的服务器对应的编号echo A > myid 覆盖之前的即可.
(3) 拷贝配置好的zookeeper到其他机器上
scp -r zookeeper-3.4.10/ root@hadoop3:/opt/module/
scp -r zookeeper-3.4.10/ root@hadoop4opt/module/
并分别修改myid文件中内容为3、4
(4) 分别启动zookeeper
[root@hadoop2 zookeeper-3.4.10]# bin/zkServer.sh start
[root@hadoop3 zookeeper-3.4.10]# bin/zkServer.sh start
[root@hadoop4 zookeeper-3.4.10]# bin/zkServer.sh start
(5)查看状态:启动成功后,如果状态不对,也是没有搭建成功的
[root@hadoop2 zookeeper-3.4.10]# cd
JMX enabled by default
Using config: /opt/module/zookeeper-3.4.10/bin/../conf/zoo.cfg
Mode: follower
[root@hadoop3 zookeeper-3.4.10]# bin/zkServer.sh status
JMX enabled by default
Using config: /opt/module/zookeeper-3.4.10/bin/../conf/zoo.cfg
Mode: leader
[root@hadoop4 zookeeper-3.4.5]# bin/zkServer.sh status
JMX enabled by default
Using config: /opt/module/zookeeper-3.4.10/bin/../conf/zoo.cfg
Mode: follower
补充:zookeeper配置文件conf/zoo.cfg中参数的解释
解读zoo.cfg 文件中参数含义
1)tickTime:通信心跳数,Zookeeper服务器心跳时间,单位毫秒
Zookeeper使用的基本时间,服务器之间或客户端与服务器之间维持心跳的时间间隔,也就是每个tickTime时间就会发送一个心跳,时间单位为毫秒。
它用于心跳机制,并且设置最小的session超时时间为两倍心跳时间。(session的最小超时时间是2*tickTime)
2)initLimit:LF初始通信时限
集群中的follower跟随者服务器(F)与leader领导者服务器(L)之间初始连接时能容忍的最多心跳数(tickTime的数量),用它来限定集群中的Zookeeper服务器连接到Leader的时限。
投票选举新leader的初始化时间
Follower在启动过程中,会从Leader同步所有最新数据,然后确定自己能够对外服务的起始状态。
Leader允许F在initLimit时间内完成这个工作。
3)syncLimit:LF同步通信时限
集群中Leader与Follower之间的最大响应时间单位,假如响应超过syncLimit * tickTime,
Leader认为Follwer死掉,从服务器列表中删除Follwer。
在运行过程中,Leader负责与ZK集群中所有机器进行通信,例如通过一些心跳检测机制,来检测机器的存活状态。
如果L发出心跳包在syncLimit之后,还没有从F那收到响应,那么就认为这个F已经不在线了。
4)dataDir:数据文件目录+数据持久化路径
保存内存数据库快照信息的位置,如果没有其他说明,更新的事务日志也保存到数据库。
5)clientPort:客户端连接端口2181
监听客户端连接的端口