2020-11-24 zookeeper学习笔记

一、zookeeper安装

Zookeeper 是一个用于维护配置信息、命名、提供分布式同步和提供组服务的注册中心,并使用树形结构管理数据,以“/”作为根节点,每个节点znode既可以存放其他节点znode地址,也可以存放一个具体的值,每个znode上都有一套状态信息:stat。
1、linux系统上传zookeeper-3.4.9.tar.gz
2、解压`tar -zxvf /opt/zookeeper-3.4.9.tar.gz
3、配置配置文件

/conf/zoo_sample.cfg  需改为conf/zoo.cfg
dataDir=/opt/zookeeper-3.4.9/data 4.6在zoo.cfg中配置数据目录的位置

4、创建数据库目录mkdir xx/xx/zookeeper-3.4.9/data

二、相关命令

1、服务器

./zkServer.sh start //启动
./zkServer.sh stop //停止
./zkServer.sh status //查询状态

2、客户端
注意:针对节点的操作都必须基于根节点逐级进行

./zkCli.sh -server locahost:port 登陆
ls : 查看当前znode中所包含的内容
ls2: 增强版ls,查看当前节点数据并能看到更新次数等数据
stat : 查看节点状态
create [-s] [-e] path data acl :创建节点,不带有-s、-e参数为普通创建,-s:含有序列-e:临时(重启或者超时消失),acl登陆权限设置
set :设置节点的具体值
get :获取节点值
delete:删除节点(不能含有子节点)
rmr:递归删除,删除当前节点和子节点
quit:退出

3、四字命令
通过telnet或nc向ZooKeeper提交相应命令,nc命令需要安装对应的程序才可以使用。yum install -y nc
例:echo ruok | nc localhost 2181

ruok:测试服务是否处于正确状态。如果确实如此,那么服务返回“imok ”,否则不做任何响应
stat:输出关于性能和连接的客户端的列表
conf:输出相关服务配置的详细信息
cons:列出所有连接到服务器的客户端的完全的连接 /会话的详细信息。包括“接受 / 发送”的包数量、会话id 、操作延迟、最后的操作执行等等信息
dump:列出未经处理的会话和临时节点
envi:输出关于服务环境的详细信息(区别于conf命令)
reqs:列出未经处理的请求
wchs:列出服务器watch的详细信息
wchc:通过session列出服务器watch的详细信息,它的输出是一个与watch相关的会话的列表
wchp:通过路径列出服务器 watch的详细信息。它输出一个与 session相关的路径

三、节点类型

1、PERSISTENTper-持久化目录节点
客户端与zookeeper断开连接后,该节点依旧存在
2、PERSISTENT_SEQUENTIAL-持久化顺序编号目录节点
客户端与zookeeper断开连接后,该节点依旧存在,只是Zookeeper给该节点名称进行顺序编号
3、EPHEMERAL-临时目录节点
客户端与zookeeper断开连接后,该节点被删除
4、EPHEMERAL_SEQUENTIAL-临时顺序编号目录节点
客户端与zookeeper断开连接后,该节点被删除,只是Zookeeper给该节点名称进行顺序编号

四、异步通知机制

客户端注册监听它关心的目录节点,当目录节点发生变化(数据改变、被删除、子目录节点增加删除)时,zookeeper会通知客户端。
ZooKeeper的观察机制是一种异步回调的触发机制,zookeeper支持Watch(观察)机制,客户端可以在每个znode结点上设置一个Watcher(观察者),如果被观察服务端的znode结点有变更,那么Watcher就会被触发,这个Watcher所属的客户端将接收到一个通知包被告知结点已经发生变化。,这是个一次性动作,触发一次就失效了。
可以通过递归调用达到持续观测的目的:

// 专门封装一个方法用来实现持续的异步监听
public void getNodeData(String path, ZooKeeper zooKeeper) throws KeeperException, InterruptedException {
	
	// 调用获取节点值的方法时设置Watcher进行监控
	byte[] data = zooKeeper.getData(path, new Watcher() {
		
		@Override
		public void process(WatchedEvent event) {
			
			// 接收到异步通知时,再次调用获取节点值方法,目的是设置新的Watcher
			try {
				getNodeData(path, zooKeeper);
			} catch (KeeperException e) {
				e.printStackTrace();
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
			
		}
	}, new Stat());

五、集群

1、搭建集群环境
第1步:创建集群所在目录

mkdir /opt/cluster-zk

第2步:重新解压tar包到集群目录

tar -zxvf /opt/zookeeper-3.4.9.tar.gz -C /opt/cluster-zk/

第3步:复制新的解压目录

cp -r /opt/cluster-zk/zookeeper-3.4.9/ /opt/cluster-zk/zkone

第4步:配置zkone
i:创建zoo.cfg配置文件

cp /opt/cluster-zk/zkone/conf/zoo_sample.cfg /opt/cluster-zk/zkone/conf/zoo.cfg

ii:创建数据目录

mkdir /opt/cluster-zk/zkone/data

iii:在数据目录中创建编号文件

vim /opt/cluster-zk/zkone/data/myid

iv:编辑编号文件,内容就是当前服务器实例的编号

1

v:配置zoo.cfg

dataDir=/opt/cluster-zk/zkone/data
clientPort=1000
server.1=127.0.0.1:1001:1002
server.2=127.0.0.1:2001:2002
server.3=127.0.0.1:3001:3002

第5步:配置zktwo
i:把zktwo复制出来

cp -r /opt/cluster-zk/zkone /opt/cluster-zk/zktwo

ii:修改myid文件中编号值,将1改成2

vim /opt/cluster-zk/zktwo/data/myid

iii:修改zoo.cfg

dataDir=/opt/cluster-zk/zktwo/data
clientPort=2000

第6步:配置zkthree
i:把zkthree复制出来

cp -r /opt/cluster-zk/zkone /opt/cluster-zk/zkthree

ii:修改myid文件中编号值,将1改成3

vim /opt/cluster-zk/zkthree/data/myid

iii:修改zoo.cfg

dataDir=/opt/cluster-zk/zkthree/data
clientPort=3000

2、创建操作服务器的可执行脚本
(1)创建文件

/opt/cluster-zk/start.sh
/opt/cluster-zk/stop.sh
/opt/cluster-zk/status.sh

(2)编辑启动服务器命令

/opt/cluster-zk/zkone/bin/zkServer.sh start
/opt/cluster-zk/zktwo/bin/zkServer.sh start
/opt/cluster-zk/zkthree/bin/zkServer.sh start

(3)编辑停止服务器命令

/opt/cluster-zk/zkone/bin/zkServer.sh stop
/opt/cluster-zk/zktwo/bin/zkServer.sh stop
/opt/cluster-zk/zkthree/bin/zkServer.sh stop

(4)编辑查看服务器状态命令

/opt/cluster-zk/zkone/bin/zkServer.sh status
/opt/cluster-zk/zktwo/bin/zkServer.sh status
/opt/cluster-zk/zkthree/bin/zkServer.sh status

(5)给脚本文件设置可执行权限

chmod 755 /opt/cluster-zk/start.sh 
chmod 755 /opt/cluster-zk/stop.sh 
chmod 755 /opt/cluster-zk/status.sh 

(6)执行脚本

/opt/cluster-zk/start.sh 
/opt/cluster-zk/stop.sh 
/opt/cluster-zk/status.sh 

(7)客户端登录

/opt/zookeeper-3.4.9/bin/zkCli.sh -server 127.0.0.1:1000
/opt/zookeeper-3.4.9/bin/zkCli.sh -server 127.0.0.1:2000
/opt/zookeeper-3.4.9/bin/zkCli.sh -server 127.0.0.1:3000

注意:一般来说,集群中服务器数量最好设置为单数,集群中有超过一半的服务器正常工程,则整个集群判断为正常工作。对外提供服务时大致满足预期。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值