zookeeper使用
ls ls2 stat get
ls : 查看目录简要信息
ls2 : 查看目录详情
stat : 查看状态
get : 获取节点数据
create
1.创建默认节点:create /tyilack nodeData
2.创建临时节点(session关闭会自动删除,但不会立刻删除):create -e /tyilack nodeData
3.创建节点序列(从0000000001开始自动递增):create -s /tyilack nodeData
set
set /tyilack new-data
set /tyilack 123 1(乐观锁,最后的1是版本号,必须使用get命令的dataVersion才可以更新)
delete
delete /tyilack/sec0000000003 普通删除
delete /tyilack/sec0000000003 0 删除指定版本号的节点(乐观锁)
watcher
创建
stat /watcher-test watch
get /watcher-test watch
ls /tyilack watch
操作 | 父目录 | 子目录 |
---|---|---|
set | NodeDataChanged | NodeChildrenChanged |
create | NodeCreated | NodeChildrenChanged |
delete | NodeDeleted | (没回调) |
acl相关
acl构成:[scheme:id:permissions]
scheme 权限机制,id 允许访问的用户 , permissions 权限组合字符串
scheme:
1、world:world下只有一个id(anyone),组合写法是
world:anyone:[permissions]
2、认证登录,需要登录的用户有权限就可以访问,写法是
auth:user:password:[permissions]
3、digest:需要对密码加密才可以访问,写法是:
digest:username:BASE64(SHA1(password)):[permissions]
4、ip:指定ip才有权限访问,写法是:
ip:192.168.1.1:[permissions]
5、super:超级管理员,拥有所有的权限
permission(crdwa):
1、create© : 创建子节点
2、read® : 获取当前节点/子节点
3、write(w) : 设置节点数据
4、delete(d) : 删除子节点
5、admin(a) : 设置权限
获取权限
getAcl /tyilack/abc
默认权限是:
'world,'anyone
: cdrwa
world权限
setAcl /tyilack/abc world:anyone:rda
auth权限
1、登录:
addauth digest tyilack:tyilack
2、设置auth权限
setAcl /names/tyilack auth:tyilack:tyilack:cdrwa
+ED8v8PXrj6/XbAWJU+KRU1YEAk=
ip权限
setAcl /names/ip ip:192.168.1.110:cdrwa
super权限
1、修改zkServer.sh,添加super管理员
如下命令:
nohup "$JAVA" "-Dzookeeper.log.dir=${ZOO_LOG_DIR}" "-Dzookeeper.root.logger=${ZOO_LOG4J_PROP}" \
改成:
nohup "$JAVA" "-Dzookeeper.log.dir=${ZOO_LOG_DIR}" "-Dzookeeper.root.logger=${ZOO_LOG4J_PROP}" "-Dzookeeper.DigestAuthenticationProvider.superDigest=tyilack:+ED8v8PXrj6/XbAWJU+KRU1YEAk=" \
3、访问前先登录super用户
addauth digest tyilack:tyilack
zookeeper四字命令
1、安装:
yum install nc
2、使用
//状态信息
echo stat | nc localhost 2181
Zookeeper version: 3.4.11-37e277162d567b55a07d1755f0b31c32e93c01a0, built on 11/01/2017 18:06 GMT
Clients:
/127.0.0.1:55224[0](queued=0,recved=1,sent=0)
Latency min/avg/max: 0/2/53
Received: 34
Sent: 33
Connections: 1
Outstanding: 0
Zxid: 0x4d
Mode: standalone
Node count: 9
//是否正在运行
echo ruok | nc localhost 2181
imok
//列出未处理的会话和临时节点
echo dump | nc localhost 2181
SessionTracker dump:
Session Sets (1):
1 expire at Sat Feb 06 10:26:34 CST 1971:
0x1081189bd1f0002
ephemeral nodes dump:
Sessions with Ephemerals (0):
// 查看配置信息
echo conf | nc localhost 2181
clientPort=2181
dataDir=/usr/local/zookeeper/dataDir/version-2
dataLogDir=/usr/local/zookeeper/dataLogDir/version-2
tickTime=2000
maxClientCnxns=60
minSessionTimeout=4000
maxSessionTimeout=40000
serverId=0
zookeeper配置集群遇到的问题:
./zkServer.sh start-foreground
运行后遇到如下报错:
en channel to 3 at election address /ip:3890
java.net.ConnectException: Connection refused (Connection refused)
at java.base/java.net.PlainSocketImpl.socketConnect(Native Method)
at java.base/java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:400)
at java.base/java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:243)
at java.base/java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:225)
at java.base/java.net.SocksSocketImpl.connect(SocksSocketImpl.java:402)
at java.base/java.net.Socket.connect(Socket.java:591)
at org.apache.zookeeper.server.quorum.QuorumCnxManager.connectOne(QuorumCnxManager.java:558)
at org.apache.zookeeper.server.quorum.QuorumCnxManager.connectAll(QuorumCnxManager.java:610)
at org.apache.zookeeper.server.quorum.FastLeaderElection.lookForLeader(FastLeaderElection.java:845)
at org.apache.zookeeper.server.quorum.QuorumPeer.run(QuorumPeer.java:957)
解决方法:在zoo.cfg文件中加入如下配置即可
quorumListenOnAllIPs=true
具体原因:https://blog.csdn.net/XiyouLinux_Kangyijie/article/details/76704639
quorumListenOnAllIPs:
当设置为true时,ZooKeeper服务器将会在所有可用的IP地址上监听来自其对等点的连接请求,而不仅是配置文件的服务器列表中配置的地址。它会影响处理ZAB协议和Fast Leader Election协议的连接。默认值是false。这个和云服务器的一些虚拟技术有关,因为云服务器用的是虚拟网卡,所以需要设置quorumListenOnAllIPs=true来监听说有的网卡。