zookeeper学习使用

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="  \

2、重启zkServer.sh

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来监听说有的网卡。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章