Apache Mesos和數據中心操作系統的崛起

jopen 8年前發布 | 22K 次閱讀 Apache Mesos

本文是Mesosphere公司的工程師對他們公司產品DCOS的介紹,也順帶介紹了Mesos的架構和功能以及Mesos的init框架Marathon和Cron框架Chronos。

羅杰伊尼亞齊奧是Mesosphere的基礎設施自動化工程師和“Mesos實踐”的作者。 感謝曼寧出版的團隊的慷慨,SysAdvent讀者在在 https://manning.com/books/mesos-in-action使用代碼“mesysad”時享受40%的折扣。

容器和應用程序編排是熱門話題,因為組織和工程團隊試圖盡可能快地部署應用程序和基礎設施的更改,同時提高數據中心的整體效率。當你讀到容器的文章時,提到 Apache Mesos( 論文)通常都不會太遙遠。你可能想知道Mesos是什么,以及如何將它用于管理大規模應用程序。

在這篇文章中,我將提供Mesos的介紹,總結一些Linux內核和Mesos之間的比較,以幫助你了解它是如何工作的。我將覆蓋兩個開源項目,這兩個項目讓工程團隊能快速,輕松地部署在集群上的應用程序和計劃任務。最后,我將討論 Mesosphere是如何結合所有這些來創建數據中心范圍內的操作系統,并以Mesos為核心。

MESOS - 分布式內核

無論你正在你的筆記本電腦,智能手機還是平板電腦上閱讀這篇文章,很可能你不知道你的Web瀏覽器 在使用它的哪個處理器的核心。當然你可以找到,但是何必呢?操作系統的內核為你處理資源的抽象和調度。最終,操作系統很可能壓根兒就不關心那么多;你只想 要一個來運行你所愛的應用程序的方式,操作系統是提供那種體驗的一種手段。

Mesos,和操作系統內核沒有什么不同,提供了一種物理或虛擬機之上的抽象資源的方式。但是,它開始和操作系統內核(如Linux)不同的是抽象未綁定 到一臺單個的主機。相反,Mesos提供了一種為任何數量的機器抽象資源的方式,從10幾到超過10,000——并將它們編程為一個單一的實體,從而導致 簡化的系統管理和提高資源利用率。許多公司,如Apple、推ter、 Airbnb、彭博社以及其他的公司已經轉向Mesos來增強他們的計算基礎設施。

為了更好地可視化我剛才解釋的,看看下面的圖,比較在一臺機器上運行的Linux內核,以及多臺計算機參加的一個Mesos集群之間的資源抽象和調度。

 Apache Mesos和數據中心操作系統的崛起

兩種情況共有的是,一些抽象層 —— 無論是Linux內核的單一機器硬件還是Mesos的多臺機器 —— 負責提供計算資源(處理器核心,內存,存儲和網絡端口)給應用程序。 Linux在一臺機器上在這件事情上做出了出色的工作,但是當你想要把應用程序部署到多臺機器上時會發生什么?每臺機器實際上變成了一個筒倉,只能夠提供 也在那個盒子運行的應用程序的資源。

資源調度

盡管是一個近期熱門的流行語,“資源調度”并不是一個新的概念。兩個流行的例子是Linux內核中的 完全公平調度器和VMware vSphere的 分布式資源調度器(DRS)。 在這兩種情況下,這些調度器在可用資源的基礎上尋求優化任務的調度。 Mesos從這兩個調度器借用想法,并建立成一個抽象層,或者它自己的“分布式內核”。但是,不像Linux內核,它主要提供了訪問一臺機器上的底層物理 (或虛擬)計算資源,Mesos代理為一個Mesos主節點提供資源,然后被各種應用程序使用。

Mesos主節點實現了一個兩層調度模型,這使得Mesos主節點能發送資源供給給一個應用程序(或框架,用Mesos的說法)。然后,應用程序 可以接受或拒絕這個供給,基于供給的屬性,或者如果供給有任何任務要執行。Mesos主節點能夠調度多個不同的資源類型——CPU,內存,磁盤,端口—— 在各種不同的應用中,通過內置到它的資源分配模塊的 優勢資源公平算法。因此,取代供應多臺計算機來運行特定服務的是你現在可以定義應用程序需求的資源量,并允許它在群集上的任何地方被調度。

