Zookeeper简介
Zookeeper基本概念
单机搭建
伪集群搭建
Zookeeper简介
ZooKeeper 是一个集中式服务,用于维护配置信息,命名,提供分布式同步和提供组服务.
Zookeeper基本概念
- 集群角色
通常在分布式系统中,构成一个集群的每台机器都有自己的角色,最典型的就是Master/Slave模式(主从模式),Master负责写操作,Slave负责读服务.
而在zookeeper中,这个概念被颠覆,没有沿用Master/Slave,而是引用了Leader,Follower,Observer三种角色.zookeeper集群中的所有机器通过选举来确定出一个机器为Leader,除Leader外,其他机器包括Follower和Observer都能提供读服务,唯一的区别是Observer不参与Leader选举过程,不参与写操作的过半写成功策略,如果follower太多时,会影响性能.因此Observer可以在不影响写性能的情况下提升集群的性能.
如图:
- 当 client 发送了写请求是,follower没有权限必须转发给leader来处理
- leader接收到follower发送过来的写请求后,会把该写请求转换成带有各种状态(包含版本号,事务id等等)的事务,会把该事务进行广播(发送proposal投票),所有的follower都会接收到
- 所有接收到proposal的follower进行投票(observer不参与投票),结果 执行/不执行,都会响应给leader一个ACK
- 发送事务提交请求给follower和observer,所有follower和observer进行事务操作.当完成后,哪个follower接收到的写请求哪个就响应给client
- 会话(session)
session指客户端会话,一个客户端连接是指客户端和服务器之间的一个TCP长连接,zookeeper对外的默认接口为2181,客户端启动的时候,会和服务器建立一个TCP链接,从第一次连接建立开始,客户端会话的生命周期就开始了,并通过这个连接客户端能进行心跳检测与服务器保持有效的会话,可以向zookeeper服务器发送请求并接受响应.
-
数据节点(Znode)
"节点"分为两类,一个是构成集群的机器,称为机器节点.另一个是数据模型中的数据单元—>Znode,如图/app1/p_1,每个Znode上都会保存自己的数据内容,同时还会保存一系列属性信息.-
Znode又可分为四种节点类型
- 1.持久节点:是zookeeper最常见的节点类型,就是子节点被创建后一直存在服务器,直到删除操作才会主动清除
- 2.持久顺序节点:就是有顺序的持久节点,区别就是会在节点创建的时候,再接点名后面加上一个数字后缀,用来表示顺序
- 3.临时节点:会被自动清除的节点,生命周期随着客户端会话窗口关闭而结束.与持久性节点不同的是,临时节点不可以创建子节点
- 4.临时顺序节点:有顺序的临时节点,创建时也会在最后加上数字,用来表示顺序
-
- ACL
Zookeeper采用ACL(Access Control List)策略来进行权限控制,定义了五种权限控制-
CREATE:创建子节点的权限
-
READ:获取节点数据和子节点列表的权限
-
WRITE:更新节点数据的权限
-
DELETE:删除子节点的权限
-
ADMIN:设置节点ACL的权限
其中CREATE和DELETE是针对子节点的权限控制
-
- 版本
Zookeeper每个Znode上都会存储数据,对于每个Znode,zookeeper都会为其维护一个叫做Stat的数据结构.Stat记录了当前Znode三个数据版本-> 1.version(当前Znode版本),2.cversion(当前Znode子节点版本),3.aversion(当前Znode的ACL版本)
- Watcher(事件监听器)
Zookeeper允许用户在指定节点上注解一些watcher用于监听某些事件.并且在一些特定事件触发的时候,zookeeper会将事件通知给那些订阅的客户端.该机制也是zookeeper实现分布式协调服务的重要特征
单机搭建
单机模式:Zookeeper只运行在一台服务器上,适合测试环境
下载Zookeeper3.7.1最新稳定版本(linux)
上传并解压
tar -zxvf apache-zookeeper-3.7.1-bin.tar.gz
进入并创建data文件夹,用于存放zookeeper快照文件和日志信息的
cd apache-zookeeper-3.7.1-bin
mkdir data
进入 /conf中,重命名配置文件 zoo_sample.cfg 为 zoo.cfg
cd conf/
mv zoo_sample.cfg zoo.cfg
编辑zoo.cfg,指定快照文件和日志的输出目录
vim zoo.cfg
启动zookeeper,并查看当前模式
cd ../bin/
./zkServer.sh start
./zkServer.sh status
单机搭建完成
伪集群搭建
伪集群即模拟集群模式,也就是将不同实例运行在同一台机器上,用端口进行区分,伪集群模式可以为测试提供更高的可行性和实验效率.
注意:3个zookeeper实例端口需区分,还需在dataDir发对应的目录中创建myid文件夹来指定对应的zookeeper实例
- clientPort端口:
分别设置为 2181,2182,2183 - dataDir和dataLogDir:
两者区别是将数据文件和日志文件分开存放 - server.X和myid:
server.X (X对应的是数字),data/myid中的数字.在3个server的myid文件中分别写入了1,2,3,name每个server中的zoo.cfg都要配 server.1, server.2, server.3,之后还要配置两个端口,一个是服务之前通信的端口,另一个是投票选举的端口,不能与server的端口重复,否则报端口冲突.
首先回到 /bin目录,将zookeeper停掉,并查询状态.
./zkServer.sh stop
./zkServer.sh status
为了结构干净,创建zookeeper文件夹,将其解压后的3个zookeeper放入其中,我采用先rm在解压到新的路径下
rm -rf apache-zookeeper-3.7.1-bin
mkdir zookeeper
tar -zxvf apache-zookeeper-3.7.1-bin.tar.gz -C zookeeper //-C指定解压到某个文件夹
重命名为 apache-zookeeper-3.7.1-bin01并复制两份02和03
mv apache-zookeeper-3.7.1-bin apache-zookeeper-3.7.1-bin01
cp -r apache-zookeeper-3.7.1-bin01 apache-zookeeper-3.7.1-bin02
cp -r apache-zookeeper-3.7.1-bin01 apache-zookeeper-3.7.1-bin03
分别在3个zookeeper中创建data和data中的logs文件夹
mkdir data
cd data
mkdir logs
修改每个配置文件名称,端口号和存放路径
cd ../conf
mv zoo_sample.cfg zoo.cfg
vim zoo.cfg
在每个zookeeper的data目录下创建文件myid,内容分别为1,2,3,并在给每个zookeeper的zoo.cfg配置客户端访问端口和集群服务器ip列表
touch myid
分别启动zookeeper服务,并查看状态
- 注意:需要至少开启两台后,查看状态才正常,仅开启一台时查看状态会报未启动错误
- Error contacting service. It is probably not running.
./zkServer.sh start
./zkServer.sh status
已经选举出leader和follower
伪集群搭建完毕
其他章节 -> 跳转
end...