1. 程式人生 > >Zookeeper原理及應用匯總

Zookeeper原理及應用匯總

1 Zookeeper簡介-分散式服務框架

   ZooKeeper為分散式應用程式提供高效且可靠的分散式協調服務,提供的服務:配置管理、統一命名服務、分散式同步、組服務等,是Google Chubby的開源實現,Hadoop和Hbase的重要元件;是一個典型的分散式資料一致性的解決方案,分散式應用程式可基於它實現諸如資料釋出/訂閱、負載均衡、分散式協調/通知、叢集管理、Master選舉、分散式鎖和分散式佇列等功能。

   ZooKeeper的設計目標就是將複雜易出錯的分散式一致性服務封裝起來,構成高效可靠的原語集,並以一系列簡單易用的介面提供給使用者使用,支援Java和C的介面。

   ZooKeeper程式碼版本中,提供了分散式獨享鎖、選舉、佇列的介面。其中分佈鎖和佇列有Java和C兩個版本,選舉只有Java版本。

   ZooKeeper是以Fast Paxos演算法為基礎的,Paxos 演算法存在活鎖的問題,即當有多個proposer交錯提交時,有可能互相排斥導致沒有一個proposer能提交成功,而Fast Paxos作了一些優化,通過選舉產生一個leader (領導者),只有lead才能提交proposer[申請]。在解決分散式資料一致性方面,ZooKeeper並沒有直接採用Paxos演算法,而是使用ZAB的一致性協議 。

   ZooKeeper的基本運轉流程:

   1、選舉Leader。               2、同步資料。

   3、選舉Leader過程中演算法有很多,但要達到的選舉標準是一致的。

   4、Leader要具有最高的zxid。

   5、叢集中大多數的機器得到響應並follow選出的Leader

2 常用命令

四字命令

功能描述

conf

輸出相關服務配置的詳細資訊。

cons

列出所有連線到伺服器的客戶端的完全的連線 / 會話的詳細資訊。包括“接受 / 傳送”的包數量、會話 id 、操作延遲、最後的操作執行等等資訊。

dump

列出未經處理的會話和臨時節點。

envi

輸出關於服務環境的詳細資訊(區別於 conf 命令)。

reqs

列出未經處理的請求

ruok

測試服務是否處於正確狀態。如果確實如此,那麼服務返回“imok ”,否則不做任何相應。

stat

輸出關於效能和連線的客戶端的列表。

wchs

列出伺服器 watch 的詳細資訊。

wchc

通過 session 列出伺服器 watch 的詳細資訊,它的輸出是一個與watch 相關的會話的列表。

wchp

通過路徑列出伺服器 watch 的詳細資訊。它輸出一個與 session相關的路徑。

3 命令列工具

[[email protected] bin]$ ./zkCli.

zkCli.cmd  zkCli.sh   

[[email protected] bin]$ ./zkCli.sh -server 192.168.1.165:2181

Connecting to 192.168.1.165:2181

4 簡單操作

1)ls 檢視ZooKeeper指定節點下一級所有子節點

ls path [watch]

2)get 獲取ZooKeeper指定節點的資料內容和屬性資訊

get path [watch]

3)set 更新指定節點的資料內容,version為指定ZNode資料結點的版本,不指定更新後

dataVersin會+1

set path data [version]

4)create 建立一個ZooKeeper節點,-s:順序節點;-e:臨時節點;預設為永久節點;

acl: 許可權控制,預設不做控制

create [-s] [-e] path data acl

5)delete 在沒有沒有子結點時刪除ZooKeeper指定節點

delete path [version]

5 開源客戶端

Curator(全世界應用最廣泛)   ,   ZkClient

6 目標

1)簡單的資料模型

ZooKeeper伺服器記憶體中的資料模型,由系列的ZNode節點構成,樹型結構名稱空間-7.1.1

2)構建叢集 7.3

3)順序訪問 7.8

對於客戶端每個請求會分配一個全域性唯一的遞增編號,編號反映所有事務操作的先後順序。

4)高效能

全量資料儲存在記憶體中,直接服務於客戶端所有非事務請求,尤其適合於以讀操作為主場景

7 概念

1)叢集角色

   通常分散式叢集是主備模式(Master/Slave);ZooKeeper採用Leader、Follower、Observer三角色,通過Leader選舉選定Leader伺服器,為客戶端提供讀和寫服務,Follower和Observer節點提供讀服務,Observer節點不參與Leader選舉和寫操作“過半寫成功”策略,故可以在不影響寫效能的情況下提升叢集的讀效能 7.7

