ZooKeeper

1 简介

zookeeper是一个为分布式应用所设计的分布式的、开源的协调服务。它提供了一项基本服务:分布式锁服务,同时也提供了分布式应用数据的维护和管理机制,包括统一命名服务、状态同步服务、集群管理、分布式消息队列、分布式应用配置项的管理等。zookeeper支持独立安装以及集群部署。

zookeeper官方网站:http://zookeeper.apache.org/

zookeeper下载地址:https://www.apache.org/dyn/closer.cgi/zookeeper/

2 架构

Zookeeper集群主要角色有Server和Client,其中Server分为Leader、Follower和Observer三个角色:

  • Leader:领导者角色,主要负责投票的发起和决议,以及更新系统状态

  • Follower:跟随者角色,用于接收客户请求并向客户端返回结果,在选主过程中参与投票

  • Observer:Observer可以接收客户端连接,将写请求转发给leader。但observer不参加投票,只同步leader状态。observer的目的是为了扩展系统,提高读取速度。

  • Client:客户端,用于向zk发起请求。

zk集群中每个server在内存中存储一份数据。在zk启动时,将从实例中选举一个server作为leader,leader负责处理数据更新等操作,当且仅当大多数server在内存中成功修改数据,才认为数据修改成功。

zk写的流程:

(1) 客户端首先和一个server或者observer通信,发起写请求
(2) server将写请求转发给leader 
(3) leader再将写请求转发给其他server,其他server在接收到写请求后写入数据并响应leader
(4) leader在接收到大多数写成功回应后,认为数据写成功
(5) server响应client,完成一次写操作

3 下载

apache-zookeeper-3.8.0-bin.tar.gz

online env

4 配置

5 访问

5.1 连接 zookeeper

  • ls 查询当前节点列表(/是根节点)path:路径(ls /)

  • create 创建新的 Znode 节点(create /node_1 "test")

  • get 查看节点数据 path:路径(get /node_1)

  • stat 查看数据节点的状态信息 path:路径

  • set 设置数据节点的值,path:路径,data:数据,可以带版本号,可以不带版本号(set /node_1 "11114")

  • delete 删除 node_1_3节点 (delete /node_1/node_1_3)

  • rmr 循环删除有子节点的父节点,例如删除 node_1 (rmr /node_1)

5.2 临时节点和持久节点

  • zookeeper 持久节点:该数据节点被创建后,就会一直存在于 zookeeper 服务器上,直到有删除操作来主动删除这个节点。

  • zookeeper 临时节点:临时节点的生命周期和客户端会话绑定在一起,客户端会话失效,则这个节点就会被自动清除。

可以根据 get 节点时返回的信息的 ephemeralOwner 字段判断是否是临时节点

当ephemeralOwner 值不为0时,表明这个节点是临时节点,值为会话id.

当ephemeralOwner 值为0时,表明这个节点是持久节点。.

6 安全

6.1 设置 iptables

提示

单启用zookeeper的SASL认证,并不能阻止客户端的匿名连接,仍需要防火墙来配合阻断。匿名连接是zookeeper身份认证的一种方式,是zookeeper有意设计的。

6.1.1 Centos7

6.1.2 Centos6

Last updated