首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

ZooKeeper 入門到集群實戰:架構、節點類型、監聽器、Java 客戶端與高可用部署

     編輯:Java 綜合教學

ZooKeeper 基礎架構

  • 命名空間: 類文件系統樹,根路徑 /,節點稱 znode,數據存內存,高吞吐低延遲。
  • 四類節點:
    1. PERSISTENT:永久,客戶端斷開不刪除。
    2. PERSISTENT_SEQUENTIAL:永久+順序號。
    3. EPHEMERAL:臨時,會話結束自動刪除。
    4. EPHEMERAL_SEQUENTIAL:臨時+順序號。
  • Watch 機制: 客戶端註冊監聽,節點數據/子節點/刪除變更觸發通知,一次性觸發。

常用命令 (zkCli.sh)

ls /                    # 列出根節點
create /node "data"     # 創建持久節點
get /node               # 獲取數據及元數據
set /node "new data"    # 更新數據
delete /node            # 刪除節點

Java 客戶端核心 API

ZooKeeper zk = new ZooKeeper("192.168.2.129:2181", 2000, event -> {
    // Watcher 回調
    zk.getData("/node", true, null); // 重新註冊 watch
});

// 創建節點
zk.create("/conf", null, Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
zk.create("/conf/web.xml", data, Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);

// 讀取/更新/刪除/獲取子節點
byte[] data = zk.getData("/node", true, null);
zk.setData("/node", newData, -1);
List<String> children = zk.getChildren("/node", true);
zk.delete("/node", -1);

注意: 順序節點創建後路徑自動追加序號,操作時需帶上完整路徑(如 /node/testNode0000000001)。

高可用集群搭建 (3 節點)

服務器IPclientPortpeerPortelectionPort
1192.168.2.127218128813881
2192.168.2.128218228823882
3192.168.2.130218328833883

關鍵步驟

  1. 各節點解壓、創建 data/logs 目錄。
  2. 配置 zoo.cfg:dataDir、dataLogDir、clientPort、server.1=IP:2881:3881 等。
  3. data 目錄創建 myid 文件,內容為節點編號 (1/2/3)。
  4. 防火牆開放 218x/288x/388x 端口。
  5. 啟動 zkServer.sh start,status 確認一 Leader 兩 Follower。

Dubbo 整合與高可用驗證

dubbo.registry.address=zookeeper://192.168.2.127:2181?backup=192.168.2.128:2182,192.168.2.130:2183

測試:停止節點 128,客戶端自動切換至 127;再停 127,集群不可用(過半節點失效)。驗證「過半節點正常即服務可用」特性。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved