zookeeper的概念、集群部署、使用

  • 一、概念
  • 二、集群部署
  • 2.1 下载
  • 2.2 安装
  • 三、基本操作
  • 3.1 zookeeper的基本操作
  • 3.2 演示
  • 3.3 客户端工具ZooInspector


一、概念

Zookeeper是一个开源的分布式协调服务框架,主要是用来解决分布式应用中经常遇到的一些数据管理问题,如:统一命名服务状态同步服务集群管理分布式应用配置项的管理等。

ZooKeeper的设计目标是将那些复杂且容易出错的分布式一致性服务封装起来,构成一个高效可靠的原语集,并以一系列简单易用的接口提供给用户使用。

zookeeper=文件系统+通知机制

二、集群部署

集群模式, 是指在多台机器中分别启动1个zookeeper进程, 组成的集群。通常zk集群的安装节点数为奇数,取3,5,7等等,以下以3台主机为例。

2.1 下载

下载官网 下载完成后把安装包上传到虚拟机hadoop100,上传方法请参考教程中的2.1 上传安装包

注意下载bin包:

java zookeeper如何实现集群 zookeeper集群使用_zookeeper

2.2 安装

安装的前提:确认关闭防火墙

java zookeeper如何实现集群 zookeeper集群使用_hadoop_02

进入到安装目录:cd /usr/local/src 1.解压:tar zxvf apache-zookeeper-3.5.5-bin.tar.gz 修改名字: mv apache-zookeeper-3.5.5-bin zookeeper-3.5.5(这一步不是必要的,为了配置环境变量方便)
2.配置zookeeper的环境变量
vi ~/.bash_profile 添加如下内容:

ZOOKEEPER_HOME=/usr/local/src/zookeeper-3.5.5
PATH=$PATH:$HOME/bin:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$HIVE_HOME/bin:$ZOOKEEPER_HOME/bin:
export JAVA_HOME HADOOP_HOME CLASSPATH HIVE_HOME ZOOKEEPER_HOME PATH

java zookeeper如何实现集群 zookeeper集群使用_big data_03


使环境变量生效:source ~/.bash_profile3.在zookeeper的跟目录下创建两个文件夹data和datalog

这两个路径主要是用来存放zk的数据以及日志的(待会需要手动在配置文件中设置)

在data目录下创建一个myid的文件,里面的值可以给个任意的值,假设写的值是101,主要用于集群中区分某个势力

java zookeeper如何实现集群 zookeeper集群使用_hadoop_04


4.拷贝配置文件 cp zoo_sample.cfg zoo.cfg 修改内容:

dataDir=/usr/local/src/zookeeper-3.5.5/data
dataLogDir=/usr/local/src/zookeeper-3.5.5/datalog
server.101=192.168.1.101:2888:3888
server.102=192.168.1.102:2888:3888
server.103=192.168.1.103:2888:3888

注意:
zoo.cfg中的 server.101中的101必须与myid中的101相对应

参数说明:
1、tickTime=2000
zookeeper中使用的基本时间单位, 毫秒值.
2、initLimit=10
zookeeper集群中的包含多台server, 其中一台为leader, 集群中其余的server为follower.
initLimit参数配置初始化连接时, follower和leader之间的最长心跳时间。
此时该参数设置为10, 说明时间限制为10倍tickTime, 即10*2000=20000ms=20s.
3、syncLimit=5
该参数配置leader和follower之间发送消息, 请求和应答的最大时间长度.
此时该参数设置为5, 说明时间限制为5倍tickTime, 即10000ms.
4、dataDir=/usr/local/soft/zookeeper3.5.5/data
数据目录. 可以是任意目录.
5、dataLogDir=/usr/local/soft/zookeeper3.5.5/datalog
log目录, 同样可以是任意目录. 如果没有设置该参数, 将使用和dataDir相同的设置.
6、clientPort=2181
监听client连接的端口号,通过ip:2181端口进入zookeeper的文件系统
7、server.101=192.1.101:2888:3888
2888是leader与跟随者通信的接口,当leader挂掉后跟随者通过3888通信选举出新leader

5.集群拷贝
把配置好的zookeeper拷贝到其他节点

scp -r zookeeper-3.5.5 root@hadoop102:/usr/local/src/
scp -r zookeeper-3.5.5 root@hadoop103:/usr/local/src/

并配置其他节点zookeeper的环境变量(把hadoop101的bash_profile同步到其他节点)

scp ~/.bash_profile root@hadoop102:~/
scp ~/.bash_profile root@hadoop103:~/

切换到hadoop102、hadoop103使环境变量生效:source ~/.bash_profile

修改hadoop102、hadoop103节点data/myid,必须与zoo.cfg中的配置保持一致:

server.101=192.168.1.101:2888:3888
server.102=192.168.1.102:2888:3888
server.103=192.168.1.103:2888:3888

所以hadoop102的myid修改为102,hadoop103的myid修改为103.

6.启动服务

在每个节点启动zookeeper服务:zkServer.sh start 查看每个节点zookeeper的角色:zkServer.sh status

java zookeeper如何实现集群 zookeeper集群使用_bash_05


从图中可看到启动成功,多出了QuorumPeerMain进程,随机选出的leaer是hadoop102,其他两节点是follower。7.客户端连接

在任一个节点执行:zkCli.sh -server 192.168.1.101:2181进行连接,其中192.168.1.101是所在节点的ip。

安装成功会出现一下界面:

java zookeeper如何实现集群 zookeeper集群使用_zookeeper_06

三、基本操作

3.1 zookeeper的基本操作

java zookeeper如何实现集群 zookeeper集群使用_bash_07

3.2 演示

注意:里面的节点不是文件,是为了记忆的代号。

java zookeeper如何实现集群 zookeeper集群使用_hadoop_08

3.3 客户端工具ZooInspector

下载:

https://issues.apache.org/jira/secure/attachment/12436620/ZooInspector.zip 运行:

解压缩后双击打开ZooInspector\build\zookeeper-dev-ZooInspector.jar后会出现以下界面, 把localhost改成任意一个节点的ip,其他不用改。

java zookeeper如何实现集群 zookeeper集群使用_hadoop_09

以下是连接成功画面,可看到刚才创建的zk节点和zk1节点,它们的value是不一样的。

java zookeeper如何实现集群 zookeeper集群使用_bash_10