2021-11-04

zookeeper的shell操作

1.1、zookeeper的shell操作

1.1.1、客户端连接

运行 zkCli.sh –server ip 进入命令行工具。

1.1.2、shell操作

创建节点
create [-s] [-e] path data acl
其中,-s 或-e 分别指定节点特性,顺序或临时节点,若不指定,则表示持 久节点;acl 用来进行权限控制。

创建顺序节点:2021-11-04
创建临时节点:
2021-11-04
创建永久节点:
2021-11-04

读取节点::
与读取相关的命令有 ls 命令和 get 命令,ls 命令可以列出 Zookeeper 指定节点下的所有子节点,只能查看指定节点下的第一级的所有子节点;get 命令可以获取 Zookeeper 指定节点的数据内容和属性信息。

更新节点::
set path data [version]
data 就是要更新的新内容,version 表示数据版本。

删除节点
delete path [version]
若删除节点存在子节点,那么无法删除该节点,必须先删除子节点,再删除父节点。

Rmr path
可以递归删除节点。

redo:该命令可以重新执行指定命令编号的历史命令,命令编号可以通
history 查看

2.1、zookeeper的数据模型

ZooKeeper 的数据模型,在结构上和标准文件系统的非常相似,拥有一个层

次的命名空间,都是采用树形层次结构,ZooKeeper 树中的每个节点被称为—

Znode。和文件系统的目录树一样,ZooKeeper 树中的每个节点可以拥有子节点。

但也有不同之处:

1.	Znode 兼具文件和目录两种特点。既像文件一样维护着数据、元信息、ACL、 时间戳等数据结构,又像目录一样可以作为路径标识的一部分,并可以具有 子 Znode。用户对 Znode 具有增、删、改、查等操作(权限允许的情况下)。

2.	Znode 具有原子性操作,读操作将获取与节点相关的所有数据,写操作也将 替换掉节点的所有数据。另外,每一个节点都拥有自己的 ACL(访问控制列表),这个列表规定了用户的权限,即限定了特定用户对目标节点可以执行的操作。

3.	Znode 存储数据大小有限制。ZooKeeper 虽然可以关联一些数据,但并没有 被设计为常规的数据库或者大数据存储,相反的是,它用来管理调度数据, 比如分布式应用中的配置文件信息、状态信息、汇集位置等等。这些数据的 共同特性就是它们都是很小的数据,通常以 KB 为大小单位。ZooKeeper 的服 务器和客户端都被设计为严格检查并限制每个 Znode 的数据大小至多 1M,常规使用中应该远小于此值。

4.	Znode 通过路径引用,如同 Unix 中的文件路径。路径必须是绝对的,因此他 们必须由斜杠字符来开头。除此以外,他们必须是唯一的,也就是说每一个 路径只有一个表示,因此这些路径不能改变。在 ZooKeeper 中,路径由 Unicode 字符串组成,并且有一些限制。字符串"/zookeeper"用以保存管理 信息,比如关键配额信息。

2.1.1、节点类型

Znode 有两种,分别为临时节点和永久节点。

节点的类型在创建时即被确定,并且不能改变。

临时节点:该节点的生命周期依赖于创建它们的会话。一旦会话结束,临时 节点将被自动删除,当然可以也可以手动删除。临时节点不允许拥有子节点。

永久节点:该节点的生命周期不依赖于会话,并且只有在客户端显示执行删

除操作的时候,他们才能被删除。

Znode 还有一个序列化的特性,如果创建的时候指定的话,该 Znode 的名字

后面会自动追加一个不断增加的序列号。序列号对于此节点的父节点来说是唯一

的,这样便会记录每个子节点创建的先后顺序。它的格式为“%10d”(10 位数字,

没有数值的数位用 0 补充,例如“0000000001”)。

2021-11-04

存在四种类型的 Znode 节点,分别对应:
PERSISTENT:永久节点
EPHEMERAL:临时节点
PERSISTENT_SEQUENTIAL:永久节点、序列化
EPHEMERAL_SEQUENTIAL:临时节点、序列化

创建永久节点:
[zk: localhost:2181(CONNECTED) 3] create /hello world
Created /hello 
创建临时节点:
[zk: localhost:2181(CONNECTED) 5] create -e /abc 123
Created /abc
创建永久序列化节点:
[zk: localhost:2181(CONNECTED) 6] create -s /zhangsan boy
Created /zhangsan0000000004
创建临时序列化节点:
zk: localhost:2181(CONNECTED) 11] create -e -s /lisi boy

2021-11-04

2.2、zookeeper的javaAPI

Zookeeper 是在 Java 中客户端主类,负责建立与 zookeeper 集群的会话,并提供方法进行操作。org.apache.zookeeper.Watcher
Watcher 接口表示一个标准的事件处理器,其定义了事件通知相关的逻辑,包含 KeeperState 和 EventType 两个枚举类,分别代表了通知状态和事件类型,同时定义了事件的回调方法:process(WatchedEvent event)。process 方法是 Watcher 接口中的一个回调方法,当 ZooKeeper 向客户端发送一个 Watcher 事件通知时,客户端就会对相应的 process 方法进行回调,从而实现对事件的处理。

2.2.1、节点的操作

1.创建永久节点:

/**
	 * 创建永久节点
	 * @throws Exception
	 */
	@Test
	public void createNode() throws Exception {
		RetryPolicy retryPolicy = new  ExponentialBackoffRetry(1000, 1);
//获取客户端对象
		CuratorFramework client = CuratorFrameworkFactory.newClient("192.168.52.100:2181,192.168.52.110:2181,192.168.52.120:2181", 1000, 1000, retryPolicy);
//调用start开启客户端操作
		client.start();
	//通过create来进行创建节点,并且需要指定节点类型
	client.create().creatingParentsIfNeeded().withMode(CreateMode.PERSISTENT).forPath("/hello3/world");
client.close();
	}

2.创建临时节点

/**
	 * 创建临时节点
	 * @throws Exception
	 */
	@Test
	public void createNode2() throws Exception {
		RetryPolicy retryPolicy = new  ExponentialBackoffRetry(3000, 1);
		CuratorFramework client = CuratorFrameworkFactory.newClient("node01:2181,node02:2181,node03:2181", 3000, 3000, retryPolicy);
		client.start();
	client.create().creatingParentsIfNeeded().withMode(CreateMode.EPHEMERAL).forPath("/hello5/world");
		Thread.sleep(5000);
		client.close();
	}
上一篇:win10下用Docker Desktop搭建zookeeper集群


下一篇:zookeeper定义及操作