2)會話

3)資料節點ZNode

   所有ZNode以模型結構儲存在記憶體中,資料節點ZNode包含資料內容和系列的屬性資訊,

如。分持久PERSISTENT,臨時節點EPHEMERAL和順序節點SEQUENTIAL,可組成4種組合型節點。持久節點:建立後只有主動進行刪除操作才移除,否則一直有效;臨時節點:生命週期與Client會話繫結,在Client會話失效時,這個客戶端所建立的所有臨時結點都會刪除,SEQUENTIAL,建立節點後追加整形數字,由父節點維護的自增數字,

4)版本

    ZNode內Stat資料結構,記錄ZNode三個資料版本,version當前版本;cversion當前子節點版本;aversion當前ACL版本 7.1.3

5)Watcher 事件監聽器

   使用者在指定節點註冊一些Watcher,並且在特定事件觸發的時候,ZooKeeper服務端會將事件通知到感興趣的客戶端上去,該機制是ZooKeeper實現分散式協調服務的重要特性。7.1.4

6)ACL 訪問控制列表(Access Control List) ,通過ACL策略進行許可權控制,5種許可權

   CREATE:建立子節點許可權        READ:獲取節點資料和子節點列表的許可權

   WRITE:更新節點資料的許可權     DELETE:刪除子節點資料的許可權

   ADMIN:設定節點ACL的許可權   7-1-5

7)ZAB協議ZooKeeper Atomic Broadcast 原子訊息廣播協議,保證資料一致性的核心演算法

8 Zookeeper結構

角色:Zookeeper=服務端+客戶端

服務端

支援群集,包括檔案系統和通知機制

客戶端

連線服務端,操作資料,註冊要監聽的資料,接收通知

功能:Zookeeper=檔案系統+通知機制

檔案系統

儲存和管理資料,以樹型的結構儲存

通知機制

監控檔案系統的資料變化,通知監聽的客戶端

8.1檔案系統

Zookeeper資料結構特點:

路徑唯一標識

樹型儲存結構,與檔案系統目錄樹結構類似

例:/Apps/App3/SubApp1

節點下可以建立子節點

可以針對節點進行增,刪,改,查,建立子節點操作

各個節點下可以儲存資料,資料可以有多個版本。

臨時節點

一旦建立這個節點的客戶端與伺服器失去聯絡,這個節點也將自動刪除,

Zookeeper 的客戶端和伺服器通訊採用長連線方式,

每個客戶端和伺服器通過心跳來保持連線,

這個連線狀態稱為 session,如果節點是臨時節點,

這個 session 失效,節點也就刪除了.

臨時節點下不能建立子節點

永久節點

建立這個節點的客戶端與伺服器失去聯絡,這個節點不會刪除。

節點的名稱可以自動編號

如 App1 已經存在,再建立的話,將會自動命名為 App2

節點可以被監控

節點中儲存資料的修改,子節點目錄的變化等,一旦變化可以通知設定監控的客戶端,這個是 Zookeeper 的核心特性,Zookeeper 的很多功能都是基於這個特性實現的.

8.2通知機制

Zookeeper 的客戶端和伺服器通訊採用長連線方式,客戶端註冊監聽它關心的目錄節點,當目錄節點發生變化(資料改變、被刪除、子目錄節點增加刪除)時,每個客戶端和伺服器通過心跳來保持連線,zookeeper會通知客戶端。

8.3總結

Zookeeper原理:

1

儲存

負責儲存和管理資料

2

註冊

然後接受客戶端的註冊,監聽相關的資料

3

變化

一旦這些資料的狀態發生變化

4

通知

Zookeeper 負責通知已經在 Zookeeper 上註冊的那些客戶端

5

業務處理

客戶端做出相應的反應

Zookeeper 特點:

順序一致性

按照客戶端傳送請求的順序更新資料。

原子性

更新要麼成功,要麼失敗,不會出現部分更新。

單一性

無論客戶端連線哪個server,都會看到同一個檢視。

可靠性

一旦資料更新成功,將一直保持,直到新的更新。

及時性

客戶端會在一個確定的時間內得到最新的資料。

Zookeeper功能:

1

名稱服務

統一命名服務,唯一的名稱,樹形的名稱結構,便於人識別和記住,不會重複

2

配置維護

分散式應用配置項的管理

3

分散式同步

狀態同步服務

4

組服務

叢集管理

