zookeeper

  • zookeeper  api

linux:

    zkCli.sh     :  连接客户端

输入 ll  :查看帮助信息

ZooKeeper -server host:port cmd args
stat path [watch]
set path data [version]
ls path [watch]
delquota [-n|-b] path
ls2 path [watch]
setAcl path acl
setquota -n|-b val path
history
redo cmdno
printwatches on|off
delete path [version]
sync path
listquota path
rmr path
get path [watch]
create [-s] [-e] path data acl
addauth scheme auth
quit
getAcl path
close
connect host:port

 

   ls  /    :查看根节点下面有哪些节点

[testRoot, testRoot1, zookeeper, testRoot222, testRoot111, dubbo, testRoot312]

  get  /testRoot  :  查看节点

hello
cZxid = 0x1cf
ctime = Sat Nov 30 13:52:46 CST 2019
mZxid = 0x1cf
mtime = Sat Nov 30 13:52:46 CST 2019
pZxid = 0x1cf
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 6
numChildren = 0

 

create  /202009  1 :创建节点

create /202009 /09  1 :  创建子节点   

create -e  /202009/08  1 :创建临时节点   客户端退出后,自动删除

create -s  /202009/07 1  : 创建顺序节点,自动排序   070000000000

create -s -e /202009/06 1 : 创建临时顺序节点 

set  /202009  2  : 修改节点 

delete /202009  : 删除节点,有子节点的时候删除失败

rmr  /202009  : 连子节点一块删除

quit:  退出客户端

 

  • 分布式协调

例如:A系统发送请求到mq,B系统消费后如何将结果告知A系统。

解决方案:利用zookeeper实现分布式系统之间的协调工作。

步骤:A系统发送请求之后可以对zookeeper上的某个节点注册监听,B系统处理完请求之后修改节点值,这样A系统立刻能收到通知

 

 

 

 

 

 

  • 分布式锁

步骤:

1.创建父节点 create  /202009  1

2.客户端A连接上ZK,在 父节点/202009下面创建临时顺序节点   create  /202009/01  1 ,并且查看父节点下的所有子节点,发现自己的序号是最小的(顺序节点,zk内部会为每个节点维护一个序号),A获得锁

3.客户端B连接上ZK,在父节点/202009下面创建临时顺序节点 create  /202009/02 2 ,并且查看父节点下的所有子节点,发现自己的序号不是最小的,获取锁失败,并且同时监听上一个顺序节点/202009/01

4.客户端C连接上ZK,同理获取锁失败,同时监听上一个顺序节点/202009/02

5.客户端A执行事务完毕,删除自己创建的临时顺序节点  delete /202009/01 ,释放锁

6.客户端B监听到/202009/01 删除事件,同时查看父节点下的所有子节点,发现自己的序号是最小的,获取锁

7.客户端C同上原理

如果中间某个客户端发生宕机,zk自动将其创建的临时顺序节点删除,释放锁,这就是临时节点的好处

 

 

 

 

 

  •  配置管理(发布/订阅)

 1. 将应用的配置信息放到zookeeper上集中管理

 2. 系统A,系统B,系统C监听zookeeper上的对应节点

 3. 修改节点上的配置信息,系统A,B,C能实时获取到修改信息

 

  • 统一命名服务

在分布式应用中,需要一套完整的命中规则,既能产生唯一的名称,又能便于识别,通过使用命名服务,客户端应用能够根据指定名字来获取资源或服务的地址

在分布式环境下,zk创建的顺序节点具有自增性,唯一性

create -s  /machine-A/Log/2020/09   1                :节点名称是/machine-A/Log/2020/090000000001     表示机器A下面的20200901日志

create -s  /machine-A/Log/2020/09   1                :节点名称是/machine-A/Log/2020/090000000002     表示机器A下面的20200902日志

create -s  /machine-B/Log/2020/09  1                 :节点名称是/machine-B/Log/2020/090000000001     表示机器B下面的20200901日志

 

 

  • zookeeper 集群

搭建集群步骤

1.从虚拟机中克隆了三台服务器 A,B,C,三台服务器中都安装好了jdk,zookeeper

2.编辑zoo.cfg 文件

server.1=192.168.140.55:2888:3888
server.2=192.168.140.57:2888:3888
server.3=192.168.140.60:2888:3888

server.A=B:C:D

    A:其中 A 是一个数字,表示这个是服务器的编号;

    B:是这个服务器的 ip 地址;

    C:Leader选举的端口;

    D:Zookeeper服务器之间的通信端口。

3.在data目录下面新建myid文件,文件对应server的编号。例如A服务器对应server.1=192.168.140.55:2888:3888 则myid内容是1。

data目录有zoo.cfg中的 dataDir属性指定,例如 dataDir=/home/chen/software/zookeeper/data

4.一定要关闭防火墙  service iptables stop

启动zk服务

zkServer.sh start   启动

zkServer.sh status 查看状态

zkServer.sh stop  关闭服务

zkServer.sh restart 重启

 

 

select * from t_stl_s_cust_lmrc_monitor where id in( '4028d0337451e07b0174527683c7006a','4028d0337451e07b0174527683a80068');

posted @ 2019-11-30 16:14  兵哥无敌  阅读(113)  评论(0编辑  收藏  举报