&&大數據學習&&
🔥系列專欄: 👑哲學語錄: 用力所能及,改變世界。
💖如果覺得博主的文章還不錯的話,請點贊👍+收藏??+留言📝支持一下博主哦🤞
🍋一、zookeeper概念
Zookeeper是 Apache Hadoop項目下的一個子項目,是一個樹形目錄服務。
Zookeeper翻譯過來就是動物園管理員,他是用來管Hadoop(大象)、Hive(蜜蜂)、Pig(小豬)的管理員,簡稱zk
ZooKeeper?是一個分布式的、開源的協調服務,主要用于解決分布式系統中的一致性問題。它提供了一個簡單而強大的接口,幫助開發者在分布式環境中實現諸如配置管理、命名服務、分布式鎖、集群管理等功能。
🍋二、ZooKeeper 的架構
ZooKeeper 采用?主從架構,包含以下角色:
-
Leader
負責處理寫請求和事務操作。通過選舉機制產生。(ZooKeeper 的選舉機制主要用于其集群管理,特別是在集群啟動或領導者節點故障時,用于選出一個新的領導者節點。這個領導者節點將負責處理客戶端的請求、維護集群狀態以及與其他節點進行通信。) -
Follower
處理讀請求,并將寫請求轉發給 Leader。參與 Leader 選舉。 -
Observer(可選)
與 Follower 類似,但不參與選舉,用于擴展讀性能。 -
Client
與 ZooKeeper 集群交互的客戶端。
🍋三、zookeeper提供的主要功能
1、配置管理
在多個應用程序(或服務器)中,假如存在一些相同的配置信息,在對該配置信息進行修改時,我們需要一個一個進行修改,這樣會大大增加維護的成本,不方便管理。這時如果使用一個專門放配置中心的組件,將相同的配置信息放在配置中心,需要的時候直接拉取,這樣可以大大節約維護的成本, 而zookeeper即可實現配置中心的功能。
2.分布式鎖
????????在多個用戶訪問同一臺主機上的應用程序數據時,我們可以通過加鎖解決并發操作的問題,但是如果有多臺主機相同的應用程序要訪問同一數據時,這個時候我們在一臺主機上加鎖是不能解決另一臺主機的并發問題的,換句話說自己的鎖只對自己有效并不影響別的 ,這個時候就需要分布式鎖解決這類問題,我個人理解分布式鎖像是從所有主機中抽取出來的一把鎖,或者是有一把總鎖對所有主機都有效。zookeeper可以實現分布式鎖的功能。
????????分布式鎖允許在多個服務實例之間協調對共享資源的訪問。在分布式環境中,傳統的單機鎖機制(如線程鎖)無法跨進程或跨服務器工作,因此需要使用分布式鎖來確保在同一時間只有一個服務實例能夠訪問或修改共享資源,從而避免數據競爭和數據不一致的問題。
3.分布式應用協調
????????分布式事務:ZooKeeper 可以用于實現分布式事務的協調,確保多個分布式節點能夠協同工作,完成復雜的事務操作。
????????分布式選舉:ZooKeeper 可以用于實現分布式系統中的領導者選舉,確保在集群中只有一個節點擔任領導者角色。
選舉過程大致如下:
-
集群啟動或領導者故障:當 ZooKeeper 集群啟動時,或者當前的領導者節點因為某種原因(如崩潰或網絡分區)無法繼續工作時,集群會進入選舉狀態。
-
服務器狀態轉換:集群中的每個服務器都會將自己的狀態轉換為?
LOOKING
,表示正在尋找領導者。 -
投票過程:
- 每個服務器都會為自己投一票,并將自己的投票信息(包括服務器ID和ZXID,ZXID是ZooKeeper的事務ID,用于標識服務器的版本和狀態)發送給集群中的其他服務器。
- 服務器會收集來自其他服務器的投票,并根據一定的規則(如ZXID的大小和服務器ID的大小)來決定是否接受其他服務器的投票。
- 如果一個服務器發現自己的投票能夠贏得多數(即超過半數的服務器投票給自己),它就會成為領導者。
-
領導者確認:一旦選舉出領導者,領導者會向集群中的其他服務器發送通知,確認自己的領導地位。其他服務器在收到領導者的通知后,會將自己的狀態轉換為?
FOLLOWING
?或?OBSERVER
(對于觀察者節點),并開始跟隨領導者工作。 -
故障恢復:如果領導者節點在工作過程中出現故障,集群會重新進入選舉狀態,選舉出一個新的領導者。
4. 組服務
組成員管理:ZooKeeper 可以管理分布式系統中的組成員信息,如節點的加入、離開和更新。
負載均衡:通過組成員管理,ZooKeeper 可以幫助實現分布式系統中的負載均衡和故障恢復。
🍋四、使用場景
1. 分布式數據庫
元數據信息管理:
- 定義:在分布式數據庫中,元數據是指描述數據庫結構、配置、權限等信息的數據。
- ZooKeeper 作用:ZooKeeper 可以用于集中存儲和管理分布式數據庫的元數據。例如,數據庫管理員可以在 ZooKeeper 中創建節點來存儲數據庫表的結構信息、索引信息、權限設置等。
- 優勢:通過 ZooKeeper,數據庫管理員可以方便地查看和修改元數據,同時 ZooKeeper 的數據一致性保證確保所有節點都能獲取到最新的元數據信息。
節點狀態信息管理:
- 定義:節點狀態信息指的是分布式數據庫中各個節點的運行狀態、負載情況等信息。
- ZooKeeper 作用:ZooKeeper 可以跟蹤分布式數據庫集群中的節點信息,監控節點的狀態(如上線、下線、故障等)。例如,每個數據庫節點在啟動時可以向 ZooKeeper 注冊自己的信息,并在故障時通知 ZooKeeper。
- 優勢:數據庫管理員可以通過 ZooKeeper 實時了解集群中各個節點的狀態,從而進行更好的資源管理和故障恢復。
2. 分布式消息隊列
元數據管理:
- 定義:在分布式消息隊列中,元數據包括隊列的配置信息、消費者的消費位點等。
- ZooKeeper 作用:ZooKeeper 可以存儲和管理消息隊列的元數據。例如,消息隊列系統可以在 ZooKeeper 中創建節點來存儲隊列的名稱、消費者的消費位點等信息。
- 優勢:通過 ZooKeeper,消息隊列系統可以實現元數據的集中管理和動態更新,方便管理員進行配置和監控。
消費者協調:
- 定義:在分布式消息隊列中,消費者協調指的是多個消費者如何共同消費消息,避免消息重復消費或消息丟失。
- ZooKeeper 作用:ZooKeeper 可以用于實現消費者協調。例如,通過 ZooKeeper 的分布式鎖機制,可以確保同一時間只有一個消費者能夠處理某個消息,從而避免消息重復消費。同時,ZooKeeper 還可以用于實現消費者的負載均衡,將消息均勻分配給不同的消費者。
- 優勢:通過 ZooKeeper,消息隊列系統可以實現高效、可靠的消費者協調,提高消息處理的效率和穩定性。
3. 服務發現和注冊
服務注冊:
- 定義:服務注冊是指將服務實例的信息(如服務名稱、地址、端口等)注冊到注冊中心,以便其他服務能夠發現和調用。
- ZooKeeper 作用:ZooKeeper 可以作為服務注冊中心,允許服務提供者將自己的服務信息注冊到 ZooKeeper 中。例如,服務提供者可以在 ZooKeeper 中創建一個節點來存儲自己的服務信息。
- 優勢:通過 ZooKeeper,服務提供者可以方便地將自己的服務注冊到注冊中心,實現服務的動態發布和更新。
服務發現:
- 定義:服務發現是指服務消費者從注冊中心獲取可用的服務實例信息,以便進行服務調用。
- ZooKeeper 作用:ZooKeeper 可以幫助服務消費者從注冊中心獲取可用的服務實例信息。例如,服務消費者可以監聽 ZooKeeper 中與服務名稱相關的節點,當有新的服務實例注冊或已有的服務實例下線時,ZooKeeper 會通知服務消費者。
- 優勢:通過 ZooKeeper,服務消費者可以實時獲取可用的服務實例信息,實現服務的動態發現和調用。
4. 分布式緩存
數據一致性協調:
- 定義:在分布式緩存中,數據一致性指的是多個緩存節點之間的數據保持一致。
- ZooKeeper 作用:ZooKeeper 可以用于協調分布式緩存的一致性。例如,當某個緩存節點更新數據時,可以在 ZooKeeper 中創建一個節點來存儲更新后的數據版本信息。其他緩存節點可以監聽這個節點,當數據版本發生變化時,及時更新自己的緩存數據。
- 優勢:通過 ZooKeeper,分布式緩存系統可以實現高效、可靠的數據一致性協調,確保多個緩存節點之間的數據保持一致。
節點狀態監控:
- 定義:節點狀態監控是指對分布式緩存中的各個節點進行狀態監控,以便及時發現和處理故障節點。
- ZooKeeper 作用:ZooKeeper 可以跟蹤分布式緩存集群中的節點信息,監控節點的狀態(如上線、下線、故障等)。例如,每個緩存節點在啟動時可以向 ZooKeeper 注冊自己的信息,并在故障時通知 ZooKeeper。
- 優勢:通過 ZooKeeper,分布式緩存系統可以實時了解集群中各個節點的狀態,從而進行更好的資源管理和故障恢復。