1、ZooKeeper简介
ZooKeeper 是一个为分布式应用所设计的分布的、开源的协调服务。分布式的应用可以建立在同步、配置管理、分组和命名等服务的更高级别的实现的基础之上。 ZooKeeper 意欲设计一个易于编程的环境,它的文件系统使用我们所熟悉的目录树结构。 ZooKeeper 使用 Java 所编写,但是支持 Java 和 C 两种编程语言。
众所周知,协调服务非常容易出错,但是却很难恢复正常,例如,协调服务很容易处于竞态以至于出现死锁。我们设计 ZooKeeper 的目的是为了减轻分布式应用程序所承担的协调任务。
2、ZooKeeper数据模型、命名空间以及节点的概念
ZooKeeper数据模型和层次命名空间。
提供的命名空间与标准的文件系统非常相似。一个名称是由通过斜线分隔开的路径名序列所组成的。ZooKeeper中的每一个节点是都通过路径来识别。
ZooKeeper中节点和临时节点
ZooKeeper的节点(znode)是通过像树一样的结构来进行维护的,并且每一个节点通过路径来标示以及访问。ZooKeeper的节点既可以被看做是一个文件,又可以被看做是一个目录,它同时具有二者的特点。
Znode还具有原子性操作的特点:命名空间中,每一个Znode的数据将被原子地读写。读操作将读取与Znode相关的所有数据,写操作将替换掉所有的数据。除此之外,每一个节点都有一个访问控制列表,这个访问控制列表规定了用户操作的权限。
ZooKeeper中同样存在临时节点。这些节点与session同时存在,当session生命周期结束,这些临时节点也将被删除。临时节点在某些场合也发挥着非常重要的作用。
3、ZooKeeper的安装
ZooKeeper的安装模式分为三种,分别为:单机模式(stand-alone)、集群模式和集群伪分布模式。
5.Zookeeper是保证数据在zk集群中传递时事务一致性的。 5.1 zookeeper是含有一个文件系统,类似于linux的文件系统。每一级目录结果都可以写数据。
6 搭建zk的集群 6.1 zk的集群要求至少3个节点(分别是hadoop0、hadoop1、hadoop2),且是奇数个,且节点之间的时间要同步。 6.2 在hadoop0上对zookeeper.tar.gz进行解压缩、重命名、设置环境变量。 tar -zxvf zookeeper-3.4.5.tar.gz mv zookeeper-3.4.5 zookeeper
vi /etc/profile export ZOOKEEPER_HOME=/usr/local/zookeeper export PATH=.:$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$ZOOKEEPER_HOME/bin
6.3 在hadoop0上进入zookeeper的conf目录 mv zoo_sample.cfg zoo.cfg 5.4 在hadoop0上编辑文件zoo.cfg, 修改dataDir=/usr/local/zookeeper/data 新增以下三行 server.0=hadoop0:2888:3888 server.1=hadoop1:2888:3888 server.2=hadoop2:2888:3888 5.5 在hadoop0上创建文件夹,执行命令mkdir -p /usr/local/zookeeper/data 5.6 在hadoop0的data目录下,创建文件myid,文件内容是0 5.7 把hadoop0上的zookeeper文件夹和/etc/profile复制到hadoop1、hadoop2节点。 scp -r /usr/local/zookeeper hadoop1:/usr/local scp -r /usr/local/zookeeper hadoop2:/usr/local
scp -r /etc/profile hadoop1:/etc/profile scp -r /etc/profile hadoop2:/etc/profile 5.8 在hadoop1上执行source /etc/profile,修改myid的值为1 在hadoop2上执行source /etc/profile,修改myid的值为2 5.9 ******************三个节点分别执行命令zkServer.sh start******************* zkServer.sh status 查看zookeeper的状态 5.10 验证:在各个节点分别执行jps,发现多一个java进程是QuorumPeerMain |