zookeeper是什么?
ZooKeeper是一种用于分布式应用程序的分布式开源协调服务。ZooKeeper的实现非常重视高性能,高可用性,严格有序的访问。
zookeeper中的leader,如果连接节点失败,自动恢复,zk服务启动时完成leader选举。
zookeeper的读取很快。写入需要告知leader,leader对每个server进行分发写入。
zookeeper数据模型
ZooKeeper的名称空间很像分布式文件系统。名称是由斜杠(/)分隔的路径元素序列。ZooKeeper名称空间中的每个节点都由路径标识。
ZNodes
ZooKeeper树中的每个节点都称为znode。Znodes维护一个stat结构,包括数据更改的版本号,acl更改。每次znode的数据更改时,版本号都会增加。当客户端执行更新或删除时,它必须提供正在更改的znode的数据版本。如果它提供的版本与实际版本的数据不匹配,则更新将失败。
Znodes的特性:
- Watches
- Data Access
- Wphemeral Nodes
- Sequence Nodes -- Unique Naming
Session
Session中的请求以FIFO(指先进先出)的方式执行,一旦client连接到server,session就建立了。
客户端以固定间隔向服务端发送心跳,表示session是有效的,zk集群如果没有收到心跳,判定为client挂了,与此同时,临时节点被删除。
Watches (观察)
用于设置客户端监视znodes。当数据发生变化时,将向客户端发送一个监视事件,通知客户端数据发生了变更。watches事件是一次性的,触发后将自动销毁。
Data Access
每个节点都有一个访问控制列表(ACL),限制谁可以做什么。使用ACL来控制对其znode的访问。ACL的实现与UNIX的文件访问权限非常相似:它用权限来允许/禁止对节点的各种操作以及应用的范围。
zookeeper单机版安装
1、安装jdk并配置环境变量
2、下载zookeeper安装包,并解压
3、cd ${zookeeper}/conf/
4、mv zoo_sample.cfg zoo.cfg
5、启动zk server : ${zookeeper}/bin/zkServer.sh start
查看zk的状态: ${zookeeper}/bin/zkServer.sh status
6、启动客户端连接到服务器
zkCli.sh -server s201: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 //递归删除所有节点。
zookeeper集群配置
1、准备三台机器: centos7-1 \ centos7-2 \ centos7-3
2、每台机器安装jdk 、安装zk
3、每台机器都修改配置文件 ${zookeeper}/conf/zoo.cfg
修改:dataDir=/home/hadoop/zookeeper/data
并且添加下面的配置
server.1=centos7-1:2888:3888
server.2=centos7-2:2888:3888
server.3=centos7-3:2888:3888
4、在每台机器中创建myid,内容分别为 1、2、3 ...
注意: myid文件必须在data目录下创建,data目录在./conf/zoo.cfg中dataDir配置
机器:centos7-1 执行:echo 1 > /home/hadoop/zookeeper/data/myid
机器:centos7-2 执行:echo 2 > /home/hadoop/zookeeper/data/myid
机器:centos7-3 执行:echo 3 > /home/hadoop/zookeeper/data/myid
5、启动zk集群
./bin/zkServer.sh start
6、查看zk的状态 (成功启动两台以上zk服务器才算启动成功)
./bin/zkServer.sh status