使用zookeeper乙個簡單分布式demo

2021-08-09 16:05:31 字數 3017 閱讀 1964

zookeeper是乙個提供分布式程式協調服務的應用,它的命名空間類似linux系統檔案路徑等等。 具體描述可以參考官網

本文將描述如何借助zookeeper構建乙個簡單的任務發布執行應用,使用curator。(我也是剛接觸zk,如有不對的地方希望指出.謝謝)

我將任務發布部分作為server,任務處理部分作為client

server部分功能比較簡單。主要進行任務的發布。

首先server啟動時向zk建立節點/test,為持久節點

之後我們向server提交任務,假設任務名稱為localtask,資料為hello worldserver會向zk/test節點下註冊新的任務節點,這是乙個持久節點,以任務名作為節點名,任務的資料存放在節點內。

client部分主要接收任務,並允許任務。同時一旦某個執行任務所在的機器掛掉,其它機器能夠接管該任務。下面以乙個client為例來介紹。

client啟動時會向zk新增對/test節點的listener

server發布任務後,client能夠監聽任務節點的建立

client發現新任務時,首先會對該任務節點新增子節點變化的listener,之後會嘗試對任務加鎖,加鎖成功的客戶端能夠執行任務。

如何進行加鎖: 建立任務節點的子節點/lock,這是乙個臨時節點。 因為zookeeper會保證多個客戶端同時建立同乙個節點,只有一客戶端能夠建立成功。當某台機器宕機,那麼就與zk失去了心跳,那麼該臨時節點就會被刪除,那麼其它節點會嘗試去加鎖。

如果/lock節點建立成功,則表示當前客戶端獲得了執行任務的權利。客戶端開始啟動任務

這裡只給出部分**,全部**

建立任務根節點

public

void

start()

catch

(exception e)

}}

建立任務

public

void

createtask

(string taskname,

byte

data)

trycatch

(exception e)

", path, e);}

}

新增對任務根節點的listener

public

void

registry()

throws exception "

, event.

getdata()

.getpath()

);lockandwork

(client, event)

;addlocklistener

(client, event.

getdata()

.getpath()

);break

;case child_removed:

log.

info

("child removed; node path: {}"

, event.

getdata()

.getpath()

);break;}

});}

server任務發布後,建立對任務節點的listener,並嘗試對任務加鎖,如果加鎖成功則執行任務

private

boolean

trylock

(curatorframework zkclient, string path)

catch

(exception e)

", path, e)

;return

false;}

return

true;}

private

void

lockandwork

(curatorframework zkclient, pathchildrencacheevent event)

//lock succeed

createtask

(nodedata);}

private

void

createtask

(byte

data)

", datastr)

;}

zookeeper簡單使用

zookeeper是一種分布式協調服務,用於管理大量主機。在分布式環境中協調和管理服務是乙個複雜的過 程。zookeeper通過其簡單的體系結構和api解決了這個問題。zookeeper允許開發人員專注於核心應用程式邏輯,而不必擔心應用程式的分布式性質。zookeeper框架最初是在 yahoo 構...

記錄乙個使用zookeeper資料同的乙個問題

今天在做zookeeper資料同步的時候,不知道是自己的啟動步驟錯了還是配置配有配,使用zookeeper做資料同步的時候資料一致無法同步到zookeeper,並且專案中的斷點也一直進不去。配置zookeeper作為資料同步方式,修改admin和bootstrap的配置檔案 zookeeper ur...

5 2 搭乙個zookeeper集群

在第乙個已經啟動起來的zookeeper,如果停止,用.zkserver.sh stop 如果要搭集群,那麼一定要修改配置檔案 在conf裡面的zoo.cfg裡修改 vim zoo.cfg 詳細解釋 zookeeper的預設配置檔案為zookeeper conf zoo sample.cfg,需要將...