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應用程序)。它可以用來測試靜態和動態資源的性能,例如: