一、什么是Zookeeper
Zookeeper是Google的Chubby一个开源的实现,是一个开源的,为分布式提供协调服务的Apache项目;它包含一个简单的原语集,分布式应用程序可以基于它实现同步服务,配置维护和命名服务等;Zookeeper从设计模式角度来理解,是一个基于观察者模式设计的分布式服务管理框架,它负责存储和管理大家都关心的数据,然后接受观察者的注册,一旦这些数据的状态发生变化,Zookeeper就将负责通知已经存在Zookeeper上注册的那些观察者做出相应的反应;Zookeeper通常等于是文件系统加通知机制;
二、为什么使用Zookeeper
» 大部分分布式应用需要一个主控、协调器或控制器来管理物理分布的子进程(如资源、任务分配等)» 目前,大部分应用需要开发私有的协调程序,缺乏一个通用的机制» 协调程序的反复编写浪费,且难以形成通用、伸缩性好的协调器» ZooKeeper:提供通用的分布式锁服务,用以协调分布式应用 • Keepalived监控节点不好管理 • Keepalive 采用优先级监控 • 没有协同工作 • 功能单一 • Keepalive可扩展性差
三、Zookeeper优点
四、Zookeeper的安装和配置
以三节点为例,先配置一台,然后再分发:
1、准备、解压安装包
tar zxf zookeeper-3.4.5.tar.gz -C /usr/local/
mv /usr/local/zookeeper-3.4.5/ /usr/local/zookeeper
2、创建zk data目录
mkdir /usr/local/zookeeper/data
3、编辑配置文件
mv zoo_sample.cfg zoo.cfg[root@spark1 conf]# vim zoo.cfg tickTime=2000initLimit=5syncLimit=2dataDir=/usr/local/zookeeper/dataclientPort=2181server.0=spark1:2888:3888 server.1=spark2:2888:3888server.2=spark3:2888:3888##参数解释• tickTime:发送心跳的间隔时间,单位:毫秒• dataDir:zookeeper保存数据的目录。• clientPort:客户端连接 Zookeeper 服务器的端口,Zookeeper 会监听这个端口,接受客户端的访问请求。• initLimit: 这个配置项是用来配置 Zookeeper 接受客户端(这里所说的客户端不是用户连接 Zookeeper 服务器的客户端,而是 Zookeeper 服务器集群中连接到 Leader 的Follower 服务器)初始化连接时最长能忍受多少个心跳时间间隔数。当已经超过 5 个心跳的时间(也就是 tickTime)长度后 Zookeeper 服务器还没有收到客户端的返回信息,那么表明这个客户端连接失败。总的时间长度就是 5*2000=10 秒• syncLimit:这个配置项标识 Leader 与 Follower 之间发送消息,请求和应答时间长度,最长不能超过多少个 tickTime 的时间长度,总的时间长度就是 2*2000=4 秒• server.A=B:C:D:其 中 A 是一个数字,表示这个是第几号服务器;B 是这个服务器的 ip地址;C 表示的是这个服务器与集群中的 Leader 服务器交换信息的端口;D 表示的是万一集群中的 Leader 服务器挂了,需要一个端口来重新进行选举,选出一个新的 Leader,而这个端口就是用来执行选举时服务器相互通信的端口。如果是伪集群的配置方式,由于 B 都是一样,所以不同的 Zookeeper 实例通信端口号不能一样,所以要给它们分配不同的端口号
4、创建myid文件,设置zk节点标识
在主机1数据目录中,创建一个myid文件,并写入一个数字:0[root@spark1 data]# vim myid0
5、分发
##用scp命令,将zookeeper安装目录,传输到另外两台主机上;[root@spark1 local]# scp -r /usr/local/zookeeper spark2:/usr/local/[root@spark1 local]# scp -r /usr/local/zookeeper spark3:/usr/local/分发完后,唯一的区别是spark2和spark3的标识号分别设置为1和2 #vim /usr/local/zookeeper/data/myid
6、启动
1、分别在三台机器上执行:zkServer.sh start2、检查ZooKeeper状态:zkServer.sh status
3、jps
7、client连接
启动客户端连接到服务器: $>zkCli.sh -server hostname:2181 //进入zk命令行 $zk]help //查看帮助 $zk]quit //退出 $zk]create /a tom //创建一个数据节点,并赋值数据 $zk]get /a //查看数据 $zk]ls / //列出节点 $zk]set /a tom //设置数据 $zk]delete /a //删除一个节点 $zk]rmr /a //递归删除所有节点。