注:Zoopkeeper 提供了一套很好的分散式叢集管理的機制,從而可以設計出多種多樣的分散式的資料管理模型,而不僅僅侷限於下面提到的幾個常用應用場景。

8.4容錯節點

zookeeper叢集的容錯能力情況:若2n+1=叢集PC總數,n即為可容納的故障節點。
例如:3臺能容錯1臺,5臺能容錯2臺,7臺能容錯3臺。

9 Zookeeper應用場景

9.1配置資料管理

場景描述:

   資料釋出與訂閱模型,即配置中心

   釋出者將資料釋出到一個或一系列節點上,供訂閱者動態獲取資料。

實現模式:

   推Push或拉Pull模式,推Push模式由伺服器主動將資料更新推送給所有訂閱的客戶端,拉Pull模式是由客戶端主動請求來獲取最新資料,通過採用定時進行輪詢拉取的方式。    

   ZooKeeper採用是推拉相結合模式,客戶端向服務端註冊自己關注的資料節點ZNode,一旦節點的資料發生改變,服務端向相應訂閱的客戶端傳送Watcher事件通知,客戶端收到通知後主動獲取最新配置資訊,達到資料的同步。

好處:實現配置資訊的集中式管理和動態更新,實時同步。

應用場景:配置資料量小但資料執行時更新比較頻繁、配置共享,例如:

解決方案:參考ZooKeeper的配置資訊儲存方案的設計與實現.pdf

JAVA DEMO:zkpublisher

9.2軟負載均衡

場景描述:

   隨著業務量的提高,訪問量和資料流量的快速增長,其處理能力和計算強度也相應地增大,使得單一的服務根本無法承擔。將負載(工作任務)進行平衡、分攤到多個操作單元上進行執行,在分散式環境中,為了保證高可用性,通常同一個應用或同一個服務的提供方都會部署多份,達到對等服務。而消費者就須要在這些對等的伺服器中選擇一個來執行相關的業務邏輯

好處:高可用性,減輕服務的壓力,實現軟負載均衡

實現:客戶請求服務,服務中介軟體讀取Zookeeper服務端取得提供服務的列表,根據規則,把請求定位到某個伺服器執行相關的業務。

9.3叢集管理

叢集機器管理:

監控:監控叢集中機器狀態,監控機器線上率,實時檢測叢集機器是否存活

實現:

   1.客戶端啟動時,向 Zookeeper上註冊.

   2.客戶端在節點 x 上註冊一個Watcher,那麼如果 x的子節點變化了,會通知該客戶端。

   3.建立臨時型別的節點,一旦客戶端和伺服器的會話結束或過期,那麼該節點就會刪除。

Master選舉:

   有些業務邏輯(例如一些耗時的計算,網路I/O處理),往往只需要讓整個叢集中的某一臺機器進行執行,提高效能。

實現:建立節點時,分配一個序號,選舉時,取序列號最小的那個機器作為Master

9.4分散式鎖

鎖:不同執行緒間,操作一個資源,存在資源競爭,要用到鎖。分散式鎖在程序與程序之間提供了一種互斥機制,在任何時刻,只有一個程序可以持有鎖。鎖服務可以分為兩類:

保持獨佔:得益於ZooKeeper為我們保證了資料的強一致性。就是所有試圖來獲取這個鎖的客戶端,最終只有一個可以成功獲得這把鎖。(實現:大家都在某個節點下建立節點,只有一個成功,其它都是失敗的)

控制時序:就是所有檢視來獲取這個鎖的客戶端,最終都是會被安排執行,只是有個全域性時序了,(實現:建立有編號節點,查詢按編號排序,取最小的編號,就能得到鎖)

   一個使用者建立一個節點,分配數值,檢測父節點下的節點列表的最小資料是否為自已建立的資料,如果是,代表獲得鎖。如果不是,代表別的使用者已經鎖住. 

9.5佇列管理

1

同步佇列

描述:當一個佇列的成員都聚齊時,這個佇列才可用,否則一直等待所有成員到達,這種是同步佇列.例如實現 (發並處理)

實現:在約定目錄下建立臨時目錄節點,監聽節點數目是否是我們要求的數目。

2

FIFO佇列

描述:佇列按照 FIFO 方式進行入隊和出隊操作,例如實現(生產者和消費者模型)

實現:和分散式鎖服務中的控制時序場景基本原理一致,入有編號,出按編號。

10常用介面(JAVA API)

1) 建立會話

2) 建立節點

3) 刪除節點

 

4) 讀取資料

5) 更新資料

