1. 程式人生 > >Zookeeper學習(一)

Zookeeper學習(一)

《Zookeeper distributed process coordination》學習筆記。
所有學習程式碼均託管在https://github.com/alphg/zkstudy

第一部分Zookeeper基礎
通過搭建使用zookeeper管理Master-Worker模式叢集,加深對基的理解。

系統結構圖如下
這裡寫圖片描述
我們使用工具zkCli以該圖為基礎實現書中的示例

一、Master節點

Master節點負責管理workers和tasks,並且負責分配任務(task)給合適的worker。
由於Master在叢集中起到很重要的作用,所以應考慮單點故障,所以我們使用多點備份的方式。
為了實現同一時間只能有一個master對叢集進行管理,master在叢集中新建一個臨時節點 /master
開啟一個linux終端,執行zkCli.sh
這裡寫圖片描述

分別執行下面三條命令
“`
create -e /master “master1.example.com:2333” #建立/master臨時節點
ls / #列出zookeeper中所有節點
get /master #得到/master節點的metadata 和 data

 本機執行結果如下

![這裡寫圖片描述](https://img-blog.csdn.net/20161027210529973)

 接下來我們可以另外啟動一個終端模擬另外一個master進行測試
 執行以下命令


create -e /master “master2.example.com:2333” #建立/master臨時節點
“`

這裡寫圖片描述
結果如上圖紅框中所示,表示建立失敗,失敗原因是/master節點已經存在
為了實現當master1掛掉的時候master2可以自動得到這個資訊,我們可以在master2建立一個watch監控/master的變化(因為/master是臨時節點,當master1掛掉的時候,由其建立的臨時節點/master會被自動刪除,master2通過監控/master節點的變化(刪除)來知道master1已經掛掉)
執行以下命令

這裡寫圖片描述

然後我們現在手動將master1斷掉(使用quit命令關閉zkCli,關閉連線)

這裡寫圖片描述

在master2我們可以看到

這裡寫圖片描述

我們可以看到master2得到了 /master 節點被刪除的通知。之後master2再次建立/master節點,以保證其在叢集中的管理者地位(其他的master建立節點/master都會因為已存在而失敗)

這裡寫圖片描述

我們可以看到/master中的資料已經變成了“master2.example.com:2333”說明該節點確實為master2建立。
二、Workers、Tasks、Assignments
在討論後續步驟之前我們需要建立三個重要的父節點/workers ,/tasks ,/assign
這裡寫圖片描述

master需要監控/workers和/tasks節點

這裡寫圖片描述

三、worker
我們再啟動一個終端啟動zkCli.sh讓其充當一個worker
為了使zookeeper可以監控到該worker的狀態(線上或掉線),所以需要worker在節點/workers下建立動態子節點,同時為了該worker可以接收任務,我們在/assign下建立靜態子節點並監控其變化

這裡寫圖片描述
(上圖中最後一條命令出錯,應該是 ls /assign/worker1 true)
四、Client
接下來我們啟動第4個終端,啟動zkCli.sh模擬一個客戶的訪問,其作用是釋出任務(task)並監控任務以得到任務的處理結果。

這裡寫圖片描述

五、流程

在完成上述四步命令後我們返回第2個終端(master),發現其已經檢測到/task節點的變化(有新的任務被建立)

這裡寫圖片描述
(這裡有兩個watch通知,第一個是我們前邊在建立worker時的通知(/workers發生變化),第二個就是有新的任務被建立而產生的通知)
接下來就是檢查/tasks和/workers節點,並將任務分配給worker

這裡寫圖片描述

接下來我們返回第3個終端(worker)

這裡寫圖片描述
我們可以看到其下已經分配到任務task-0000000000

此處worker不對任務進行任何處理,直接通過寫入/tasks/task-0000000000的任務狀態通知客戶端已處理完成

這裡寫圖片描述

返回第4個終端我們可以看到client已經得到任務被處理完成的通知

這裡寫圖片描述
六、總結

至此就完成了簡單master-workers叢集的搭建過程,也瞭解了其控制流程。理解本文內容為處理更復雜的生產環境中叢集搭建、控制流程梳理提供幫助。

相關推薦

Zookeeper學習

《Zookeeper distributed process coordination》學習筆記。 所有學習程式碼均託管在https://github.com/alphg/zkstudy 第一部分Zookeeper基礎 通過搭建使用zookeeper管理

Zookeeper學習、Linux搭建zookeeper

1.zookeeper單機搭建 下載:wget http://mirrors.shu.edu.cn/apache/zookeeper/stable/zookeeper-3.4.12.tar.gz 解壓:tar -zxvf zookeeper-3.4.12.tar.gz 配置檔案

Node個人學習----模塊

