zookeeper c api連線管理問題

2021-07-13 21:27:37 字數 832 閱讀 6588

背景:使用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實現了。詳細見

內連線,外連線,左連線,右連線,全連線

連線是指將關聯式資料庫中的兩個表根據內容一定的條件連線成乙個表.內連線是最常用的鏈結,也叫等值鏈結,最常見的格式是 selecta.b.fromta as a tb as b wherea.id b.id 或者 selecta.b.fromtaasainnerjoin tbasb on a.id b...

連線 交叉連線 內連線 外連線 自連線

本文非原創 可分為 交叉連線 內連線 外連線 自連線 1.使用交叉連線 它是非限制連線,就是將兩個 不加任何條件的組合在一起,即第乙個 的所有記錄分別和第二個 的每一條記錄相連線 組合成新的記錄,連線後結果集的行數是兩個 的行數的乘積,列為兩表列之和。語法 1 select 列名列表 from 表名...

左連線,右連線,內連線,自連線

最近公司在招人,同事問了幾個自認為資料庫可以的應聘者關於庫連線的問題,回答不盡理想 現在在這寫寫關於它們的作用 假設有如下表 乙個為投票主表,乙個為投票者資訊表 記錄投票人ip及對應投票型別,左右連線實際說是我們聯合查詢的結果以哪個表為準 1 如右接連 right join 或 right oute...