ZooKeeper簡介

通過優銳課核心java學習筆記中,我們可以看到,碼了很多專業的相關知識, 分享給大家參考學習。

讓我們討論一下分佈式系統以及ZooKeeper如何適應圖片。

在本系列的後續文章中,我們將討論將由集羣中的HBase和OpenTSDB使用的ZooKeeper。

在談論ZooKeeper之前,讓我們解釋一下分佈式系統以及對ZooKeeper的需求。
分佈式系統

當由通過計算機網絡鏈接在一起的獨立計算實體組成的軟件系統及其組件相互通信和協調以實現共同目標時,這稱爲分佈式系統。 (例如:多人在線遊戲,例如《部落衝突》)

分佈式系統的優勢
可擴展性:我們可以通過在集羣中添加更多計算機來輕鬆擴展分佈式系統。
冗餘:羣集中的所有機器都提供相同的服務,因此,如果其中任何一臺機器不可用,則不會停止工作。

這些系統中的過程需要某種類型的協議才能正確有效地運行。這種協議也稱爲分佈式協調。

我們可以建立自己的協調系統,但是,這將需要大量的工作,而且並不是一件容易的事。 問題在於實施正確的容錯解決方案。
那麼,有什麼可以替代的選擇嗎?
我們可以使用諸如ZooKeeper之類的強大協調服務。
什麼是ZooKeeper?
ZooKeeper是一項集中式服務,用於維護配置信息,命名,提供分佈式同步和提供組服務。 ZooKeeper簡單,分佈式,可靠且快速。
維護配置信息:它維護集羣配置信息,該信息在集羣中的所有節點之間共享。
命名:Zookeeper可以用作命名服務,以便集羣中的一個節點可以在大型集羣中找到另一個節點,例如:1000個節點集羣
提供分佈式同步:我們還可以使用Zookeeper通過使用鎖,隊列等來解決集羣中的分佈式同步問題。
提供羣組服務:Zookeeper還可以通過選擇集羣中的主機來幫助進行羣組服務(領導者選舉過程)。
ZooKeeper可以在複製模式和獨立模式下工作。
複製模式
在複製模式下,涉及多個服務器。 選擇其中一臺服務器作爲領導者,其他服務器作爲跟隨者。 如果領導者失敗,則跟隨者之一將被選爲大師。

羣集中的服務器必須彼此瞭解。 它們在持久存儲中維護內存中的狀態圖像以及事務日誌和快照。 只要大多數服務器可用,ZooKeeper服務將可用。
客戶端可以連接到單個ZooKeeper服務器。 但是,當客戶端啓動時,會爲它們提供服務器列表,因此當與已連接服務器的連接失敗時,客戶端可以連接到羣集中的任何其他服務器。
讀取操作可以從羣集中的任何服務器執行讀取操作,但是寫入操作必須經過領導者。
獨立模式
ZooKeeper也可以獨立運行。 在這種模式下,所有客戶端都連接到單個Zookeeper服務器。

在這種模式下,我們將失去複製和高可用性的優勢。
ZooKeeper數據模型
ZooKeeper具有層次結構的名稱空間。 名稱空間可以具有與其關聯的數據以及子級。 到節點的路徑始終表示爲規範的,絕對的,斜槓分隔的路徑。 沒有相對參考。 這些名稱空間的組織方式非常類似於Linux中的文件系統。
Znode:
ZooKeeper樹中的每個節點都稱爲znode。 Znodes維護一個統計信息結構,其中包括用於數據更改,acl(訪問控制列表)更改的版本號。 數據存儲在znode中。
部署 ZooKeeper:
要部署Zookeeper,我們將使用官方Zookeeper Docker映像
在Server1中
version: '3.1'
services:
zoo1:
image: zookeeper:latest
restart: always
hostname: zoo1
ports:

  • 2181:2181
  • 2888:2888
  • 3888:3888
    environment:
    ZOOKEEPER_CLIENT_PORT: 2181
    ZOO_MY_ID: 1
    ZOO_SERVERS: server.1=0.0.0.0:2888:3888 server.2=server2IP:2888:3888 server.3=server3IP:2888:3888-
    查看要點上的代碼。
    運行給定的yml server1 docker-compose -f zoo1.yml up -d
    在 Server2中
    version: '3.1'
    services:
    zoo2:
    image: zookeeper:latest
    restart: always
    hostname: zoo2
    ports:
  • 2181:2181
  • 2888:2888
  • 3888:3888
    environment:
    ZOOKEEPER_CLIENT_PORT: 2181
    ZOO_MY_ID: 2
    ZOO_SERVERS: server.1=server1IP:2888:3888 server.2=0.0.0.0:2888:3888 server.3=server3IP:2888:3888
    查看要點上的代碼.
    運行給定的yml server2 docker-compose -f zoo2.yml up -d
    在Server3中
    version: '3.1'
    services:
    zoo2:
    image: zookeeper:latest
    restart: always
    hostname: zoo2
    ports:
  • 2181:2181
  • 2888:2888
  • 3888:3888
    environment:
    ZOOKEEPER_CLIENT_PORT: 2181
    ZOO_MY_ID: 3
    ZOO_SERVERS: server.1=server1IP:2888:3888 server.2=server2IP:2888:3888 server.3=0.0.0.0:2888:3888
    查看要點上的代碼.
    在server3中運行給定的yml docker-compose -f zoo3.yml up -d
    要檢查Zookeeper的狀態:
    root@host:~# nc localhost 2181
    stats
    你可以在所有服務器上嘗試給定的命令,然後在輸出中檢查模式,以查找領導者和跟隨者。
    *注意:將所有yml中的server1IP,server2IP和server3IP替換爲其各自的值。

喜歡這篇文章的可以點個贊,歡迎大家留言評論,記得關注我,每天持續更新技術乾貨、職場趣事、海量面試資料等等
 > 如果你對java技術很感興趣也可以交流學習,共同學習進步。 
不要再用"沒有時間“來掩飾自己思想上的懶惰!趁年輕,使勁拼,給未來的自己一個交代

文章寫道這裏,歡迎完善交流。最後奉上近期整理出來的一套完整的java架構思維導圖,分享給大家對照知識點參考學習。有更多JVM、Mysql、Tomcat、Spring Boot、Spring Cloud、Zookeeper、Kafka、RabbitMQ、RockerMQ、Redis、ELK、Git等Java乾貨

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