您好,登錄后才能下訂單哦!
這篇文章主要介紹ZooKeeper集群如何安裝、配置 ,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!
一. ZooKeeper介紹
ZooKeeper是一個分布式的,開放源碼的分布式應用程序協調服務,是Google的Chubby一個開源的實現,是Hadoop和Hbase的重要組件。它是一個為分布式應用提供一致性服務的軟件,提供的功能包括:配置維護、命名服務、分布式同步、組服務等
二. ZooKeeper的使用場景
數據發布與訂閱(配置中心)
發布與訂閱模型,即所謂的配置中心,顧名思義就是發布者將數據發布到ZK節點上,供訂閱者動態獲取數據,實現配置信息的集中式管理和動態更新。例如全局的配置信息,服務式服務框架的服務地址列表等就非常適合使用。
注意:在上面提到的應用場景中,有個默認前提是:數據量很小,但是數據更新可能會比較快的場景。
這里說的負載均衡是指軟負載均衡。在分布式環境中,為了保證高可用性,通常同一個應用或同一個服務的提供方都會部署多份,達到對等服務。而消費者就須要在這些對等的服務器中選擇一個來執行相關的業務邏輯,其中比較典型的是消息中間件中的生產者,消費者負載均衡。
在某個消費者故障或者重啟等情況下,其他消費者會感知到這一變化(通過 zookeeper watch消費者列表),然后重新進行負載均衡,保證所有的分區都有消費者進行消費。
命名服務(Naming Service)
命名服務也是分布式系統中比較常見的一類場景。在分布式系統中,通過使用命名服務,客戶端應用能夠根據指定名字來獲取資源或服務的地址,提供者等信息。被命名的實體通常可以是集群中的機器,提供的服務地址,遠程對象等等——這些我們都可以統稱他們為名字(Name)。其中較為常見的就是一些分布式服務框架中的服務地址列表。通過調用ZK提供的創建節點的API,能夠很容易創建一個全局唯一的path,這個path就可以作為一個名稱。
注意,所有向ZK上注冊的地址都是臨時節點,這樣就能夠保證服務提供者和消費者能夠自動感應資源的變化。
分布式通知/協調
ZooKeeper中特有watcher注冊與異步通知機制,能夠很好的實現分布式環境下不同系統之間的通知與協調,實現對數據變更的實時處理。使用方法通常是不同系統都對ZK上同一個znode進行注冊,監聽znode的變化(包括znode本身內容及子節點的),其中一個系統update了znode,那么另一個系統能夠收到通知,并作出相應處理
1). 另一種心跳檢測機制:檢測系統和被檢測系統之間并不直接關聯起來,而是通過zk上某個節點關聯,大大減少系統耦合。
2). 另一種系統調度模式:某系統有控制臺和推送系統兩部分組成,控制臺的職責是控制推送系統進行相應的推送工作。管理人員在控制臺作的一些操作,實際上是修改了ZK上某些節點的狀態,而ZK就把這些變化通知給他們注冊Watcher的客戶端,即推送系統,于是,作出相應的推送任務。
3). 另一種工作匯報模式:一些類似于任務分發系統,子任務啟動后,到zk來注冊一個臨時節點,并且定時將自己的進度進行匯報(將進度寫回這個臨時節點),這樣任務管理者就能夠實時知道任務進度。
總之,使用zookeeper來進行分布式通知和協調能夠大大降低系統之間的耦合
集群管理與Master選舉
Master選舉則是zookeeper中最為經典的應用場景了。
分布式鎖
分布式鎖,這個主要得益于ZooKeeper為我們保證了數據的強一致性。鎖服務可以分為兩類,一個是 保持獨占,另一個是 控制時序。
分布式隊列
隊列方面,簡單地講有兩種,一種是常規的先進先出隊列,另一種是要等到隊列成員聚齊之后的才統一按序執行。對于第一種先進先出隊列,和分布式鎖服務中的控制時序場景基本原理一致,這里不再贅述。 第二種隊列其實是在FIFO隊列的基礎上作了一個增強。通常可以在 /queue 這個znode下預先建立一個/queue/num 節點,并且賦值為n(或者直接給/queue賦值n),表示隊列大小,之后每次有隊列成員加入后,就判斷下是否已經到達隊列大小,決定是否可以開始執行了。這種用法的典型場景是,分布式環境中,一個大任務Task A,需要在很多子任務完成(或條件就緒)情況下才能進行。這個時候,凡是其中一個子任務完成(就緒),那么就去 /taskList 下建立自己的臨時時序節點(CreateMode.EPHEMERAL_SEQUENTIAL),當 /taskList 發現自己下面的子節點滿足指定個數,就可以進行下一步按序進行處理了。
三. ZooKeeper的集群安裝部署
**要將 ZK 集群的節點數量要為奇數(2n+1:如 3、5、7 個節點)較為合適** 服務器 1:192.168.1.81 端口:2181、2881、3881 服務器 2:192.168.1.82 端口:2182、2882、3882 服務器 3:192.168.1.83 端口:2183、2883、3883 1. 修改/etc/hosts 192.168.1.81 zk-01 192.168.1.82 zk-02 192.168.1.83 zk-03 2. 解壓zookeeper,在安裝目錄中創建data,logs目錄 3. copy 安裝文件中conf/ 下的 zoo_sample.cfg cp zoo_sample.cfg zoo.cfg 4. 配置每個節點的zoo.cfg,例如: #心跳時間 tickTime=2000 #Zookeeper 服務器集群中連接到 Leader 的 Follower 服務器 initLimit=10 syncLimit=5 dataDir=/${ZK_HOME}/node-01/data dataLogDir=/${ZK_HOME}/node-01/logs clientPort=2181 server.1=zk-01:2881:3881 server.2=zk-02:2882:3882 server.3=zk-03:2883:3883 5. 在 dataDir=/${ZK_HOME}/data 下創建 myid 文件分別是配置中server.x中x的值 6. iptables中過濾暴露的端口 7. 啟動 /${ZK_HOME}/bin/zkServer.sh start 8. 偵聽 tail -500f /${ZK_HOME}/bin/zookeeper.out
以上是“ZooKeeper集群如何安裝、配置 ”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。