需要 區別 class 當前 個人 一個 min export ava 1、自定義模塊與系統模塊的引入方式區別:----自定義模塊需要加“./”來聲明它不是一個系統模塊 const mod1=require("系統模塊.js"); const mod1=require(

MySQL學習ODBC 安裝

oca local new cmd 密碼 服務 關閉 mysql 系統 寫前說明 初次接觸MySQL,都說MySQL各種好。我也來學習學習。之前只有SQLServer2008的經驗,其實也只是皮毛。因為SQLServer還是比較容易上手的。也不麻煩。但是自己

vue基礎學習

time tle eight pla use logs new dial for 01-01 vue使用雛形      <div id="box"> {{msg}} </div> <sc

java學習 環境搭建、hello world的demo

環境變量 網上 類庫 .com java開發 www cnblogs rgs .class   本程序媛搞前端的,上班偶有空閑,不妨來學習學習,不然怎麽包養小白臉,走上人生巔峰?   說實話,每個語言都相通,有了javascript的基礎,並且有了兩三年跟java打交道的經

【Cloud Foundry】Could Foundry學習——Could Foundry淺談

art lock mod out isp ted 組成 .com pop 在閱讀的過程中有不論什麽問題。歡迎一起交流 郵箱:[email protected]/* */ QQ:1494713801 Cloud Foundry是VMware

Android中關於JNI 的學習對於JNIEnv的一些認識

else size 初步 jint 使用 包括 pri jnienv 就會 一個簡單的樣例讓我們初步地了解JNI的作用,可是關於JNI中的一些概念還是須要了解清楚,才可以更好的去利用它來實現我們想要做的事情。 那麽C++和Java之間的是怎樣通過JNI來進行互相調用的呢

.Net MVC的學習

後綴 fonts mvc 存在 eth 大致 例如 pre gb2   套種間作,也挺有意思的——近來學習感悟。DRP學習的同一時候,折騰了點曾經不曾學習可是卻非常多次耳聞過的東西——Asp.Net中的MVC架構模式。 一、是什麽?      MVC,即(Model-

Python學習

ubun 安裝目錄 tle setup extract reat 常用插件 增加 網址 Python學習(一) 一:開發工具安裝   1,pycharm下載:Linux版本   2,破解:在help-register下-service輸入:      http://elpo

Web Service學習

內存 res 特性 response 屬性表 高性能 fas str ima 1、WebMethod特性包含哪些屬性,都有什麽用? 1、BufferResponse屬性 該屬性表明是否啟用對Web Service方法響應的緩沖。當設置為true時,Web Service

Python基礎學習

func exe function 學習 typeerror exit invalid min eas #Default Argument Values & in keyworddef ask_ok(prompt, retres=4, reminder=‘pleas

Django學習---基本配置及創建項目、應用

cut 維護 onf response settings 通過 學習 clu render 安裝:在Django官網下載最新版Django然後通過pip安裝即可 一、創建項目 進入文件夾,打開cmd窗口,輸入django-admin startproject myblog(

機器學習

無限 size mage 計算機 博客 對數 png 表示 獲得 對學習的定義 學習經驗E 完成任務T 績效指標P 對於某類任務T和性能度量P,如果一個計算機程序在完成T上以P來衡量完成的好壞,並隨著經驗E而自我完善,那麽我們稱這個計算機程序在從經驗E中學習

Linux服務器學習

-1 修改 感覺 img size 地址 mage 第一次 spa 一、首先連接服務器   下載一個windows下連接linux的ssh工具,我這裏用的putty。一次填入HostName(主機名,可以是服務器域名也可以是對應的ip)、Port(端口號默認為22)、Co

CSS3總結學習:CSS3用戶界面

interface 繪制 如果 位置 nbsp 瀏覽器 none ble adding 在CSS3中,新的用戶界面屬性有很多,本文重點介紹resize,box-sizing,offset。 瀏覽器支持,如下圖,圖片源於W3school 1.CSS Resizing 在cs

Spring 源碼學習

pla 註入 websocket web前端 tex 異常 messaging ping 完整 設計伊始 Spring 是為解決企業級應用開發的復雜性而設計,她可以做很多事。但歸根到底支撐Spring的僅僅是少許的基本理念,而所有地這些的基本理念都能可以追溯到一個

[linux][MongoDB] mongodb學習:MongoDB安裝、管理工具、

ole ont mon mkdir man 管理工具 tar end 認證 參考原文:http://www.cnblogs.com/kaituorensheng/p/5118226.html linux安裝完美實現! 1. mongoDB安裝、啟動、關閉   1.1

算法學習插入排序算法

-1 color pri 最小 inpu range col pre arr 1.Maximum of array 說明:給定一組數組,進行排序,得到最大值和最小值。 1 input data: 2 1 3 5 7 9 11 ... 295 297 299 300 298

[轉]JMeter學習工具簡單介紹

正在 包含 定義 寫入文件 線程組 element 層級 工作臺 roc 一、JMeter 介紹 Apache JMeter是100%純JAVA桌面應用程序,被設計為用於測試客戶端/服務端結構的軟件(例如web應用程序)。它可以用來測試靜態和動態資源的性能,例如: