zkCli.sh客户端命令使用
[root@iZwz9fyh8d6xm9hs0q453mZ bin]# ./zkCli.sh
./zkCli.sh -timeout 0 -r -server ip:port
./zkCli.sh -timeout 5000 -server 192.9.200.242:2181
-r :即使ZooKeeper服务器集群一般以上的服务器当掉,也给客户端体统读服务
h :显示所有命令
[zk: localhost:2181(CONNECTED) 0]
[zk: localhost:2181(CONNECTED) 0] h
ZooKeeper -server host:port -client-configuration properties-file cmd args
addWatch [-m mode] path # optional mode is one of [PERSISTENT, PERSISTENT_RECURSIVE] - default is PERSISTENT_RECURSIVE
addauth scheme auth
close
config [-c] [-w] [-s]
connect host:port
create [-s] [-e] [-c] [-t ttl] path [data] [acl]
delete [-v version] path
deleteall path [-b batch size]
delquota [-n|-b] path
get [-s] [-w] path
getAcl [-s] path
getAllChildrenNumber path
getEphemerals path
history
listquota path
ls [-s] [-w] [-R] path
printwatches on|off
quit
reconfig [-s] [-v version] [[-file path] | [-members serverID=host:port1:port2;port3[,...]*]] | [-add serverId=host:port1:port2;port3[,...]]* [-remove serverId[,...]*]
redo cmdno
removewatches path [-c|-d|-a] [-l]
set [-s] [-v version] path data
setAcl [-s] [-v version] [-R] path acl
setquota -n|-b val path
stat [-w] path
sync path
version
Command not found: Command not found h
[zk: localhost:2181(CONNECTED) 1]
创建节点
create [-s] [-e] [-c] [-t ttl] path [data] [acl]
[-s]:sequential 序列化的,即可以重复创建,在路径后面加上序列号 [-e]:ephemeral 临时的,断开连接后自动失效 [-c] :表示container node(容器节点), [-t ttl]:表示TTL Nodes(带超时时间的节点) [acl]:是针对这个节点创建一个权限的,如果创建权限了,则拥有权限的才可以访问 注:临时节点在客户端结束与服务器的会话后,自动消失
删除节点
删除节点,-v表示版本号,实现乐观锁机制
删除指定路径的节点 如果有子节点要先删除子节点
delete [-v version] path
更新节点
修改当前节点的数据内容 如果指定版本,需要和当前节点的数据版本一致
给节点赋值 -s返回节点状态
set [-s] [-v version] path data
查询节点信息
获取指定节点的值
get [-s] [-w] path
ls path:查看某个节点下的所有子节点信息
ls / :列出根节点下所有的子节点信息
stat path :获取指定节点的状态信息 分析:
[zk: localhost:2181(CONNECTED) 5] stat /zookeeper
cZxid = 0x0
ctime = Thu Jan 01 08:00:00 CST 1970
mZxid = 0x0
mtime = Thu Jan 01 08:00:00 CST 1970
pZxid = 0x0
cversion = -2
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 0
numChildren = 2
[zk: localhost:2181(CONNECTED) 6]
czxid 创建该节点的事物ID
ctime 创建该节点的时间
mZxid 更新该节点的事物ID
mtime 更新该节点的时间
pZxid 操作当前节点的子节点列表的事物ID(这种操作包含增加子节点,删除子节点)
cversion 当前节点的子节点版本号
dataVersion 当前节点的数据版本号
aclVersion 当前节点的acl权限版本号
ephemeralowner 当前节点的如果是临时节点,该属性是临时节点的事物ID
dataLength 当前节点的d的数据长度
numchildren 当前节点的子节点个数
ls2 path :是ls 和 stat两个命令的结合
quit :退出客户端
rmr path 删除当前路径节点及其所有子节点
connect host:port 和 clost :在当前连接中连接其他的ZooKeeper服务器和关闭服务器
history 和 redo cmdno :查看客户端这次会话所执行的所有命令 和 执行指定历史命令
zookeeper内存调整方法
zookeeper3.4.5内存分配
对于zookeeper内存设置多大有些疑问,这里给大家解惑一下:
首先介绍一下该如何分配内存:
文件路径:zookeeper/bin/zkEnv.sh
该文件已经明确说明有独立JVM内存的设置文件,路径是zookeeper/conf/Java.env
安装的时候这个路径下没有有java.env文件,需要自己新建一个:
vi java.env
java.env文件内容如下:
#!/bin/sh
export JAVA_HOME=/usr/java/jdk
# heap size MUST be modified according to cluster environment
export JVMFLAGS="-Xms512m -Xmx1024m $JVMFLAGS"
对于内存的分配,还是根据项目和机器情况而定。如果内存够用,适当的大点可以提升zk性能。
zookeeper节点是奇数
1、容错率:
首先从容错率来说明:(需要保证集群能够有半数进行投票)
-
2台服务器,至少2台正常运行才行(2的半数为1,半数以上最少为2),正常运行1台服务器都不允许挂掉,但是相对于 单节点服务器,2台服务器还有两个单点故障,所以直接排除了。
-
3台服务器,至少2台正常运行才行(3的半数为1.5,半数以上最少为2),正常运行可以允许1台服务器挂掉
-
4台服务器,至少3台正常运行才行(4的半数为2,半数以上最少为3),正常运行可以允许1台服务器挂掉
-
5台服务器,至少3台正常运行才行(5的半数为2.5,半数以上最少为3),正常运行可以允许2台服务器挂掉
2、防脑裂
脑裂集群的脑裂通常是发生在节点之间通信不可达的情况下,集群会分裂成不同的小集群,小集群各自选出自己的leader节点,导致原有的集群出现多个leader节点的情况,这就是脑裂。
-
3台服务器,投票选举半数为1.5,一台服务裂开,和另外两台服务器无法通行,这时候2台服务器的集群(2票大于半数1.5票),所以可以选举出leader,而 1 台服务器的集群无法选举。
-
4台服务器,投票选举半数为2,可以分成 1,3两个集群或者2,2两个集群,对于 1,3集群,3集群可以选举;对于2,2集群,则不能选择,造成没有leader节点。
-
5台服务器,投票选举半数为2.5,可以分成1,4两个集群,或者2,3两集群,这两个集群分别都只能选举一个集群,满足zookeeper集群搭建数目。
以上分析,我们从容错率以及防止脑裂两方面说明了3台服务器是搭建集群的最少数目,4台发生脑裂时会造成没有leader节点的错误。