目录
(2)添加一个log4j.properties文件,里面内容如下
ZooKeeper在分布式应用中提供了诸如统一命名服务、配置管理和分布式锁的基础,成为高效、稳健的分布式协调服务。另外,在分布式数据一致的情况下,ZooKeeper采用一种被称为ZAB(ZooKeeper Automic Broadcast)的一致性协议。
4.1 ZooKeeper的核心概念
在分布式系统构建的集群中,每台机器都有自己的角色定位。其中最经典的是Master/Slave模式,在这种模式中,所有写操作的机器都可以称为Master机器;所有通过异步复制方式获取最新数据并提供读服务的机器都可以称为Slave机器。
除Leader外,其他机器包括Follower和Observer都能够提供读服务,唯一不同的是,Leader选举过程和写操作的“过半写功能”策略--Observer都是不参与的。所以在不影响写性能的情况下,Observer可以提升集群的读性能。接下来我们介绍ZooKeeper的核心概念。
4.1.1Session回话机制
在ZooKeeper中,当客户端与服务器端成功建立链接后,Session会话会随之建立,同时会生成一个全局唯一的会话ID(Session ID)。在ZooKeeper中,一个客户端链接是指客户端和服务器之间的一个TCP长链接。
ZooKeeper对外的服务端口默认是2181,当客户端启动时,新建立的TCP链接也将第一次启动,他能通过心跳检测与服务器保持有效会话,同时还会向ZooKeeper发送请求并接收响应,另外还能够接收来自服务器的Watch事件通知。
Session的SessionTimeout值用来设置一个客户端会话的超时时间。当出现故障而又想要保存之间创建的会话时,只需在SessionTimeout规定的时间内重新连接上集群的任意一台服务器即可。
4.1.2数据节点、版本与Watcher的关联
在ZooKeeper中,“节点”是指数据模型中的数据单元,也叫数据节点--Znode
数据模型是以数(Znode Tree)的格式进行存储,并通过斜杠(/)来分割路径,分割后的每一个Znode都会保存自己的数据内容,同时还会保存一系列属性值,如zoo/path。
ZooKeeper的每一个Znode都对对应一个叫做Stat的数据结构。而Stat记录了version(当前Znode的版本)、cversion(当前Znode子节点的版本)和aversion(当前Znode的ACL版本)当前的3个数据版本。
当用户在ZooKeeper中注册一些Watcher(时间监听器)后,在一些特定时间触发的情况下,ZooKeeper将会把时间通知发送到感兴趣的客户端上,这是ZooKeeper分布式协调服务的重要特性。
4.1.3ACL策略
ZooKeeper的权限控制系统类似于UNIX文件系统,它采用的是ACL(Access Control Lists)策略。
ZooKeeper定义列如下5种权限。
CREATE:创建子节点的权限。
READ:获取节点数据和子节点的权限。
WRITE:更新节点数据的权限
DELETE:删除节点的权限
ADMIN:设置节点ACL的权限
4.2 ZooKeeper的安装与运行
安装ZooKeeper需要JDK安装,第2章的时候我们已经安装了,没有的返回去看。
4.2.1 创建ZooKeeper文件夹
在虚拟机的/usr/local/目录下创建zookeeper
mkdir /usr/local/zookeeper
4.2.2 拖拽文件进虚拟机并解压
如何拖拽,就跟第2章搭建hadoop时一样。
进入zookeeper文件夹进行解压,解压完成之后删除安装包。
tar -zxvf zookeeper-3.4.9.tar.gz #解压安装包
rm -rf zookeeper-3.4.9.tar.gz #删除安装包
4.2.3配置ZooKeeper
进入zookeeper/conf文件夹下,进行配置。
(1)复制并重命名文件
cp zoo_sample.cfg zoo.cfg
(2)编辑zoo.cfg
在/usr/local/zookeeper/zookeeper-3.4.9 文件下创建data文件夹
mkdir data
vim zoo.cfg
在/usr/local/zookeeper/zookeeper-3.4.9 文件下创建data文件夹
该配置中,tickTime属性指定了ZooKeeper中的基本时间单元,dataDir属性指定了ZooKeeper存储持久数据的本地文件系统设置,clientPort属性指定列ZooKeeper用于监听客户端链接的端口。
initLimit参数设定列所有更随着与Leader节点进行链接并同步的时间范围。如果在设定的时间段内,半数以上的跟随者未能完成同步,Leader节点便回旋不放弃Leader的地位,然后进行另外一次Leader选举。
如果这种情况经常发生,则表明设定的值太小,syncLimit参数设定列允许一个Follower与Leader进行同步的时间,其中那3个IP分别代表三个节点的IP地址。
(3)复制ZooKeeper文件夹到其他节点上
提醒一点,这个复制是在 、usr/local/zookeeper文件夹下
scp -r zookeeper-3.4.9 hadoo4:$PWD
scp -r zookeeper-3.4.9 hadoo6:$PWD
(4)创建myid文件
在三个节点下的zookeeper/data文件夹下分别创建myid文件,并写入数字1、2、3。192.168.252.14写入1,其他类推。
(5)配置环境变量(3台机器)
vim /etc/profile
这里面添加了ZOOKEEPER_HOME,和在PATH后面添加了ZOOKEEPER/bin,三台机器都得修改环境变量。(也可以配置好一台复制给其他两台)
然后生效环境变量