6) 節點是否存在

說明:

7) 許可權控制

  通過設定伺服器上Znode資料節點的ACL,來控制客戶端對該資料節點的訪問許可權。

11叢集部署

前提:所有叢集PC機必須安裝JRE或JDK1.6+)

1 下載: http://zookeeper.apache.org/releases.html  版本ZooKeeper 3.4.9

2 安裝: tar -xzvf xxxx.tar.gz解壓到某個目錄(如:%使用者Root%/zookeeper349)

3 配置:

   3.1)複製%使用者Root%/zookeeper349/conf/zoo_sample.cfg檔案,命名為:zoo.cfg

   3.2)修改zoo.cfg內容

   tickTime=2000

   dataDir=%使用者Root%/zookeeper349/zookeeper-3.4.9/data

   dataLogDir=%使用者Root%/zookeeper349/zookeeper-3.4.9/log

   clientPort=2181

   server.1=192.168.1.165:2888:3888

   server.2=192.168.1.74:2888:3888

   server.3=192.168.1.73:2888:3888

  zoo.cfg說明:

   tickTime:這個時間是作為 Zookeeper 伺服器之間或客戶端與伺服器之間維持心跳的時間間隔,也就是每個 tickTime 時間就會發送一個心跳。

   dataDir: Zookeeper 儲存資料的目錄,預設情況下,Zookeeper 將寫資料的日誌檔案也儲存在這個目錄裡。

   dataLogDir: Zookeeper 儲存Log資料的目錄.

   clientPort:這個埠就是客戶端連線 Zookeeper 伺服器的埠,Zookeeper 會監聽這個埠,接受客戶端的訪問請求。

   server.1:叢集機器節點1,ServerID為1,值格式:IP:埠1:埠2

   server.2:叢集機器節點2,ServerID為2,值格式:IP:埠1:埠2

   server.3:叢集機器節點3,ServerID為3,值格式:IP:埠1:埠2

  3.3)增加名為myid檔案

  myid檔案位置為dataDir指定的目錄下,myid檔案內容為叢集本機器節點的ServerID值。即server1、server2、server3分別對應為:1、2、3

  3.4)啟動伺服器

  cd  %使用者Root%/zookeeper349/zookeeper-3.4.9/bin

  ./zkServer.sh start

  3.5)檢查是否成功,可執行如下命令:

 1)telnet 192.168.1.74 2181回車後輸入  stat

 2) echo conf | nc 192.168.1.165 2181

相關推薦

Zookeeper原理用匯

1 Zookeeper簡介-分散式服務框架    ZooKeeper為分散式應用程式提供高效且可靠的分散式協調服務,提供的服務:配置管理、統一命名服務、分散式同步、組服務等,是Google Chubby的開源實現,Hadoop和Hbase的重要元件;是一個典型的分散式資料一

常用機器學習算法優缺點用匯

apr 分析 完成 垃圾 支持向量機 pvc 遙感 銀行 決策 一、K-Means聚類算法 優點: (1)原理簡單,實現容易,收斂速度快 (2)球形邊界效果較好 缺點: (1)k取值不好把握 (2)非球形邊界效果較差 (3)對噪音和異常點較敏感 應用: (1)被大多數搜索引

WPF關閉用匯

fail tco fff article oid archive 應用 size 簡單 原文:WPF關閉應用匯總 就本人而言,C#中關閉應用主要有以下途徑: 1.

EOS區塊鏈DApp去中心化用匯

EOS最近一直在區塊鏈新聞中。它的主幹網(公有鏈)釋出了,人們仍然對它們持懷疑態度。在101Blockchain.com網站上,我們知道會有緊張的投資者、懷疑的分析家和像你一樣好奇的讀者。這就是為什麼今天,我們將通過40+EOS DAPPS,我們認為EOS必須提供增加當前價值的DAPS

ZooKeeper原理使用

ZooKeeper是Hadoop Ecosystem中非常重要的元件,它的主要功能是為分散式系統提供一致性協調(Coordination)服務,與之對應的Google的類似服務叫Chubby。今天這篇文章分為三個部分來介紹ZooKeeper,第一部分介紹ZooKeeper的基

樹狀陣列用匯 [全]

1. 逆序對 : 樹狀陣列維護比當前小的個數 , 權值作為下標 , 需要離散化 , 也可以擴充套件到前後比自己大或小的個數   2. 二維偏序問題 : 一維排序 , 二維樹狀陣列 , 也是權值作為下標 , 在樹狀陣列中插入1表示出現 , 以後可以輔助CDQ分治解決三維偏序

