1. 程式人生 > >zookeeper基本概念和功能

zookeeper基本概念和功能

它的 星期 軟件 動物 cluster acl 機制 實時性 並且

2019/2/19 星期二

zookeeper基本概念和功能

zookeeper是hadoop生態圈裏面重要的底層的框架,主要為上層的框架提供分布式協調服務的。

hadoop-spof 問題及HA 解決思路
引入集群協調服務框架的必要性

zookeeper 簡介
ZooKeeper 是一個分布式應用程序協調服務,分布式應用程序可以基於它實現同步服務,配置維護和命名服務等。
目前zookeeper 被廣泛應用於hadoop 生態體系中各種框架的分布式協調,我們也可以利用zookeeper 來簡化分布式應用開發

Zk簡介
1、zookeeper翻譯成英文叫動物園管理員 動物員管理員的作用是什麽呢??
2、讓大象(hadoop),蜂巢(hive) ,豬(pig)能夠更友好的在一起,以上幾種都是hadoop的組件

3、ZooKeeper是一個分布式的,開放源碼的分布式應用程序協調服務
4、zookeeper其實就是一個軟件,所有安裝了zookeeper的服務器都叫?zookeeper server
5、zookeeper server 還分為兩類角色,由 leader 和 follower 組成,如果leader掛掉,會有選舉機制,follower直接替換leader ,leader只有一個,剩下的都是follower
6、zookeeper 的所有服務器中的所有數據結構(樹形結構)是完全相同的,就是說我搭建一個zookeeper集群,集群裏面所有機器的數據是一樣的
7、數據是樹形結構的,與linux目錄結構是一樣一樣的,zk的每個數據目錄就是一個znode
8、我需要運行幾個ZooKeeper? 你運行一個zookeeper也是可以的,但是在生產環境中,你最好部署3,5,7個節點。部署的越多,可靠性就越高,當然最好是部署奇數個,偶數個不是不可以的,但是zookeeper集群是以宕機個數過半才會讓整個集群宕機的,所以奇數個集群更佳

zk對hdfs HA高可用集群的作用?
1、qjn集群(edit日誌管理系統 HA的)需要zk集群去實現,協調服務。
2、namenode誰是active誰是standay 記錄在zk中
3、zkfc就是基於zk實現的失敗切換控制器

zk對yarn 集群HA的作用?
1、誰是recoursemanager active誰是從的RM 記錄在zk中

基本同hdfs中在作用一樣

zk對hbase集群HA的作用?
1、誰是hmaster記錄在zk中
2、zk留存了服務器健康狀態與是否可用的信息,並提供服務器故障通知,通過zookeeper cluster可以獲取當前系統表.META.的存儲所對應的regionserver信息。
3、zk用consensus協議來保障共享狀態,需要註意的是,一份consensus協議需要3~5個機器參與(奇數個)。

Zk對kafka集群的作用?
1.當一個kafka broker啟動後,首先會向zookeeper註冊自己的節點信息(臨時znode),同時當broker和zookeeper斷開連接時,此znode也會被刪除.
2.其中partition leader的位置(host:port)註冊在zookeeper中

小結:
Zookeeper(第三方) 可以實現的分布式協調服務包括:
1、統一名稱服務 //如果把每臺服務器sever比作一臺一臺的資源的,客戶端拿到的就是名稱服務資源。
2、配置管理
3、分布式共享鎖 //比如在分布式的每臺服務器上都需要去修改一個共享資源,這個時候會產生沖突,
4、集群節點狀態協調(負載均衡/主從協調)//服務器集群動態感知及失敗切換 zkfc
小結:這上面4點功能並不是zk本身自帶的功能,而是,這些功能可以利用zk來實現。
zookeeper的功能:
也就是第三方,要你查數據的時候,可以返還給客戶端,所以具體他是不知道幹什麽的
(最重要的功能也就是替客戶端保管數據,為客戶提供數據的監聽服務)

內部自己設計了自己分布式內存數據庫(用於保管數據)

ZooKeeper 數據模型和層次命名空間
提供的命名空間與標準的文件系統非常相似。一個名稱是由通過斜線分隔開的路徑名序列所組成的。ZooKeeper 中的每一個節點是都通過路徑來識別。

ZooKeeper 中的數據節點:
每一個節點稱為znode,通過路徑來訪問
每一個znode 維護著:數據、stat 數據結構(ACL、時間戳及版本號)
znode 維護的數據主要是用於存儲協調的數據,如狀態、配置、位置等信息,每個節點存儲的數據量很小,KB 級別
znode 的數據更新後,版本號等控制信息也會更新(增加)
znode 還具有原子性操作的特點:寫--全部替換,讀--全部
znode 有永久節點和臨時節點之分:臨時節點指創建它的session 一結束,該節點即被zookeeper 刪除;

zk 性能:
Zookeeper 的讀寫速度非常快(基於內存數據庫),並且讀的速度要比寫的速度更快。
順序一致性:客戶端的更新順序與它們被發送的順序相一致。
原子性:更新操作要麽成功要麽失敗,沒有第三種結果。
單系統鏡像:無論客戶端連接到哪一個服務器,客戶端將看到相同的
ZooKeeper 視圖。
可靠性:一旦一個更新操作被應用,那麽在客戶端再次更新它之前,它的值將不會改變。這個保證將會產生下面兩種結果:
1 .如果客戶端成功地獲得了正確的返回代碼,那麽說明更新已經成功。如果不能夠獲得返回代碼(由於通信錯誤、超時等等),那麽客戶端將不知道更新操作是否生效。
2 .當從故障恢復的時候,任何客戶端能夠看到的執行成功的更新操作將不會被回滾。
實時性:在特定的一段時間內,客戶端看到的系統需要被保證是實時的。在此時間段內,任何系統的改變將被客戶端看到,或者被客戶端偵測到。給予這些一致性保證,ZooKeeper 更高級功能的設計與實現將會變得非常容易,
例如: leader 選舉、隊列以及可撤銷鎖等機制的實現。

zookeeper 集群組件:
同一個zookeeper服務下的server 有三種,一種是leader server,另一種是follower server,還有一種叫observer server;
leader特殊之處在於它有決定權,具有Request Processor(observer server 與follower server 的區別就在於不參與leader 選舉)
zk中內部leader選舉的算法:paxos

如果客戶端修改zk集群中的數據的時候,首先集群中會找到leader 然後在leader上修改本地數據,然後每臺follower會去同步信息

zk中的端口意思
(其中2181代表:客戶端與服務器連接所用的端口)
(其中2888代表:leader與follower之間的通信用的端口)
(其中3888代表:follower之間選舉投票用的端口)

zookeeper基本概念和功能