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