zk介绍
ZooKeeper是一个分布式开源框架,提供了协调分布式应用的基本服务,它向外部应用暴露一组通用服务——分布式同步(Distributed Synchronization)、命名服务(Naming Service)、集群维护(Group Maintenance)等,简化分布式应用协调及其管理的难度,提供高性能的分布式服务。ZooKeeper本身可以以Standalone模式安装运行,不过它的长处在于通过分布式ZooKeeper集群(一个Leader,多个Follower),基于一定的策略来保证ZooKeeper集群的稳定性和可用性,从而实现分布式应用的可靠性。
分布式安装
例如,我的ZooKeeper集群中每个结点的配置,以hadoopmaster为例,/etc/hosts内容如下所示:
10.1.14.71 hadoopmaster
10.1.14.72 hadoopslaver1
10.1.14.73 hadoopslaver2
ZooKeeper采用一种称为Leaderelection的选举算法。在整个集群运行过程中,只有一个Leader,其他的都是Follower,如果ZooKeeper集群在运行过程中Leader出了问题,系统会采用该算法重新选出一个Leader。因此,各个结点之间要能够保证互相连接,必须配置上述映射。
ZooKeeper集群启动的时候,会首先选出一个Leader,在Leaderelection过程中,某一个满足选举算的结点就能成为Leader。
修改ZooKeeper配置文件
<1>使用解压命令解压zookeeper文件
tar –zxvf zookeeper-3.4.5.tar.gz
mv zookeeper zk
2. 进入zk目录
cd zk/conf
cp zoo_sample.cfg zoo.cfg
vi zoo.cfg
3 在zoo.cfg文件中加入如下语句
dataDir=/home/yujianxin/zookeeper/zookeeper-3.4.5/data
logDir=/home/yujianxin/zookeeper/zookeeper-3.4.5/log
server.0=hadoopmaster:2887:3887
server.1=hadoopslaver1:2887:3887
server.2=hadoopslaver2:2887:3887
其中dataDir为指定数据存放目录,logDir为指定日志存放的目录;server.*为集群配置;
4. 创建data目录并设置myid
在我们配置的dataDir指定的目录下面,创建一个myid文件,里面内容为一个数字,用来标识当前主机,conf/zoo.cfg文件中配置的server.X中X为什么数字,则myid文件中就输入这个数字。
例如hadoopmaster服务器上的配置:
cd zk
mkdir data
cd data
vi myid
hadoopslaver1 hadoopslaver2依此配置即可。
远程复制分发安装文件设置myid
修改hadoopslaver1和hadoopslaver2上面的myid值分别为1和2;
设置zookeeper环境变量
这一步非必要操作,但是建议设置。打开/etc/profile文件
export ZK_HOME=/root/hadoopfile/zk
expror PAHT=.:$ZK_HOME:$PATH
启动ZooKeeper集群
我启动的顺序是hadoopmaster>hadoopslaver1>hadoopslaver2,由于ZooKeeper集群启动的时候,每个结点都试图去连接集群中的其它结点,先启动的肯定连不上后面还没启动的,有些服务器日志前面部分的异常是可以忽略的,这个是正常的。观察日志,集群在选出一个Leader后,就稳定了。
停止zookeeper进程:zkServer.sh stop
可以通过ZooKeeper的脚本来查看启动状态,包括集群中各个结点的角色(或是Leader,或是Follower),如下所示,是在ZooKeeper集群中的每个结点上查询的结果:
zkServer.sh status
另外,可以通过客户端脚本,连接到ZooKeeper集群上。对于客户端来说,ZooKeeper是一个整体(ensemble),连接到ZooKeeper集群实际上感觉在独享整个集群的服务,所以,你可以在任何一个结点上建立到服务集群的连接,