zookeeper基础学习-了解zookeeper
1.zookeeper基础
zookeeper提供相应的api文档,而不是直接直接提供原语(功能)。
2.api概述
如果一个znode节点包含任何数据,那么数据存储为字节数组。
create /path data 创建名为/path的znode节点,并包含数据data
delete /path
exists /path
setData /path data
getData /path
getChildren /path 返回所有/path节点下面字节点的列表
注:zookeeper不允许局部写入活读取znode节点的数据,当设置一个znode节点的数据或读取时,znode节点的内容会被整个替换或全部读取进来。
3.znode的不同类型
3.1 持久节点
只能通过delete操作来删除节点。
3.2 临时节点
当创建该znode的客户端的会话因超时或主动关闭而终止或者当某个客户端主动删除该节点时才会被删除
总之,znode一共有四种类型:持久的,临时的,持久有序的和临时有序的
4.监视和通知
客户端向zookeeper注册需要接受通知的znode,通过对znode设置监视点来接受通知,监视点时一个单次触发的操作,即监视点会触发一个通知,为了接受多个通知,客户端必须在每次通知后设置一个新的监视点。
但是因为通知机制是单次触发的操作,所以在客户端接受更改通知并设置新的监视点时,znode节点也许发生了新的变化。所以zookeeper设置了状态变化传播给某些客户端。
5.版本
当更新znode节点时,必须传入版本号,只有传入当版本号和当前节点当版本号一致时才允许更新。
6.zookeeper架构
6.1 独立模式
单独当服务器
6.2 仲裁模式
集群模式
当在仲裁模式下,zookeeper启动时,如果让一个客户端等待每个服务器完成数据保存后再继续,延迟问题将无法接受,所以zookeeper仲裁模式才准从半数以上服务器保存完毕才允许访问。
在仲裁模式下,应用需要传递可用的服务列表给客户端,告知客户端可以连接的服务器信息并选择一个进行连接,如果连接的zookeeper因为某一原因崩溃需要崇廉,这个服务器的zookeeper状态要与最后连接的服务器zookeeper状态保持最新
7.会话
在对zookeeper集合执行任何请求前,一个客户端必须先与服务建立会话,但当会话无法与当前连接的服务器继续通信时,会话就可能转移到另一个服务器上。
会话提供了顺序保障,这就意味着同一个会话中的请求会以fifo(先进先出)顺序执行,但是跨会话就违反了fifo顺序
7.1 会话的状态和生命周期
是指会话从创建到结束
NOT_CONNECTED——CONNECTING——CONNECTED——CLOSED
8.使用zookeeper
8.1 独立模式启动
终于到了使用zookeeper
下载,解压 tar -xvzf zookeeper-3.4.5.tar.gz
重命名配置文件 mv conf/zoo_sample.cfg conf/zoo.cfg
修改zoo.cfg配置文件,将data目录移出/tmp目录,以防zookeeper填满了根分区 dataDir=/users/me/zookeeper
后台启动 bin/zkServer.sh start #如果想要前台启动 bin/zkServer.sh start-foreground
8.2 执行流程
(1)客户端迪庆程序建立一个会话
(2)客户端尝试连接到localhost/127.0.0.1:2181
(3)客户端连接成功,服务器开始初始化这个新会话
(4)会话初始化成功完成
(5)服务器向客户端发送一个SyncConnected事件
8.3 仲裁模式启动
(1)修改配置文件
tickTime=2000
initLimit=10
syncLimit=5
dataDir=./data
clientPort=2181
server.1=127.0.0.1:2222:2223
server.2=127.0.0.1:3333:3334
server.3=127.0.0.1:4444:4445
(2) 设置data目录
mkdir z1
mkdir z1/data
mkdir z2
mkdir z2/data
mkdir z3
mkdir z3/data
(3)设置myid
echo 1 > z1/data/myid
echo 2 > z2/data/myid
echo 3 > z3/data/myid
(4) 启动zookeeper集群
cd z1
{PATH_TO_ZK}/bin/zkServer.sh start ./zoo.cfg
cd z2
{PATH_TO_ZK}/bin/zkServer.sh start ./zoo.cfg
cd z3
{PATH_TO_ZK}/bin/zkServer.sh start ./zoo.cfg
(5)访问集群
{PATH_TO_ZK}/bin/zkCli.sh -server 127.0.0.1:2181,127.0.0.1:2182,127.0.0.1:2183