靜態分區的終結

讓我們暫時退一步,并考慮以下情形。你有兩個服務在你的數據中心:一個Ruby on Rails應用程序,和一個Jenkins CI集群。當其中一個服務需要比一臺機器可以提供的更多的資源時,你提供更多的機器。如果你的Rails應用程序需要處理更多的用戶,你需要提供一個新的 服務器并 重新配置您的負載均衡器。如果構建正在排隊等候你的Jenkins CI主節點,你提供額外的詹金斯代理并手動將其連接到主節點。

這種情況表明,人類被留下進行徒手資源分配和容量規劃,坦率地說,我們很不擅長。很有可能這些應用程序不會100%的時間都是100%的利用率運行,從而導致了令人失望的 行業平均6-12%的系統利用率 。當你開始測算運營成本的整體利用率時, 這是一個很大的資本浪費!無論你是運行你自己的數據中心還是使用一個基礎設施即服務提供者例如AWS或者Azure,他們都是在這一天結束時有未使用周期的服務器。

通過抽象系統資源,你能停止猜測特定應用程序需要的機器數量,而是集中在他們實際上的資源消費量——也就是運行你的Rails應用程序或你的CI 服務的CPU和內存。只要數據中心的機器的數量提供了足夠的資源來運行所有的工作負載,你就是在良好的狀態。而如果不在,則可以將工作負載加入隊列,直到 資源可用為止。但關鍵是,你現在添加額外的計算資源是到更大的Mesos集群中,而不是一些小的、靜態分區的服務或手動創建和配置虛擬機中。

容器化

和在20世紀興起的貨運行業的聯運運輸集裝箱運動有許多相似之處,我們看到在IT行業的同樣的運動,不過是以驚人的速度。事實上,在計算中使用容器不是那么新; 控制組 (或簡稱cgroup)第一次加入到Linux內核早在2008年1月,作為分離單個進程的方式。在過去的幾年中, Docker最終用戶開始使用這種技術變的令人難以置信的簡單。

由于容器提供了虛擬機的輕量級替代,并允許用戶在孤立環境中運行他們的應用,Mesos的內核是建立在容器之上,同時支持Linux cgroup和Docker容器。這些容器技術允許任務在與同一臺機器上的其他任務不同的隔離水平上運行。

 Apache Mesos和數據中心操作系統的崛起


但作為一個分布式的內核,Mesos僅提供使用這些容器技術啟動進程,處理像資源分配,端口和卷映射的方式。要啟動使用Mesos的任務,我們需要一個init系統來管理任務,并且有一個cron系統和它一起會更好。

Marathon and Chronos —— init和cron框架

我已經提到,Mesos提供了一種多個應用程序( 或框架,使用Mesos術語)在給定的集群上共享多種不同類型的資源的方式。一個框架在Mesos 主節點上注冊并接受資源供給。有 許多不同的框架目 前可用,包括大數據處理(Spark,Kafka),分布式存儲和數據庫(HDFS,Cassandra),批調度(Chronos,Aurora),以 及長時間運行的服務(Marathon,Aurora)。我會集中討論兩個流行框架:Marathon和Chronos。這些框架分別用于部署長時間運行 的服務(如Web應用程序)和分布式cron作業。

Marathon

Marathon 是由Mesosphere開發的Mesos的開源init系統。它大致相當于supervisord——管理長時間運行任務,并自動重新啟動應用程序實 例,如果它發生故障。因此,如果一臺機器在群集中在半夜出現故障,馬拉松自動在一個可用的機器重新調度出現故障的應用程序。

馬拉松支持在Mesos集群上啟動cgroup和Docker容器,并能快速簡單地擴展應用到N個實例 。

馬拉松還包括一個可擴展的的 REST API,它允許您創建、修改和刪除應用,以及查詢有關運行實例的信息。這允許你在發生變化的時候 使用你的CI系統自動執行應用的滾動升級 ,或者 動態創建HAProxy的配置并重新啟動服務。當涉及到應用管理時,Marathon允許你把你的調度中最糟糕的部分,人,從你的基礎架構中去除。

