Apache ZooKeeper是Apache软件基金会的一个开源分布式软件项目,大数据集群服务器的管理者协调者。
简言:ZK就是一个管理多个服务(集群分布式环境下)的通知机制 Watcher+文件系统
ZNode 文件系统:保存少量,服务器相关的配置文件信息。
Watcher 监听通知机制:注册监听服务器的上下线以及配置信息变更。
特点
- 全局数据一致性:当客户端(client)对zookeeper集群中的数据进行读取时,无论从哪个节点进行读取,所获得的数据都是一致的。
- 半数机制,动态选举:zookeeper集群的运行遵循着半数机制(N=2F+1),即只要一半的服务器节点正常运行,那么zookeeper就可以正常的运转;zookeeper集群是一主(leader)多从(follower)的架构,其主节点有可能是任何一台机器,通过选举完成主节点的确认。
- 数据实时性:由多台服务器构成的zookeeper集群,在数据被写入或者更新时,客户端在一定的时间范围内(极短的时间)可以实时获取到最新的数据。
集群安装
1.准备三台服务器
(hadoop11/hadoop12/hadoop13)
安装环境
zookeeper3.4.6
hadoop3.1.4
jdk8
centOS7
0. 设置ip
1. 安装jdk
2. 配置java环境变量
3. 关闭防火墙
4. 设置hostname
5. 设置hosts(3台彼此之间集群互通)
2.安装
# 1. 解压
[root@hadoop11 modules]# tar zxvf zookeeper-3.4.6.tar.gz -C /opt/installs/
# 2. 修改文件名
[root@hadoop11 installs]# mv zookeeper-3.4.6/ zookeeper3.4.6
# 3. 编辑环境变量配置文件
[root@hadoop11 zookeeper3.4.6]# vim /etc/profile
# ------------------下面是添加的内容------
# zookeeper
export ZOOKEEPER_HOME=/opt/installs/zookeeper3.4.6
export PATH=$PATH:$ZOOKEEPER_HOME/bin:
# 4. 重新加载profile配置
source /etc/profile
3.标记主机号
# 1. zk目录下新建一个data目录
作为后续zk的数据存放位置
[root@hadoop11 zookeeper3.4.6]# mkdir /opt/installs/zookeeper3.4.6/data
# 2. 在data下,新建一个myid文件。
[root@hadoop11 zookeeper3.4.6]# cd data
# 3. 里面内容填写当前zk节点的编号
[root@hadoop11 data]# echo 11 > myid
4.初始化配置文件
# 1. 拷贝zoo.cfg文件
[root@hadoop11 conf]# cp zoo_sample.cfg zoo.cfg
# 2. 配置zoo.cfg
#-------------以下是内容--------------
# 通信心跳时间, ,Zookeeper服务器与客户端心跳时间,单位毫秒
tickTime=2000
#Leader和Follower初始连接时能容忍的最多心跳数(tickTime的数量)
initLimit=10
# Leader和Follower之间通信时间如果超过syncLimit * tickTime,Leader认为Follwer死掉,从服务器列表中删除Follwer。
syncLimit=5
# zk的数据存储位置
# 注意:默认的tmp目录,容易被Linux系统定期删除,所以一般不用默认的tmp目录。
dataDir=/opt/installs/zookeeper3.4.6/data/
# zk的客户端访问zk的端口号
clientPort=2181
# server.myid=zk的ip:2888:3888
# 2888(内部数据通信的端口) #3888(选举投票使用的端口)
server.11=hadoop11:2888:3888
server.12=hadoop12:2888:3888
server.13=hadoop13:2888:3888
中文注释最好也删掉
5.同步配置文件
# 分发资源
[root@hadoop11 conf]# myscp.sh /opt/installs/zookeeper3.4.6
[root@hadoop11 conf]# myscp.sh /etc/profile
# source环境变量
[root@hadoop11 conf]# xcall.sh source /etc/profile
# 修改hadoop12和hadoop13的myid
echo 12 > myid
echo 13 > myid
# 先修改myid之后,在启动zookeeper
6.zk命令
# 1. 启动
zkServer.sh start
[root@hadoop11 data]# jps
2610 QuorumPeerMain # zk节点的进程。
3500 Jps
# 2. 查看状态
zkServer.sh status
集群环境下: Leader Follower
# 3. 停止
zkServer.sh stop
# 4. 客户端
zkCli.sh 登录本机的zk
zkCli.sh -server ip:2181 登录指定ip的zk主机
[root@hadoop11 ~]# xcall.sh zkServer.sh start
----------------- hadoop11 -----------------
JMX enabled by default
Using config: /opt/installs/zookeeper3.4.6/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
----------------- hadoop12 -----------------
JMX enabled by default
Using config: /opt/installs/zookeeper3.4.6/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
----------------- hadoop13 -----------------
JMX enabled by default
Using config: /opt/installs/zookeeper3.4.6/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
[root@hadoop11 ~]# xcall.sh zkServer.sh status
----------------- hadoop11 -----------------
JMX enabled by default
Using config: /opt/installs/zookeeper3.4.6/bin/../conf/zoo.cfg
Mode: follower
----------------- hadoop12 -----------------
JMX enabled by default
Using config: /opt/installs/zookeeper3.4.6/bin/../conf/zoo.cfg
Mode: leader
----------------- hadoop13 -----------------
JMX enabled by default
Using config: /opt/installs/zookeeper3.4.6/bin/../conf/zoo.cfg
Mode: follower
# 注意!需要启动所有hadoop上的zk服务,否则会在状态里显示Error,如下报错
[root@hadoop11 conf]# zkServer.sh status
JMX enabled by default
Using config: /opt/installs/zookeeper3.4.6/bin/../conf/zoo.cfg
Error contacting service. It is probably not running.