Zookeeper(一)——Zookeeper基础

一、基本概念

1.1 集群⻆⾊

Zookeeper集群中的所有机器通过Leader选举来选定⼀台被称为Leader的机器, Leader服务器为客户端提供读和写服务,除Leader外,其他机器包括Follower和Observer。Follower和Observer都能提供读服务,唯⼀的区别在于Observer不参与Leader选举过程,不参与写操作的过半写成功策略,因此Observer可以在不影响写性能的情况下提升集群的性能。

1.2 会话(session)

Session指客户端会话, ⼀个客户端连接是指客户端和服务端之间的⼀个TCP⻓连接, Zookeeper对外的服务端⼝默认为2181,客户端启动的时候,⾸先会与服务器建⽴⼀个TCP连接,从第⼀次连接建⽴开始,客户端会话的⽣命周期也开始了,通过这个连接,客户端能够⼼跳检测与服务器保持有效的会话,也能够向Zookeeper服务器发送请求并接受响应,同时还能够通过该连接接受来⾃服务器的Watch事件通知。

1.3 数据节点(Znode)

在ZooKeeper中, “节点”分为两类,第⼀类同样是指构成集群的机器,我们称之为机器节点;第⼆类则是指数据模型中的数据单元,我们称之为数据节点——ZNode。 ZooKeeper将所有数据存储在内存中,数据模型是⼀棵树(ZNode Tree),由斜杠(/)进⾏分割的路径,就是⼀个Znode,例如/app/path1。每个ZNode上都会保存⾃⼰的数据内容,同时还会保存⼀系列属性信息。

1.4 版本

Zookeeper的每个Znode上都会存储数据,对于每个ZNode, Zookeeper都会为其维护⼀个叫作Stat的数据结构, Stat记录了这个ZNode的三个数据版本,分别是version(当前ZNode的版本)、 cversion(当前ZNode⼦节点的版本)、 aversion(当前ZNode的ACL版本)。

1.5 Watcher(事件监听器)

Zookeeper允许⽤户在指定节点上注册⼀些Watcher,并且在⼀些特定事件触发的时候, Zookeeper服务端会将事件通知到感兴趣的客户端,该机制是Zookeeper实现分布式协调服务的重要特性。

1.6 ACL

Zookeeper采⽤ACL(Access Control Lists)策略来进⾏权限控制,其定义了如下五种权限:
 ●CREATE:创建⼦节点的权限。
 ●READ:获取节点数据和⼦节点列表的权限。
 ●WRITE:更新节点数据的权限。
 ●DELETE:删除⼦节点的权限。
 ●ADMIN:设置节点ACL的权限。
其中, CREATE和DELETE这两种权限都是针对⼦节点的权限控制。

二、Zookeeper环境搭建

2.1 Zookeeper的搭建⽅式

Zookeeper安装⽅式有三种,单机模式和集群模式以及伪集群模式。
 ●单机模式: Zookeeper只运⾏在⼀台服务器上,适合测试环境;
 ●集群模式: Zookeeper运⾏于⼀个集群上,适合⽣产环境,这个计算机集群被称为⼀个“集合体”;
 ●伪集群模式:就是在⼀台服务器上运⾏多个Zookeeper。

2.2 单机搭建

  1. 下载
    下载稳定版本的zookeeper http://zookeeper.apache.org/releases.html
  2. 上传
    下载完成后,将zookeeper压缩包上传到linux系统
  3. 解压缩压缩包
#解压到当前目录下
tar -zxvf zookeeper-3.4.14.tar.gz  
#解压到目标目录下
tar -zxvf zookeeper-3.4.14.tar.gz -C 目标目录
  1. 进⼊ zookeeper-3.4.14 ⽬录,创建 data ⽂件夹
cd zookeeper-3.4.14
mkdir data
  1. 修改配置⽂件名称
cd conf
mv zoo_sample.cfg zoo.cfg
  1. 修改zoo.cfg中的data属性
dataDir=/root/zookeeper-3.4.14/data
  1. zookeeper服务启动
    进⼊bin⽬录,启动服务输⼊命令
./zkServer.sh start

输出以下内容表示启动成功


关闭服务输⼊命令

./zkServer.sh stop

输出以下提示信息



查看状态

./zkServer.sh status

如果启动状态,提示:


如果未启动状态,提示:

2.3 伪集群模式

单台机器上运⾏多个Zookeeper实例,这种情况下,必须保证每个配置⽂档的各个端⼝号不能冲突,除clientPort不同之外, dataDir也不同。另外,还要在dataDir所对应的⽬录中创建myid⽂件来指定对应的Zookeeper服务器实例。
 ●clientPort端⼝:
如果在1台机器上部署多个server,那么每台机器都要不同的 clientPort,⽐如 server1是2181,server2是2182, server3是2183;
 ●dataDir和dataLogDir:
dataDir和dataLogDir也需要区分下,将数据⽂件和⽇志⽂件分开存放,同时每个server的这两变量所对应的路径都是不同的;
 ●server.X和myid:
server.X 这个数字就是对应, data/myid中的数字。在3个server的myid⽂件中分别写⼊了1, 2, 3,那么每个server中的zoo.cfg都配 server.1 server.2,server.3就⾏了。因为在同⼀台机器上,后⾯连着的2个端⼝, 3个server都不要⼀样,否则端⼝冲突。

  1. 下载
    下载稳定版本的zookeeper http://zookeeper.apache.org/releases.html
  2. 上传
    下载完成后,将zookeeper压缩包上传到linux系统
  3. 解压压缩包
mkdir zkcluster
tar -zxvf zookeeper-3.4.14.tar.gz -C /zkcluster
  1. 改名并复制
mv zookeeper-3.4.14 zookeeper01
cp -r zookeeper01/ zookeeper02
cp -r zookeeper01/ zookeeper03
  1. 分别在zookeeper01、 zookeeper02、 zookeeper03⽬录下创建data及logs⽬录
mkdir data
cd data
mkdir logs
  1. 修改配置⽂件名称
cd conf
mv zoo_sample.cfg zoo.cfg
  1. 配置每⼀个Zookeeper 的dataDir(zoo.cfg) clientPort 分别为2181 2182 2183
clientPort=2181
dataDir=/zkcluster/zookeeper01/data
dataLogDir=/zkcluster/zookeeper01/data/logs
  1. 配置集群
    (1)在每个zookeeper的 data ⽬录下创建⼀个 myid ⽂件,内容分别是1、 2、 3 。这个⽂件就是记录每个服务器的ID
touch myid

(2)在每⼀个zookeeper 的 zoo.cfg配置客户端访问端⼝(clientPort)和集群服务器IP列表。

server.1=10.211.55.4:2881:3881
server.2=10.211.55.4:2882:3882
server.3=10.211.55.4:2883:3883
#server.服务器ID=服务器IP地址:服务器之间通信端⼝:服务器之间投票选举端⼝
  1. 启动集群
    依次启动三个zk实例
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容