zookeeper c api連接管理問題

背景:使用zookeeper3.4.8   的 c api寫了一個客戶端來測試zookeeper集羣

在測試到其中一個點的時候,遇到一些困惑:

假如zookeeper集羣啓動了三個zookeeper實例,對應ip端口分別是:host1:port1,host2:port2,host3:port3

然後在客戶端側,調用zookeeper_init的時候,也需要提供一個ip列表。

問題就在如何配置這個ip列表:

1,假如我配置這個IP列表爲host1:port1,host2:port2,host3:port3, 那麼啓動多個客戶端,整個跑起來都正常。各個客戶端會根據某個負載均衡的算法連接到不同的zookeeper實例上面。並且停掉某一個zookeeper服務,客戶端能繼續正常運行(切換連接到其它zookeeper服務)。

2,假如我配置這個ip列表爲:host1:port1。 那麼當我將host1:port1對應的zookeeper服務停到(這時還有兩個zookeeper服務在正常運行),客戶端就會斷開連接,並且不會自動切換連接到其它zookeeper服務。客戶端就會進入異常狀態。


上面的問題可以總結爲:在zookeeper3.4.8版本里面,客戶端必須要靜態配置所有zookeeper服務節點ip端口, 客戶端才能更好地做容災服務。

但是這個靜態配置就破壞了分佈式的思維,例如假如我現在需要對zookeeper集羣擴容(從三個實例擴容到五個實例)。那麼我需要更改所有客戶端的ip端口靜態配置並且重啓客戶端。

對於客戶端而言,最理想的狀態是,不需要關心集羣裏面的實現細節,也不需要關心集羣的實例個數。


不過對於上面問題,在zookeeper3.5版本後,已經有提供相關api實現了。詳細見https://issues.apache.org/jira/browse/ZOOKEEPER-762






收集的其它一些相關文章:

Zookeeper開發常見問題

http://tech.uc.cn/?p=1189

zookeeper c 客戶端使用情景分析(1.整體框架)

http://tech.uc.cn/?p=974

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