runtime 實際用匯

1、列印每一個介面的資訊 擴充套件UIViewController,在load方法中交換viewwillAppear方法,在新方法中列印本類資訊。初次接手專案時,可以通過這個方法快速熟悉專案。 +(

二分查詢法的實現和用匯

到目前位置,似乎我們學到的演算法中,時間複雜度是O(log n),好像就數二分查詢法,其他的諸如排序演算法都是 O(n log n)或者O(n2)。但是也正是因為有二分的 O(log n), 才讓很多 O(n2)縮減到只要O(n log n)。 關於二分查詢法 二分查詢法主要是解

系統配置:GRUB安裝配置使用匯

(一)安裝linux時安裝grub. 安裝redhat linux時會提示安裝載入程式,如果選擇grub為載入程式,建議把grub安裝到硬碟的引導扇區MBR.grub 還可以引導其它作業系統,如 FreeBSD、NetBSD、OpenBSD、GNU HURD 和 DOS,

[轉]GRUB安裝,配置使用匯1

 GRUB安裝,配置及使用匯總1 1、一個GRUB配置檔案 2、解讀grub.conf檔案 3、配置grub 4、GRUB的互動性 5、常見grub除錯方法的思路 (一)grub的配置一旦選擇了grub為載入程式,下面我們來了解一下它的配置./boot/grub/grub.c

全面介紹ZooKeeper原理使用

原文寫的非常好,地址:http://www.wuzesheng.com/?p=2609 ZooKeeper是Hadoop Ecosystem中非常重要的元件,它的主要功能是為分散式系統提供一致性協調(Coordination)服務,與之對應的Google的類似服務叫Ch

分散式服務框架Zookeeper介紹、原理應用

轉載:https://www.jianshu.com/p/bf32e44d3113 分散式服務框架Zookeeper介紹、原理及應用 Zookeeper簡介 Zookeeper 分散式服務框架是 Apache Hadoop 的一個子專案,它主要是用來解決分散式應用中經常遇到的一些資料管理

HTML 標籤簡單使用匯

1.<input/>標籤 <input class="filters" id="goodsName" maxlength="100" name="goodsName" readonly="readonly"/> readonly:輸入框顯示的內

Zookeeper與Dubbo使用的原理安裝

1、註冊中心 zookeeper管理者    zookeeper Java  JDK 安裝步驟: 第一:上傳 解壓 到 Linux中 第二:cd zookeeper資料夾中 第三:建立data    logs  此二個資料夾:mkdir data logs 第四:cd conf中將 zoo_sampl

【Spring】Spring MVC原理配置詳解

進行 return sub sca scrip uil 線程安全 松耦合 必須 1.Spring MVC概述: Spring MVC是Spring提供的一個強大而靈活的web框架。借助於註解,Spring MVC提供了幾乎是POJO的開發模式,使得控制器的開發和測試更加簡

【Spark 深入學習-08】說說Spark分區原理優化方法

學習 格式 讀取文件 tmc 資料 數值計算 詳解 shc 存儲介質 本節內容 ------------------ · Spark為什麽要分區 · Spark分區原則及方法 · Spark分區案例 · 參考

zookeeper安裝部署

img ise size nap alt alias 沒有 color nts 閱讀目錄 一. 單機安裝、配置 二. 集群安裝、配置 安裝及部署 回到頂部 一. 單機安裝、配置 1、下載zookeeper二進制安裝包 下載 curl -L -O http:/

MySQL索引原理慢查詢優化(轉)

範圍 很難 等於 right 事件 原理 插入 jpg 個人網站 轉自:美團點評技術團隊http://tech.meituan.com/mysql-index.html MySQL憑借著出色的性能、低廉的成本、豐富的資源,已經成為絕大多數互聯網公司的首選關系型數據庫。雖然性

Linux網絡原理基礎設,yum管理RPM包

tro 清除 工作 ble pts log 緩存 local 手動 一:ifconfig命令 1,ifconfig命令的功能:顯示所有正在啟動的網卡的詳細信息或設定系統中網卡的IP地址。 2. 使用ifup和ifdown命令啟動和停止網卡(詳見linux系統管理P424)1

django做服務端 window.name javascript跨域實現原理實例

字符串 tex 並且 ble blog char src 兩個 splay 項目地址:https://github.com/blff122620/jsLibary/tree/master/crossDomainDemo 原理如下:window.name 傳輸技術,原本是 T