一、什么是ZooKeeper
ZooKeeper是一個分布式服務協調框架,提供了分布式數據一致性的解決方案,基于ZooKeeper的數據結構,Watcher,選舉機制等特點,可以實現數據的發布/訂閱,軟負載均衡,命名服務,統一配置管理,分布式鎖,集群管理等等。
二、為什么使用ZooKeeper
ZooKeeper能保證:
- 更新請求順序進行。來自同一個client的更新請求按其發送順序依次執行
- 數據更新原子性。一次數據更新要么成功,要么失敗
- 全局唯一數據視圖。client無論連接到哪個server,數據視圖都是一致的
- 實時性。在一定時間范圍內,client讀到的數據是最新的
三、數據結構
ZooKeeper的數據結構和Unix文件系統很類似,總體上可以看做是一棵樹,每一個節點稱之為一個ZNode,每一個ZNode默認能存儲1M的數據。每一個ZNode可通過唯一的路徑標識。如下圖所示:
創建ZNode時,可以指定以下四種類型,包括:
- PERSISTENT,持久性ZNode。創建后,即使客戶端與服務端斷開連接也不會刪除,只有客戶端主動刪除才會消失。
- PERSISTENT_SEQUENTIAL,持久性順序編號ZNode。和持久性節點一樣不會因為斷開連接后而刪除,并且ZNode的編號會自動增加。
- EPHEMERAL,臨時性ZNode。客戶端與服務端斷開連接,該ZNode會被刪除。
- EPEMERAL_SEQUENTIAL,臨時性順序編號ZNode。和臨時性節點一樣,斷開連接會被刪除,并且ZNode的編號會自動增加。
四、監聽通知機制
Watcher是基于觀察者模式實現的一種機制。如果我們需要實現當某個ZNode節點發生變化時收到通知,就可以使用Watcher監聽器。
客戶端通過設置監視點(watcher)向 ZooKeeper 注冊需要接收通知的 znode,在 znode 發生變化時 ZooKeeper 就會向客戶端發送消息。
這種通知機制是一次性的。一旦watcher被觸發,ZooKeeper就會從相應的存儲中刪除。如果需要不斷監聽ZNode的變化,可以在收到通知后再設置新的watcher注冊到ZooKeeper。
監視點的類型有很多,如監控ZNode數據變化、監控ZNode子節點變化、監控ZNode 創建或刪除。
五、選舉機制
ZooKeeper是一個高可用的應用框架,因為ZooKeeper是支持集群的。ZooKeeper在集群狀態下,配置文件是不會指定Master和Slave,而是在ZooKeeper服務器初始化時就在內部進行選舉,產生一臺做為Leader,多臺做為Follower,并且遵守半數可用原則。
由于遵守半數可用原則,所以5臺服務器和6臺服務器,實際上最大允許宕機數量都是3臺,所以為了節約成本,集群的服務器數量一般設置為奇數。
如果在運行時,如果長時間無法和Leader保持連接的話,則會再次進行選舉,產生新的Leader,以保證服務的可用。
六、初の體驗
首先在官網下載ZooKeeper,我這里用的是3.3.6版本。
然后解壓,復制一下/conf目錄下的zoo_sample.cfg文件,重命名為zoo.cfg。
修改zoo.cfg中dataDir的值,并創建對應的目錄:
最后到/bin目錄下啟動,我用的是window系統,所以啟動zkServer.cmd,雙擊即可:
啟動成功的話就可以看到這個對話框:
可視化界面的話,我推薦使用ZooInspector
,操作比較簡便
那么如何才能正確的掌握Redis呢?
為了讓大家能夠在Redis上能夠加深,所以這次給大家準備了一些Redis的學習資料,還有一些大廠的面試題,包括以下這些面試題
-
并發編程面試題匯總
-
JVM面試題匯總
-
Netty常被問到的那些面試題匯總
-
Tomcat面試題整理匯總
-
Mysql面試題匯總
-
Spring源碼深度解析
-
Mybatis常見面試題匯總
-
Nginx那些面試題匯總
-
Zookeeper面試題匯總
-
RabbitMQ常見面試題匯總
JVM常頻面試:
Mysql面試題匯總(一)
Mysql面試題匯總(二)
Redis常見面試題匯總(300+題)
有需要的朋友,可以直接點擊這里免費獲取
[外鏈圖片轉存中…(img-yuzEorK4-1625826510323)]
有需要的朋友,可以直接點擊這里免費獲取
絕無套路!!