大数据技术:Zookeeper分布式协调服务
1 Zookeeper概念簡介
Zookeeper是一個分布式協調服務,就是為用戶的分布式應用程序提供協調服務
A、? zookeeper是為別的分布式程序進行服務的
B、 zookeeper本身就是一個分布式應用程序(只有半數以上的節點存活2,zk就能正服務)
C、 Zookeeper所提供的服務涵蓋:主從協調、服務器節點狀態上下線、統一配置管理、分布式共享鎖、同一名稱服務………..
D、? 雖然說可以提供各種服務,但是zookeeper在底層其實只使用兩個功能
管理(存儲、讀取)用戶提交的數據
并且為數據提供節點監聽的服務;
一.可以利用上面兩個功能做到分布式系統的高可用:
在下面這個系統中,采集程序是分布式的。由于采集程序所在的節點會隨時隨地的發送系統故障,導致整個分布式系統不可用。所以必須為整個系統提高一種高可用的解決方案。
首先每個采集程序都需要向第三方組件注冊自己的信息,并且每隔一段時間必須把這個狀態進行更新。比如說第一個采集程序注冊了信息/servers/server1,第二個采集程序注冊了信息/servers/server2。并且這個第三方組件還能夠提供監聽功能,能夠監聽/servers節點,如果采集程序掛掉后。第三方組件能夠監聽到這個節點的變化,并且能夠通知其他系統中的采集程序接管這個采集程序上的消息。
二.服務器主從選舉場景:
在一個系統中有這樣一個場景,服務程序為客戶端程序提供各種各樣的服務。但是存在服務程序由于各種原因,導致服務程序所在的機器掛掉,導致整個系統不可用。所以必須為整個系統提供一種高可用的解決方案。首先每個服務程序需要向第三方組件進行注冊,比請求每隔一段時間必須把這個狀態進行更新。客戶端程序可以通過訪問這個第三方組件找到Master,然后請求Master服務器程序。第三方組件能夠監聽/Servers節點的狀態,如果發現Master狀態不可用,然后進行選舉。選舉新的服務程序稱為Master
三.配置管理使用場景
利用第三方托管管理分布式程序的配置信息
Zookeeper集群的角色:Leader和follower(Observer)
只要集群中有半數以上節點存活,集群就能提供服務
2 Zookeeper集群機制
半數機制:集群中半數以上的集群存活,集群可用
Zookeeper適合在奇數臺機器上部署!!!
3???????Zookeeper 數據更新和訪問機制
PAXOS 現有的分布式一致性算法
ZOOKEEPER沒有之間使用PAXOS算法,而是使用自己開發的Zab算法。
目前從圖中可以看出,圖中有三個Zookeeper節點,其中有一個是leader,其他兩個是follower。當client向其中一個follower更新數據時,首先數據會被follower發送到Zookeeper集群中的leader節點,然后leader節點進行數據更新。然后leader節點廣播這個數據到其他follower節點進行數據同步更新。最終整個Zookeeper集群同步完成后,達到最終一致性。
如果在Zookeeper數據同步更新的時候,有客戶端client對某個Zookeeper節點進行數據訪問,這個時候就會造成數據讀取歷史數據,而不是最新數據。因為從leader同步過來的數據還沒完全同步成功。如果是對zk進行讀取操作,讀取到的數據可能是過期的舊數據,不是最新的數據。數據讀操作可以由任意服務器節點提供,如果不是Lead節點,讀操作本身不保證數據是最新的,但是可以通過一個Sync(大概就是一個空的寫操作)+read的模式來實現對最新數據的讀取。
4 Zookeeper 結構和命令
4.1 Zookeeper 特性
4.2 Zookeeper 數據結構
1.??????層次化的數據結構,命名符合常規的文件系統規范(見下圖)
2.??????每個節點在zookeeper中叫做znode,并且其中有唯一的路徑標識
3.??????節點znode可以包含數據和子節點(但是EPHEMERAL類型的節點不能有子節點,下一頁詳解)
4.??????客戶端應用可以在節點上設置監視器。
4.3 Zookeeper 數據結構的圖
4.4 節點類型
1、?Znode 有兩種類型:
短暫(ephemeral)斷開連接后自己刪除
持久(persistent)斷開連接不刪除
2、?Znode有四種形式的目錄節點(默認時Persistent)
PERSISTENT
PERSISTENT_SEQUENTIAL (持久序列 /test0000000000019)
EPHEMERAL
EPHEMERAL_SEQUENTIAL
4.5 Zookeeper 命令操作
1.??????使用ls查看當前zookeeper中所包含的內容
2.??????創建一個新的node,使用 create /zkmydata。這個命令創建一個新的znode節點”zk” 以及它關聯的字符串
create /zk “mydata”
3.??????運行get命令來確認znode 是否包含我們所創建的字符串
get /zk
4.??????通過set命令來對zk所關聯的字符串進行設置
set /zk “zsl”
5.??????將剛才創建的znode刪除
delete /zk
6.??????刪除節點:rmr (遞歸刪除)
rmr /zk
5 Zookeeper 監聽器(Watcher)原理
Main線程里面啟動zkClient客戶端程序。zkClient中有兩個子線程,一個線程時connect線程用來通信和zookeeper集群做數據通信。另外一個線程時Listener,用來接受zookeeper集群發來的響應通知,并且調用程序中的監聽方法process方法。當zkClinet調用getChildern(“/”,true) 注冊監聽器時。這個時候zkClient就會在zookeeper集群中注冊信息,包括客戶端clientip和客戶端端口 port 以及監聽的數據節點路徑/path。如果zookeeper發現監聽的/path路徑發送改變,zookeeper集群通過注冊信息找到clientip。Zookeeper發送數據到客戶端Listener 服務器監聽程序。然后客戶端Listener線程調用回調函數process方法。
Listener線程和Connect線程都是守護線程,主程序退出后,守護線程也退出。
6 Zookeeper 應用程序
6.1 高可用分布式服務器
總結
以上是生活随笔為你收集整理的大数据技术:Zookeeper分布式协调服务的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 大数据技术:分布式系统和分布式事务
- 下一篇: 进程间的通信方式(一):共享内存