Mesos+Zookeeper+Marathon+Docker分散式叢集管理最佳實踐
-
Mesos簡介
-
Zookeeper簡介
-
Marathon簡介
-
docker叢集實踐
-
Mesos叢集部署
一、Mesos簡介
Mesos是Apache下的開源分散式資源管理框架,它被稱為分散式系統的核心。Mesos最初是由加州大學伯克利分校的AMPLab開發,後在Twitter得到廣泛使用。
-
Mesos-Master:主要負責管理各個framework和slave,並將slave上的資源分配給各個framework。
-
Mesos-Slave:負責管理本節點上的各個mesos-task,比如:為各個executor分配資源。
-
Framework:計算框架,如:Hadoop、Spark、Kafaka、ElasticSerach等,通過MesosSchedulerDiver接入Mesos
-
Executor:執行器,就是安裝到每個機器節點的軟體,這裡就是利用docker的容器來擔任執行器的角色。具有啟動銷燬快,隔離性高,環境一致等特點。
Mesos-Master是整個系統的核心,負責管理接入Mesos的各個framework(由frameworks_manager管理)和slave(由slaves_manager管理),並將slave上的資源按照某種策略分配給framework(由獨立插拔模組Allocator管理)。
Mesos-Slave負責接受並執行來自Mesos-master的命令、管理節點上的mesos-task,併為各個task分配資源。Mesos-slave將自己的資源量傳送給mesos-master,由mesos-master中的Allocator模組決定將資源分配給哪個framework,當前考慮的資源有CPU和記憶體兩種,也就是說,Mesos-slave會將CPU個數的記憶體量傳送給mesos-master,而使用者提交作業時,需要指定每個任務需要的CPU個數和記憶體。這樣當任務執行時,mesos-slave會將任務放導包含固定資源Linux
container中執行,以達到資源隔離的效果。很明顯,master存在單點故障問題,為此Mesos採用了Zookeeper解決該問題。
Framework是指外部的計算框架,如果Hadoop、Mesos等,這些計算框架可通過註冊的方式接入Mesos,以便Mesos進行統一管理和資源分配。Mesos要求可接入的框架必須有一個排程模組,該排程器負責框架內部的任務排程。當一個framework想要接入Mesos時,需要修改自己的排程器,以便向Mesos註冊,並獲取Mesos分配給自己的資源,這樣再由自己的排程器將這些資源分配給框架中的任務,也就是說,整個Mesos系統採用了雙層排程框架:第一層,由Mesos將資源分配給框架。第二層,框架自己的排程器將資源分配給自己內部的任務。
當前Mesos支援三中語言編寫的排程器,分別是C++、Java、Python。
Executor主要用於啟動框架內部的task。由於不同的框架,啟動task的介面或者方式不同,當一個新的框架要接入mesos時,需要編寫一個Executor,告訴Mesos如何啟動該框架中的task。為了向各種框架提供統一的執行器編寫方式,Mesos內部採用C++實現了一個MesosExecutorDiver(執行器驅動器),framework可通過該驅動器的相關介面告訴Mesos啟動task的方式。
整體架構如圖1.1-1所示:
圖1.1-1總體架構
圖1.1-1展示了Mesos的重要組成部分,Mesos由一個master程序管理執行著每個客戶端節點的slave程序和跑任務的Mesos計算框架。
Mesos程序通過計算框架可以很細緻的管理cpu和記憶體等,從而提供資源。每個資源提供都包含了一個清單(slave ID,resource1:amount1,resource2,amount2,…)master會根據現有的資源決定提供每個計算框架多少資源。例如公平分享或者根據優先順序分享。
為了支援不同種的政策,master通過外掛機制新增額一個allocation模組使之分配資源更簡單方便。
一個計算框架執行在兩個組建之上,一個是Scheduler,他是master提供資源的註冊中心,另一個是Executor程式,用來發起在slave節點上執行計算框架的任務。master決定給每個計算框架提供多少計算資源,計算框架的排程去選擇使用哪種資源。當一個計算框架接受了提供的資源,他會通過Mesos的任務描述執行程式。Mesos也會在相應的slave上發起任務。
資源提供案例,如圖1.1-2所示:
圖1.1-2資源提供案例
下面我帶大家一起熟悉圖1.1-2的流程步驟:
-
slave1報告給master他擁有4核cpu和4G剩餘記憶體,Marathon呼叫allocation政策模組,告訴slave1計算框架1應該被提供可用的資源。
-
master給計算框架1傳送一個在slave上可用的資源描述。
-
計算框架的排程器回覆給master執行在slave上兩個任務相關資訊,任務1需要使用2個CPU,記憶體1G,任務2需使用1個CPU,2G記憶體。
-
最後,master傳送任務給slave,分配適當的給計算框架執行器,繼續發起兩個任務(圖1.1-2虛線處),因為任有1個CPU和1G記憶體未分配,allocation模組現在或許提供剩下的資源給計算框架2。
除此之外,當任務完成,新的資源成為空閒時,這個資源提供程式將會重複。
二、Zookeeper簡介
Zookeeper是一個分散式的,開放原始碼的分散式應用程式協調服務,是Google的Chuby一個開源的實現,是Hadoop和Hbase的重要元件。它是一個分散式應用提供一致性服務的軟體,提供的功能包括:配置維護、名字服務、分散式同步、組服務等。
1.2.1Zookeeper角色
-
Leader(領導者):負責投票發起和決議,更新系統狀態。
-
follower(跟隨者):Follower用於接收客戶請求並向客戶端返回結果,在選主過程中參與投票。
-
ObServer(觀察者):ObServer可以接受客戶端連線,將寫請求轉發給Leader節點,但ObServer不參加投票過程,只同步Leader的狀態,ObServer的目的是為了拓展系統,提高讀取速度。
-
Client(客戶端):請求發起方。
1.2.2Zookeeper工作原理
Zookeeper的核心是原子廣播,這個機制保證了各個Server之間的同步。實現這個機制的協議叫做Zab協議。Zab協議有兩種模式,它們分別是恢復模式(選主)和廣播模式(同步)。當服務啟動或者在領導者崩潰後,Zab就進入了恢復模式,當領導者被選舉出來,且大多數Server完成了和Leader的狀態同步以後,回覆模式就結束了。狀態同步保證了Leader和Server具有相同的系統狀態。
為了保證事物的順序一致性,Zookeeper採用了遞增的事物ID號(zxid)來標識事物。所有的提議(proposal)都在被提出的時候加上了zxid。實現中zxid是一個64位的數字,它高32位是epoch用來標識Leader關係是否改變,每次一個Leader被選出來,它都會有每一個Server在工作過程中三種狀態。
-
q LOOKING:當前Server不知道Leader是誰,正在搜尋。
-
q LEADING:當前Server即為選舉出來的Leader。
-
q FOLLOWING:Leader已經選舉出來,當前Server與之同步。
1.2.3Zookeeper選舉流程
當Leader崩潰或者Leader失去大多數的Follower,這時候zk進入恢復模式,恢復模式需要重新選舉出一個新的Leader,讓所有的Server都恢復到一個正確的狀態。
ZK的選舉演算法有兩種:
-
基於Basic paxos實現
-
基於fast paxos演算法實現
系統預設的選舉演算法為fast paxos。
1.2.4Zookeeper同步流程
選完Leader以後,zk就進入狀態同步過程。
-
Leader等待server連線。
-
Follower連線Leader,將最大的zxid傳送給Leader。
-
Leader根據Follower的zxid確定同步點。
-
完成同步後通知Follower已經成為uptodate狀態。
-
Follower收到uptodate訊息後,又可以重新接受client的請求進行服務。
1.2.5Zookeeper工作流程
Leader三大功能:
-
恢復資料
-
維持與learner的心跳,接收learner請求並判斷learner的請求訊息型別
-
learner的訊息型別主要有PING訊息、REQUEST訊息、ACK訊息、REVALIDATE訊息,根據不同的訊息型別,進行不同的處理。
PING訊息是指Learner的心跳資訊;REQUEST訊息是Follower傳送的提議資訊,包括寫請求及同步請求;ACK訊息是Follower的對提議的回覆,超過半數的Follower通過,則commit該提議;REVALIDATE訊息是用來延長SESSION有效時間。
Follower主要四大功能:
-
向Leader傳送請求(PING訊息、REQUEST訊息、ACK訊息、REVALIDATE訊息)。
-
接收Leader訊息並進行處理。
-
接收Client的請求,如果為寫請求,傳送給Leader進行投票。
-
返回Client結果。
Follower的訊息迴圈處理如下幾種來自Leader的訊息:
-
PING訊息:心跳訊息。
-
PROPOSAL訊息:Leader發起的提案,要求Follower投票。
-
COMMIT訊息:伺服器端最新一次提案的資訊。
-
UPTODATE訊息:表明同步完成。
-
REVALIDATE訊息:根據Leader的REVALIDATE結果,關閉待revalidate的session還是允許其接受訊息。
-
SYN訊息:返回SYNC結果到客戶端,這個訊息最初由客戶端發起,用來強制得到最新的更新。
三、Marathon簡介
Marathon是一個Mesos框架,能夠支援執行長服務,比如Web應用等。它是叢集的分散式init.d能夠原樣執行任何Linux二進位制釋出版本,如Tomcat、Play等等。它也是一種私有的PaSS,實現服務的發現,為部署提供REST API服務,有授權和SSL、配置約束,通過HaProxy實現服務發現和負載平衡。
四、docker叢集實踐
1.4.1叢集環境準備
1.4.2Zookeeper偽叢集安裝部署
部署Zookeeper需要java支援, 主流1.7,穩定最新1.8,開發最新1.9,這邊選擇yum安裝即可支援Zookeeper
1.4.2.1Zookeeper配置檔案詳解
1.4.2.2Zookeeper配置檔案修改
由於是偽叢集的配置方式,B(IP地址)都是一樣,所以不同的Zookeeper例項通訊埠號不能一樣,所以要給它分配不同的埠號。
1、建立三個目錄來存放Zookeeper的資料
2、生成三份Zookeeper配置檔案
3、修改zk2、zk3對應的資料存放目錄以及埠
1.4.2.3Zookeeper角色檢視
1、啟動Zookeeper並檢視角色
2、連線Zookeeper
五、Mesos叢集部署
安裝Mesosphere倉庫,需要在Mesos Master和Mesos Slave節點安裝。
1.5.1Mesos_Master部署
1.5.2Mesos_Slave部署
1.5.3Mesos_Web介面
訪問:http://192.168.56.11:5050,如圖1.5-1所示:
圖1.5-1Tasks表格沒有任何條目
執行Mesos任務,可以在Web介面檢視task如圖1.5-2所示:
圖1.5-2執行Mesos任務
1.5.4Marathon呼叫Mesos執行Docker容器
通過marathon預設監聽8080埠,通過marathon建立專案,如圖1.5-3所示:
圖1.5-3Marathon介面
下面通過Mesos排程,使用marathon來建立一個nginx映象的Docker容器,Marathon啟動時會讀取/etc/mesos/zk配置檔案,Marathon通過Zookeeper來找到Mesos Master。
Marathon有自己的REST API,我們通過API的方式來建立一個Nginx的Docker容器。首先建立如下的配置檔案nginx.json
使用curl的方式呼叫
訪問Docker隨機啟動的埠31011,如圖1.5-4所示:
圖1.5-4成功訪問Nginx介面
在MarathonWeb介面檢視,如圖1.5-5所示:
圖1.5-5MarathonWeb介面檢視Nginx已經在執行
在Mesos介面檢視,如圖1.5-6所示:
圖1.5-5Mesos介面檢視Nginx Tasks
也可以點選Marathon左上角的建立進行建立容器。
注意:這裡哪Nginx來舉例,註冊中心的marathon+mesos+docker叢集是不適合用於服務的,也就是說不適合於對外開放埠的。比如說爬蟲,因為不開放埠,需要做的僅僅是從佇列中取資源,然後處理,存庫。
這個僅僅是job的釋出管理執行,還有沒CI,也就是說持續整合,後期我會發布jenkins+docker+mesos+marathon+git持續整合的方案,如果將程式碼釋出結合DCO框架。
相關推薦
Mesos+Zookeeper+Marathon+Docker分散式叢集管理最佳實踐
目錄 Mesos簡介 Zookeeper簡介 Marathon簡介 docker叢集實踐 Mesos叢集部署 一、Mesos簡介 Mesos是Apache下的開源分散式資源管理框架,它被稱為分散式系統的核心。Mesos最初是由加州大學伯克利分校
Mesos+ZooKeeper+Marathon+Docker分散式部署打造PaaS雲平臺實踐(一)
【編者的話】本文先給出一個分散式部署的過程,在完成這種分散式部署的過程花費了我一個週末的時間,因為國內幾乎沒有找到分散式部署的實踐過程記錄,希望我的實踐過程能夠給有興趣的小夥伴在進行分散式部署中提供一定的幫助。最近開始對Mesos非常的感興趣,Mesos和Docker一樣是一
部署Mesos+zookeeper+Marathon+Docker實戰
結果 executor disco client lower key 伸縮 python 開發 Mesos是什麽? Mesos是Apache下的開源分布式資源管理框架,它被稱為是分布式系統的內核。Mesos能夠在同樣的集群機器上運行多種分布式系統類型,更加動態有效率低共享資
【Docker篇四】Mesos+Zookeeper+Marathon+Docker實戰實驗
開發工具 簡化 mark too 資源調度 ext 網絡 上線 root Apache Mesos概述 不同的分布式運算框架(spark,hadoop,ES,MPI,Cassandra,etc.)中的不同任務往往需要的資源(內存,CPU,網絡IO等)不同,它們運行在同一個集
幹貨|Mesos分布式集群管理最佳實踐
整理 技術分享 tor 通過 新的 mar 推廣 客戶 報告 Mesos最開始由加州大學伯克利分校開發,推廣於美國版的微博Twitter 是Apache下的開源分布式資源管理框架, 它被稱為分布式系統的內核,相當於人的大腦。 Mesos-Master是整個
Docker容器日誌管理最佳實踐
目錄 一 、Docker 引擎日誌 二、容器日誌 2.1、常用檢視日誌命令——docker logs 2.2 、Docker 日誌 驅動 三、 生產環境中該如何儲存容器中的日
Yum安裝mesos+zookeeper+marathon管理docker集群
tick datadir 參加 重定向 狀態信息 實現 官方 tro ln -s Yum安裝mesos+zookeeper+marathon管理docker集群 Apache-Mesos簡介 Apache-Mesos是一款基於多資源(內存、CPU、磁盤、端口等)調度的開源
Mesos+Zookeeper+Marathon的Docker管理平臺部署記錄(2)--負載均衡marathon-lb
[[email protected] ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS
Mesos+Zookeeper+Marathon的Docker管理平臺部署記錄(1)
隨著"網際網路+"時代的業務增長、變化速度及大規模計算的需求,廉價的、高可擴充套件的分散式x86叢集已成為標準解決方案,如Google已經在幾千萬臺伺服器上部署分散式系統。Docker及其相關技術的出現和發展,又給大規模叢集管理帶來了新的想象空間。如何將二者進行有效地結合?下面將記錄使用Mesos+Zoo
13、Zookeeper 分散式叢集管理技術
1.Zookeeper 簡介 Zookeeper 分散式服務框架主要是用來解決分散式應用中經常遇到的一些資料管理問題,提供分散式、高可用性的協調服務能力,在 FusionInsight 叢集中主要用途是儲存上層元件的元資料,並保證其主備倒換。 Zookeeper 的作用 (1)
zookeeper【2】叢集管理
Zookeeper 的核心是廣播,這個機制保證了各個Server之間的同步。實現這個機制的協議叫做Zab協議。 Zab協議有兩種模式,它們分別是恢復模式(選主)和廣播 模式(同步)。當服務啟動或者在領導者崩潰後,Zab就進入了恢復模式,當領導者被選舉出來,且大多數Server完成了
Docker容器叢集管理之Swarm
Docker容器叢集管理主流方案 Swarm Docker公司自研發的叢集管理系統。 Kubernetes Google開源的一個容器叢集管理系統,用於自動化部署、擴充套件和管理容器應用。也稱為K8S Mesos Mesos是一個叢集資源排程系統,對叢集中的資源進行分配和管理。Maratho
Mesos zookeeper marathon 多節點高可靠性部署方案
目錄 用 [TOC]來生成目錄: Mesos 的叢集實踐 搭建mesos叢集包含以下元件,zookeeper, mesos, marathon。 如果實現服務發現,可以利用mesos-dns或者第三方元件consul。 本文主要介紹如何搭建一個多
Kubernetes企業級Docker容器叢集管理平臺實戰-李振良-專題視訊課程
Kubernetes企業級Docker容器叢集管理平臺實戰—42人已學習 課程介紹 在過去幾年中,開源容器技術Docker,Kubernetes獲得了廣泛市場支援和企業應用,而K8s已經成為容器編排領域領頭羊,在國內外越來越多的企業已經在生產環境基於K8s構建容
Docker_swarm叢集搭建和服務上線及docker-machine叢集管理工具
1. Docker_swarm叢集搭建 叢集安裝docker: 環境部署: 角色 server-id 安裝 MANAGER Server1 DOCKER(MASTER) NODE1 Server2 DOC
淺談分散式叢集管理的原理,看看叢集究竟是做什麼的
本文始發於個人公眾號:**TechFlow**,原創不易,求個關注 今天是分散式專題的第11篇文章,我們一起來聊聊分散式叢集資源管理。 在開始文章之前,我們先來問一個問題,為什麼是國際上是亞馬遜,國內是阿里這兩家公司雲端計算搞得最好呢?這兩家公司之間有一個巨大的共同點,就是它們都是電商公司。電商公司的特
淺談分散式叢集管理系統的一些細節【二】
本文始發於個人公眾號:TechFlow,原創不易,求個關注 今天是分散式專題的第12篇文章,我們繼續來看叢集資源管理系統。 上一篇的文章當中我們簡單瞭解了一下什麼是分散式叢集資源管理,它的誕生背景和解決的問題是什麼,以及它大概有哪些優點和不足。上一章的內容比較表面,沒有過多深入原理,這一篇文章我們一起來看看
Docker Swarm 叢集管理利器核心概念掃盲
![](//p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/270ea0fa207949f8a841d7fe0b5af4fb~tplv-k3u1fbpfcp-zoom-1.image) ## Swarm 簡介 Docker Swarm 是 Docker 官方
Git 分支管理最佳實踐
thead .html 遠程倉庫 line 管理層 base init 代碼審查 有效 it 是目前最流行的源代碼管理工具。大量的軟件項目由 GitHub、Bitbucket 和 GitLab 這樣的雲服務平臺或是私有的 Git 倉庫來管理。在使用 Git 時通常會遇到的一
基於 Etcd 的分散式鎖——分散式鎖的最佳實踐
目前,可實現分散式鎖的開源軟體還是比較多的,其中應用最廣泛、大家最熟悉的應該就是 ZooKeeper,此外還有資料庫、Redis、Chubby 等。但若從讀寫效能、可靠性、可用性、安全性和複雜度等方面綜合考量,作為後起之秀的 Etcd 無疑是其中的 “佼佼者” 。它完全媲美業