1. Zookeeper簡介
Zookeeper是hadoop的分佈式協調服務,適用與服務部署管理,是從傳統的互聯網架構演化而來。傳統單體應用系統的耦合度非常高、啟動應用時間長、依賴龐大等,zookeeper架構相對傳統架構更加簡單,更加可靠。
下圖為zookeeper架構的角色分佈圖:
介紹:
- Leader:領導者,負責發起決議,如果有client發送請求到某個server,會由leader進行選舉決議,如果過半的server同意則開始執行請求,如果leader出現宕機,follower會選舉出新的leader。
- Follower:跟隨者,接收client請求,只能單獨處理讀請求,如果存在寫請求則將請求上報leader,當leader發起決議時參與決議,且執行。
- Observer:觀察者,沒有選舉權的follower,為了提高整體讀性能,因為參與選舉比較耗時。
2. Zookeeper在測試中的應用
Zookeeper在測試應用中的優勢
對於日漸龐大的測試體系,測試人員無法很好的對設備進行管理,自動化測試使用頻率越來越高,導致設備“忙不過來”,執行測試任務時以及開發人員調試時需要花費大量的時間搭建測試、開發環境,花費精力去維護環境。但是有了zookeeper架構,一切就變得簡單了。
列出以下幾點使用優勢:
- 測試、開發人員更加快速的進行測試及調試節
- 穩定性測試過程中能夠更加實時的對設備監控
- 對於大型的自動化測試平臺無法進行負載均衡,可以合理利用此框架進行資源調配
- 用戶面向對象不再是硬件設備,只要提供硬件型號就能分配到所需設備
- 不用花費大量心思去維護設備。只要你請求,它就會合理分配給你,到資源不夠分配再進行統一維護
實施思路
下圖為基本應用框架:
根據需要了解設備特性,定製不同類型的代理服務器,統一在zookeeper server創建設備節點,對於用戶而言看只要通過對zookeeper server請求對應型號的設備,server端就會把空閒的節點參數分配給用戶,且把節點加鎖。直到用戶使用完畢發送解鎖指令後server端把設備設置成空閒狀態。
下圖為一個簡單的運作流程圖:
3. 環境搭建
這裡使用ubuntu系統來搭建環境
1. 安裝zookeeper
下載鏈接:[http://archive.apache.org/dist/zookeeper/ 選擇對應版本進行下載]解壓,這裡選擇的是3.4.8版本
解壓後的目錄結構:
進入bin目錄:
這裡面有很多可執行文件,這裡使用zkServer.sh啟動zookeeper服務
這裡沒有配置端口默認端口為2181,以上就算是啟動了一個zookeeper服務
2. 使用client基本命令
開啟服務後執行./zkCli.sh -server localhost:2181,進入client模式
4. zookeper的節點和使用
zookeeper節點介紹
zookeeper節點目錄結構為樹形結構
client可以創建節點以及節點的子節點,且能在節點中添加數據。下圖為節點結構圖:
Zookeeper cli使用
那麼如何創建節點呢?
連接進入client後使用help命令查看client功能
基本功能介紹
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:服務本地數據儲存目錄
複製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
./zkServer.sh start ../conf/zoo2.cfg
./zkServer.sh start ../conf/zoo3.cfg
./zkServer.sh status ../conf/zoo.cfg
./zkServer.sh status ../conf/zoo2.cfg
./zkServer.sh status ../conf/zoo3.cfg
這裡選舉出server.2為leader,server.1和server.3為flower。
client與server.1連接,./zkCli.sh -server localhost:2185
創建Znode, create -s /test 12345;會順序創建一個id為0的node
get /test0000000000
查看到test node下的數據,此時,我們退出連接另一個server
./zkCli.sh -server localhost:2182;我們同樣可以查看到node信息
在此服務中進行對test的監聽get /test0000000000 watch
在server.1服務中修改test節點,此服務會跳出事件
6. 總結
通過對zookeeper架構的學習,發現它是一個既好上手又有很大實際用途的工具,我們需要學會如何合理利用好它,對於我們這種多項目多設備並行的測試人員來說,通過它來管理我們的設備,可以非常有效的節省我們的時間,消除了很多此類的煩惱。消除煩惱便能快樂工作。
文章來源:芯片開放社區
文章鏈接:https://occ.t-head.cn/community/post/detail?spm=a2cl5.14300636.0.0.1b87180flWxVN5&id=656882347718737920