Chronos

Chronos 是一個 最初由Airbnb開發的Mesos的開源cron系統 。它建立在傳統的cron功能至上,如 ISO 8601格式時間戳,失敗作業自動重試,指定任務應運行的最長時間,允許一個作業依賴其他作業的能力。像Marathon一樣,它也支持在cgroup和Docker容器中運行任務,并提供了可擴展的 REST API,可用于創建,修改,刪除,和手動觸發工作。

Mesosphere DCOS —— 基于Mesos的操作系統

如果你花一分鐘思考,組成一個操作系統的組件,如Red Hat Enterprise Linux或Ubuntu,你可能會找出以下組件:

  • Init 系統: 一個守護進程(PID1), 例如 Systemd(RHEL 7)或Upstart(Ubuntu 14.04), 管理長時間運行服務,當它們失敗時自動重啟(或respawn)
  • 包管理: 一個包格式(rpm, deb), 包管理器(yum, apt), 一個基礎倉庫集合(base, main)
  • 命令行界面: 一個shell, 當用戶登陸時啟動(bash, zsh).
  • 圖形用戶界面: 一個可選的圖形用戶界面來觀測和管理系統.

有了開源的Mesos項目作為它的分布式內核,Marathon作為它的init 系統,Mesosphere已經著手建立一個現代的分布式的企業級的操作系統。這個系統,稱作 數據中心操作系統(DCOS), 為系統管理員提供了一種不用關心例如對服務靜態分區或在半夜機器故障的大規模部署應用和服務的方式。DCOS目前提供 兩種版本: 企業版和社區版

包管理

在寫這篇文章的時候,Mesosphere提供了DCOS的兩種包倉庫: UniverseMultiverse。這些倉庫分別托管生產可用的和測試的包。Universe的文檔很好的覆蓋了規范,這里我就不講了。但是它本質上可以歸結為一個JSON對象定義的包,可以被DCOS的CLI處理并被Marathon的API理解

命令行界面

DCOS CLI可以安裝在你的筆記本或工作站上,并可以和DCOS的多個服務交互。它提供了在DCOS集群管理包、服務、節點的功能。

SERVICES=( chronos jenkins spark hdfs cassandra kubernetes )
for service in ${SERVICES[@]}; do
dcos package install --yes $service
done


這些服務中的一些——Cassandra,HDFS,Kubernetes——需要一些不平凡的努力來有效部署。Mesosphere的團隊使用這些包倉庫提供和維護了在你自己的數據中心部署這些服務的一鍵的全自動的容錯的解決方案。

圖形界面

盡管DCOS CLI允許你完全從命令行管理操作系統,web界面提供了集群的包括安裝的服務,運行的任務以及屬于這個集群的節點的信息

 Apache Mesos和數據中心操作系統的崛起


要部署你自己的應用和Docker容器,你可以使用CLI或者導航到Marathon的web界面(在Services tab選項卡中)。在那你可以創建一個新的應用,指定需要的資源,實例的數量,Docker容器鏡像的信息,等等。雖然DCOS包含Marathon作為 它的init系統,你也可以在Marathon之上部署多個Marathon實例,這樣你可以為不同的團隊提供他們自己的PaaS而不用擔心他們的應用互 相影響。

總結

Mesos提供了數據中心多臺機器資源的抽象層,允許它們像一個實體一樣來編程。使得多個應用能共享一個集群的機器而不用 擔心數據中心內的靜態分區。Marathon允許你在集群上部署應用和長時間運行的服務,通過它的API獲得的信息可以用來動態的創建負載均衡器的配置和 在配置改變時重新加載配置。Mesosphere DCOS組合一系列開源的和商業的組件成為一個易于管理和部署的Mesos集群,允許你快速部署應用和容器。

所以,如果你想要提高你自己基礎機構的資源利用和去除人類調度的瓶頸,或者你只是在尋找一些新的東西來玩,或許是時候來試一試Mesos和Mesosphere DCOS了。


原文鏈接:Day 6 - Apache Mesos and the Rise of the Datacenter OS(翻譯:陳光)

來自:http://dockone.io/article/909

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!