ZooKeeper:ZooKeeper是一种分布式协调服务,用于管理大型主机。
分布式应用:分布式应用可以在给定时间(同时)在网络中的多个系统上运行,通过协调它们以快速有效的方式完成特定任务
分布式应用有两部分:Server(服务器) 和 Client(客户端) 应用程序。
分布式应用的优点:
分布式应用的缺点:
Apache ZooKeeper是由集群(节点组)使用的一种服务,用于在自身之间协调,并通过稳健的同步技术维护共享数据。ZooKeeper本身是一个分布式应用程序,为写入分布式应用程序提供服务。
ZooKeeper集群奇数个节点的原因:
ZooKeeper提供的常见服务如下 :
命名服务:按名称标识集群中的节点。它类似于DNS,但仅对于节点。
配置管理:加入节点的最近的和最新的系统配置信息。
集群管理:实时地在集群和节点状态中加入/离开节点。
选举算法:选举一个节点作为协调目的的leader。
分布式锁和队列同步服务:在修改数据的同时锁定数据。此机制可帮助你在连接其他分布式应用程序(如Apache HBase)时进行自动故障恢复。
高度可靠的数据注册表:即使在一个或几个节点关闭时也可以获得数据。
ZooKeeper的好处:
分布式与数据复制:Zookeeper作为一个集群提供一致的数据服务,自然,它要在所有机器间做数据复制。
数据复制的好处:
从客户端读写访问的透明度来看,数据复制集群系统分下面两种:
写主(WriteMaster):对数据的修改提交给指定的节点。读无此限制,可以读取任何一个节点。这种情况下客户端需要对读与写进行区别,俗称读写分离;
写任意(Write Any):对数据的修改可提交给任意的节点,跟读一样。这种情况下,客户端对集群节点的角色与变化透明。
zookeeper安装:
独立配置的ZooKeeper集群,进程名称QuorumPeerMain
Zookeeper 的配置文件在 conf 目录下,这个目录下有 zoo_sample.cfg 和 log4j.properties,你需要做的就是将 zoo_sample.cfg 改名为 zoo.cfg,因为 Zookeeper 在启动时会找这个文件作为默认配置文件。
1 tickTime=2000
2 dataDir=D:/devtools/zookeeper-3.2.2/build
3 clientPort=2181
下面详细介绍一下,这个配置文件中各个配置项的意义。
集群模式除了上面的三个配置项还要增加下面几个配置项:
1. initLimit=5
2. syncLimit=2
3. server.1=192.168.211.1:2888:3888
4. server.2=192.168.211.2:2888:3888
zookeeper的节点类型:
PERSISTENT(持久化目录节点):客户端与zookeeper断开连接后,该节点依旧存在
PERSISTENT_SEQUENTIAL(持久化顺序编号目录节点):客户端与zookeeper断开连接后,该节点依旧存在,只是Zookeeper给该节点名称进行顺序编号
EPHEMERAL(临时目录节点):客户端与zookeeper断开连接后,该节点被删除
EPHEMERAL_SEQUENTIAL(临时顺序编号目录节点):客户端与zookeeper断开连接后,该节点被删除,只是Zookeeper给该节点名称进行顺序编号
ZooKeeper 角色:(zookeeper服务主要有两个角色leader和follower)
ZooKeeper工作原理:
Zookeeper的核心是原子广播,这个机制保证了各个Server之间的同步。实现这个机制的协议叫做Zab协议。Zab协议有两种模式,它们分 别是恢复模式(选主)和广播模式(同步)。当服务启动或者在领导者崩溃后,Zab就进入了恢复模式,当领导者被选举出来,且大多数Server完成了和 leader的状态同步以后,恢复模式就结束了。状态同步保证了leader和Server具有相同的系统状态。
为了保证事务的顺序一致性,zookeeper采用了递增的事务id号(zxid)来标识事务。所有的提议(proposal)都在被提出的时候加上了zxid。实现中zxid是一个64位的数字,它高32位是epoch用来标识leader关系是否改变,每次一个leader被选出来,它都会有一个新的epoch,标识当前属于那个leader的统治时期。低32位用于递增计数。
每个Server在工作过程中有三种状态:
LOOKING:当前Server不知道leader是谁,正在搜寻
LEADING:当前Server即为选举出来的leader
FOLLOWING:leader已经选举出来,当前Server与之同步
连接到Zookeeper服务
zkCli.sh -server hadoop2:2181
可用命令
help
使用ls命令查看当前Zookeeper中所包含的内容
ls
创建一个新的Znode节点"aa",以及和它相关字符,默认是不带编号的
create /aa "my first zk"
创建带编号的持久性节点"bb",
create -s /bb "the bb node"
创建不带编号的临时节点"cc"
create -e /cc "the cc node"
创建带编号的临时节点"dd"
create -s -e /dd "the dd node"
关闭本次连接回话session,再重新打开一个连接
close
connect haddoop1:2181
获取节点
get /aa
通过set命令来对zk所关联的字符串进行设置
set /aa haha123
删除节点
delete /aa
退出
quit
查看一个文件的状态信息
stat /a
close
connect haddoop1:2181
获取节点
get /aa
通过set命令来对zk所关联的字符串进行设置
set /aa haha123
删除节点
delete /aa
退出
quit
查看一个文件的状态信息
stat /a