zookeeper的shell操作
要使用shell命令去操作zookeeper之前需要先启动zookeeper。启动命令在之前安装教程中。
启动命令:/export/server/zookeeper/bin/zkServer.sh start
查看启动后的状态:/export/server/zookeeper/bin/zkServer.sh status
1. 启动zookeeper的shell客户端
zookeeper的shell客户端启动不用再装什么软件,只需要到zookeeper的安装目录下的bin目录中启动 zkCli.sh 。
先进入到zookeeper下的bin目录,如果想直接root根目录下启动,需要在命令前加上到zookeeper下的bin目录的路径。
启动命令:zkCli.sh
或者 zkCli.sh –server ip
.
两者的区别:zkCli.sh
会查找本机的zookeeper服务,然后启动连接到本机上;
zkCli.sh –server ip
会连接到你指定的IP地址,然后查看上面的zookeeper的服务,然后连接到指定的IP地址的服务器上面的zookeeper。
2. shell客户端常用命令
1. 创建节点
create [-s] [-e] path data acl
-
-s:加上的话表示是一个序列化的节点,不加表示不是序列化的节点
-
-e:加上的表示是一个临时节点,不加表示持久节点
-
path:表示创建的路径在哪里
-
data:表示节点中保存的数据
-
acl:权限控制
create /zktmp 123456 #在根目录下创建临时节点 zktmp,保存内容为123456
create /hellozk hello #在根目录下创建持久节点hellozk,保存内容为hello
create -s -e /hellozk/a 123 #在hellozk节点下创建序列化的临时节点 a,保存内容123
create -s /hellozk/a 456 #在hellozk节点下创建序列化的持久节点 a,保存内容123
注意点:
- 我们在node-1 上面创建了这个 zktmp的临时节点,当我们使用
Ctrl + c
断开连接时,从其他虚拟机去查看发现 zktmp这个节点没有被删除,这个不是不符合我们临时节点的特性(连接断开后删除该节点),zookeeper需要判断你这个是真正的断开,还是因为网络不稳定等其他原因而导致的断开,所以需要等待几秒中才能看到这个临时节点被删除。 - 当我们创建一个序列化节点时,zookeeper会自动的在我们设定好的名称后面补齐十位数字,从0000000000开始递增。从这我们可以得知节点的创建顺序。
- 如果我们在同一个节点下创建两个名称相同的序列化节点时,不会报错,因为后面补齐的数字不一样,可以区分。
- 当我们从另外一个节点位置开始创建序列化节点时,补齐的数字将重新从0000000000 开始。
2. 读取节点
ls path [watch] # 查看path路径下的所有节点,只能看到指定 path 路径下的节点,看不到下一层级的节点
get path [watch] # 查看指定节点的属性和节点内容
ls2 path [watch] # 与get命令类似,可以查看指定节点的属性和下一节点,但是不能查看节点内容
3. 更新节点
set path data [version] # data 就是要更新的新内容,version 表示数据版本。
注意:版本号如果输入的话,就需要和当前的版本号保持一致,不一致则会报错。
4. 删除节点
delete path [version] # 删除节点
Rmr path # 递归删除节点
注意:
- 若删除节点存在子节点,那么无法删除该节点,必须先删除子节点,再删除父节点。可以递归删除节点。
5. 限制节点
setquota -n|-b val path # 对节点增加限制。
listquota path # 列出指定节点的 quota(限制)
delquota [-n|-b] path # 删除 quota
- **n:**表示子节点的最大个数,与限制最大长度二选一,
- **b:**表示数据值的最大长度,与限制子节点最大个数二选一
- **val:**子节点最大个数或数据值的最大长度
- **path:**节点路径
注意: 当限制了子节点个数后,如果我们创建的子节点超过了限制的个数,不会报错,子节点也能创建成功;但是会在会在zookeeper的日志文件中记录一个警告,说明节点数量已经超了限制。
zookeeper日志在 root 根目录下,有一个zookeeper.out 文件,cat这个文件即可。
删除限制时,如果创建的是 -n 的限制(限制子节点的最大数量),则加上 -n, -b同理。
6. 其他命令
history # 列出命令历史
redo # 该命令可以重新执行指定命令编号的历史命令,命令编号可以通过 history 查看