開發與維運

Zookeeper學習分享

1. Zookeeper簡介

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

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

image.png

介紹:

  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. 不用花費大量心思去維護設備。只要你請求,它就會合理分配給你,到資源不夠分配再進行統一維護

實施思路

下圖為基本應用框架:

image.png

根據需要了解設備特性,定製不同類型的代理服務器,統一在zookeeper server創建設備節點,對於用戶而言看只要通過對zookeeper server請求對應型號的設備,server端就會把空閒的節點參數分配給用戶,且把節點加鎖。直到用戶使用完畢發送解鎖指令後server端把設備設置成空閒狀態。

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

image.png

3. 環境搭建

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

1. 安裝zookeeper

下載鏈接:[http://archive.apache.org/dist/zookeeper/ 選擇對應版本進行下載]解壓,這裡選擇的是3.4.8版本

解壓後的目錄結構:

image.png

進入bin目錄:

image.png

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

image.png

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

2. 使用client基本命令

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

4. zookeper的節點和使用

zookeeper節點介紹

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

client可以創建節點以及節點的子節點,且能在節點中添加數據。下圖為節點結構圖:

image.png

Zookeeper cli使用

那麼如何創建節點呢?

連接進入client後使用help命令查看client功能

image.png

基本功能介紹

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:服務本地數據儲存目錄

image.png

複製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
image.png

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

image.png

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

image.png

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

image.png

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

image.png

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

image.png

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

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

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

image.png

get /test0000000000

image.png

查看到test node下的數據,此時,我們退出連接另一個server

./zkCli.sh -server localhost:2182;我們同樣可以查看到node信息

image.png

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

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

image.png

6. 總結

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

文章來源:芯片開放社區
文章鏈接:https://occ.t-head.cn/community/post/detail?spm=a2cl5.14300636.0.0.1b87180flWxVN5&id=656882347718737920

Leave a Reply

Your email address will not be published. Required fields are marked *