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來監聽說有的網卡。