https://zookeeper.apache.org/doc/r3.4.13/zookeeperStarted.html#sc_ConnectingToZooKeeper Base on version 3.4.13
-
How to check if ZooKeeper is running or up from command prompt?
-
Adding 2 nodes to an existing 3-node ZooKeeper ensemble without losing the Quorum
綜合所有 Survey,完成本篇範例,主要提供:
- 觀測(Watch)ZNode 的功能(拿來當 Event-Driven 使用)
- 變更 ZNode Data 的範例
- 建立 ZNode 的範例
至於如何建立 ZooKeeper Server 就自己想辦法啦~我是直接使用 Docker Hub 上面的版本建立在 Docker 上來玩的
注意事項:
- 別在 Windows OS 中使用 ToolBox + VirtualBox 來玩 Docker 掛 ZooKeeper,我不想解釋
- Not REST, use socket
- 在 Docker container 中佈署後使用
sudo docker exec -t zookeeper bin/zkCli.sh -server 127.0.0.1:2181
進入後台,但執行指令無法正確看到 output - 可以監聽尚未存在的
NODE
echo stat | nc 172.17.0.1 8080
echo mntr | nc 172.17.0.1 8080
echo isro | nc 172.17.0.1 8080
- 到此下載
- 解壓為目錄後,於
X:\zookeeper-3.4.13\conf\
中,參考zoo_sample.cfg
來建立zoo.cfg
- 執行
X:\zookeeper-3.4.13\bin\zkServer.cmd
- 執行
X:\zookeeper-3.4.13\bin\zkCli –server 127.0.0.1:2181
可以連上 zk server,打help
可以看指令
首先了解幾件事情:
ZooKeeper
這個 class 主要就是跟 Server 連線用,有幾個情況會導致該 instance 不可再使用,如Expired
- 在 create
ZooKeeper
的 instance 時提供的Watcher
主要是針對 Server 的連線狀態做反應 ZooKeeper.exists()
是一個一次性的指令,我們大多會使用 asynchronous 類型的 method; 可以提供一個全新的Watcher
implement 或者設為 true 會直接使用 createZooKeeper
時提供的那一個Watcher
- 由於
exists()
是一個一次性的指令,當他的 callback 行為結束後,該 Node 發生的事情不會再觸發Watcher
的process()
Watcher
關注的是 Server 的連線狀態,我們在exists()
能夠使用,從設計的角度來看似乎是設計者讓它「順便可以這樣」- Server 斷線(Disconnected)會一直自動嘗試重新連線
不幸地,ZooKeeper
Client 無法保證每一次的 event 都能讓 client 的 Watcher
收到