天天看點

Zookeeper學習分享

1. Zookeeper簡介

Zookeeper是hadoop的分布式協調服務,适用與服務部署管理,是從傳統的網際網路架構演化而來。傳統單體應用系統的耦合度非常高、啟動應用時間長、依賴龐大等,zookeeper架構相對傳統架構更加簡單,更加可靠。

下圖為zookeeper架構的角色分布圖:

Zookeeper學習分享

介紹:

  1. Leader:上司者,負責發起決議,如果有client發送請求到某個server,會由leader進行選舉決議,如果過半的server同意則開始執行請求,如果leader出現當機,follower會選舉出新的leader。
  2. Follower:跟随者,接收client請求,隻能單獨處理讀請求,如果存在寫請求則将請求上報leader,當leader發起決議時參與決議,且執行。
  3. Observer:觀察者,沒有選舉權的follower,為了提高整體讀性能,因為參與選舉比較耗時。

2. Zookeeper在測試中的應用

Zookeeper在測試應用中的優勢

對于日漸龐大的測試體系,測試人員無法很好的對裝置進行管理,自動化測試使用頻率越來越高,導緻裝置“忙不過來”,執行測試任務時以及開發人員調試時需要花費大量的時間搭建測試、開發環境,花費精力去維護環境。但是有了zookeeper架構,一切就變得簡單了。

列出以下幾點使用優勢:

  1. 測試、開發人員更加快速的進行測試及調試節
  2. 穩定性測試過程中能夠更加實時的對裝置監控
  3. 對于大型的自動化測試平台無法進行負載均衡,可以合理利用此架構進行資源調配
  4. 使用者面向對象不再是硬體裝置,隻要提供硬體型号就能配置設定到所需裝置
  5. 不用花費大量心思去維護裝置。隻要你請求,它就會合理配置設定給你,到資源不夠配置設定再進行統一維護

實施思路

下圖為基本應用架構:

Zookeeper學習分享

根據需要了解裝置特性,定制不同類型的代理伺服器,統一在zookeeper server建立裝置節點,對于使用者而言看隻要通過對zookeeper server請求對應型号的裝置,server端就會把空閑的節點參數配置設定給使用者,且把節點加鎖。直到使用者使用完畢發送解鎖指令後server端把裝置設定成空閑狀态。

​ 下圖為一個簡單的運作流程圖:

Zookeeper學習分享

3. 環境搭建

​ 這裡使用ubuntu系統來搭建環境

1. 安裝zookeeper

下載下傳連結:[

http://archive.apache.org/dist/zookeeper/

選擇對應版本進行下載下傳]解壓,這裡選擇的是3.4.8版本

解壓後的目錄結構:

Zookeeper學習分享

進入bin目錄:

Zookeeper學習分享

這裡面有很多可執行檔案,這裡使用zkServer.sh啟動zookeeper服務

Zookeeper學習分享

這裡沒有配置端口預設端口為2181,以上就算是啟動了一個zookeeper服務

2. 使用client基本指令

開啟服務後執行./zkCli.sh -server localhost:2181,進入client模式

4. zookeper的節點和使用

zookeeper節點介紹

zookeeper節點目錄結構為樹形結構

client可以建立節點以及節點的子節點,且能在節點中添加資料。下圖為節點結構圖:

Zookeeper學習分享

Zookeeper cli使用

那麼如何建立節點呢?

連接配接進入client後使用help指令檢視client功能

Zookeeper學習分享

基本功能介紹

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

-s :建立一個順序節點

-e :建立一個臨時節點;在于用戶端斷連時,臨時節點會被删除,且臨時節點沒有子節點

data:節點資料

舉例:create -s /test 1234

ls path [watch]

列出Path下對應的Znode

watch:能夠監聽Znode的的所有變化,可以不選

get path [watch]

擷取Path對應的Znode的資料和屬性

ls2 path [watch]

檢視Path下所有子Znode以及子Znode的屬性

set path data [version]

更新節點

delete path [version]

删除節點, 如果要删除的節點有子Znode則無法删除

rmr path

删除節點, 如果有子Znode則遞歸删除

5. Zookeeper實戰

這裡在一台PC中建立三個zookeeper sever,當然,在實際搭建叢集時應該把叢集搭建

在不同的伺服器中。

檔案配置

​ 進入conf目錄;能夠 檢視到zoo.cfg

​ 配置server.1、server.2、server.3

配置檔案中端口的作用:clientport中2815為對client端提供服務的端口;2881為叢集内及其通訊使用的端口;3881為叢集選舉leader時使用的端口

dataDir:服務本地資料儲存目錄

Zookeeper學習分享

複制zoo.cfg為zoo2.cfg、zoo3.cfg 修改clientPort配置分别為2182、2183;修改dataDir分别為data2、data3

那麼如何把server.x與實際伺服器對應起來呢?

在dataDir目錄我這邊是/tmp/zookeeper/;在data、data2、data3目錄中(如果沒有此目錄需建立)建立myid目錄,此檔案的作用為标注服務的唯一辨別,分别對應config檔案中server.x中的x;此步驟為關鍵步驟

操作: mkdir /tmp/zookeeper/data;vim myid; 編輯檔案内容為1;

​mkdir /tmp/zookeeper/data2;vim myid;

編輯檔案内容為2;

mkdir /tmp/zookeeper/data3;vim myid;

編輯檔案内容為3;

啟動服務

進入bin目錄,分别執行./zkServer.sh start ../conf/zoo.cfg;./zkServer.sh start ../conf/zoo2.cfg;./zkServer.sh start ../conf/zoo3.cfg開啟三個服務

注意:如果沒有關閉防火牆需要關閉防火牆才能開啟服務systemctl stop firewalld.service

正确開啟服務後我們使用./zkServer.sh status來檢視服務狀态

./zkServer.sh start ../conf/zoo.cfg

Zookeeper學習分享

./zkServer.sh start ../conf/zoo2.cfg

Zookeeper學習分享

./zkServer.sh start ../conf/zoo3.cfg

Zookeeper學習分享

./zkServer.sh status ../conf/zoo.cfg

Zookeeper學習分享

./zkServer.sh status ../conf/zoo2.cfg

Zookeeper學習分享

./zkServer.sh status ../conf/zoo3.cfg

Zookeeper學習分享

​ 這裡選舉出server.2為leader,server.1和server.3為flower。

​ client與server.1連接配接,./zkCli.sh -server localhost:2185

​ 建立Znode, create -s /test 12345;會順序建立一個id為0的node

Zookeeper學習分享

get /test0000000000

Zookeeper學習分享

檢視到test node下的資料,此時,我們退出連接配接另一個server

./zkCli.sh -server localhost:2182;我們同樣可以檢視到node資訊

Zookeeper學習分享

在此服務中進行對test的監聽get /test0000000000 watch

在server.1服務中修改test節點,此服務會跳出事件

Zookeeper學習分享

6. 總結

通過對zookeeper架構的學習,發現它是一個既好上手又有很大實際用途的工具,我們需要學會如何合理利用好它,對于我們這種多項目多裝置并行的測試人員來說,通過它來管理我們的裝置,可以非常有效的節省我們的時間,消除了很多此類的煩惱。消除煩惱便能快樂工作。

文章來源:晶片開放社群

文章連結:

https://occ.t-head.cn/community/post/detail?spm=a2cl5.14300636.0.0.1b87180flWxVN5&id=656882347718737920

繼續閱讀