您好,登錄后才能下訂單哦!
本篇內容介紹了“如何利用Mesos構建多任務調度系統”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
背景
公司內部的云平臺為各個業務線提供了大量的實體機和虛擬機來運行業務的服務,經過統計發現,這些分配給業務的機器cpu, memory等資源利用并不充分;
如果能夠充分利用這些機器上的空閑資源同時又能保證業務服務的正常運行,將會節省不少的機器資源;
選型
一提到多任務運行和調度,大部分人可能首先都會想到Kubernetes(k8s) + Docker, 跑起來如清風拂面, 順暢無比。然而我們的業務機器大部分為centos 6.2, linux kernel 2.6的環境,而docker的運行需要Linux kernel的版本是 3.10+
(可參考: https://docs.docker.com/engine/faq/#how-do-i-connect-docker-containers)
因為想利用業務正在使用的機器,又不能影響現有已在跑的服務, 所以不能升級內核, 不能重啟機器,顯然k8s這條路走不通;
還好,這個世界總是提供給我們多樣的選擇,除了Kubernetes(k8s) + Docker, 我們還有mesos;
Mesos簡介
先放上官方網站, 上面有很詳細的說明;
http://mesos.apache.org/
簡單來說,Mesos就是用于整個計算中心的操作系統,它統一管理計算中心所有機器的cpu, memory, disk, network等計算資源,按任務所需分配資源,調度任務,支持故障轉移等等;
Mesos特性
Mesos最大特點是兩級資源調度, 如下圖:
上面架構圖的簡要說明如下:
各個Agent上報自已的計算資源給Master;
Master給各個二級調度框架Framework發送resource offer;
Framework將其上等待調度的task與收到的resource offer作匹配,反饋給Master;
Master將相應Framework反饋的task和resource offer發送到對應的Agent;
Agent使用Executor來運行task, 并限定資源使用;
在Mesos上可以運行Spark, Storm, Hadoop, Marathon等多種Framework;
Mesos系統架構
官方文檔:
http://mesos.apache.org/documentation/latest/architecture/;
針對任務隔離這塊, Mesos除了支持docker容器技術,還提供了它自己的Mesos Containerizer, 這正是我們所需要的.其實Mesos Containerizer目前也是利用Linux Cgroup作資源限制, 用Linux namespace作資源隔離.
Mesos Containerizer:
http://mesos.apache.org/documentation/latest/mesos-containerizer/
面臨挑戰
我們的多任務調度系統需要解決的幾個問題
Mesos agent在業務機器上需要非侵入式地部署,不能污染所部署的機器的環境;
實時監控和調整Mesos Agent所能使用的計算資源;
Task的快速部署和資源隔離;
集群整體運行情況的監控;
多任務調度系統總體架構
架構設計圖
各組件簡介:
1.1 主體還是Mesos master + Mesos agent;
1.2 二級調度框架使用的是Marathon;
1.3 在部署了Mesos agent的機器上同時部署monitor用于實時監控和調整Agent的可用計算資源;
系統運行流程,按上圖中標號順序
2.1 Monitor實時監控組件收集所在機器上的可用資源;
2.2 Monitor根據所在機器上的可用資源動態調整agent的保留資源;
2.3 Agent動態實時的將自已的保留資源上報到Mesos master;
2.4 Mesos Master在resource offer發到Marathon;
2.5 Marathon根據收到的resource offer和需要運行的task作資源分配, 將分配結果反饋給Mesos Master;
2.6Mesos Master將task分配到具體的Agent上執行;
Mesos agent在業務機器上非侵入式部署
我們采用的是Mesos 1.4.1版本,用C++11編寫,Mesos項目本身非常龐大,依賴庫必然也很多,解決這些運行依賴問題首當其沖;
部署原則就是不改變,不污染所部署的機器環境,針對libstdc++和其他一些so, 我們不會將其安裝到例如/usr/local/lib這樣的系統目錄, 而是在打包時采用動態更改可執行程序的rpath的方法,使其運行時從我們的安裝目錄加載相應的so庫, 具體作法就是
我們將mesos運行所需要的所有lib文件都集中放在libs目錄下;
編譯出來的mesos可執行文件,使用patchelf來更新rpath路徑,指向我們自已的libs目錄即可;
patchelf這個工具可以在不影響可執行文件運行的前提下,修改其elf文件結構中的某些屬性值,具體可參考:https://nixos.org/patchelf.html
這樣部署完,Mesos agent只是一個單獨的目錄,卸載只需要停掉進程,刪除目錄就好;
說一下編譯過程,雖然官網上已經介紹得比較詳細,但在編譯過程中還是會遇到一些問題:
官網編譯步驟: 請參考
http://mesos.apache.org/documentation/latest/building/;
gcc官方要求是 4.8.1+, 我用了 gcc 5.4, 自己在 centos 6.2,linux 2.6.32上重新編譯的;
編譯默認是編譯java語言的binding的, 但在 編譯 "Build and attach javadoc"時缺 protobuffer的jar包,沒編譯過, 解決方案:修改 src/java/mesos.pom.in,先找到 ``, 在它下面的 <configuration>下添加 <skip>true</skip>,這樣不會編譯這個 javdoc, 但不影響 java binding的使用
實時監控和調整Agent所能使用的計算資源
自行開發了Monitor程序,和Agent一同部署在業務機器上,周期性的監測機器上可用資源和Agent本身所用資源;
Mesos為我們提供了動態資源保留這個超實用的功能,可以限制Agent當前針對某個Role可以使用的計算資源:
Monitor的監控評估結果就是當前Agent可以使用的計算資源;
本想著到這里這個問題就結束了,測試時發現Agent并不能在線實時調整這個動態資源保留,需要在配置文件時更新好當前能夠使用的動態資源,然后重啟Agent;
重啟Agent是我們不能忍受的,因此我們修改了源碼,通過http接口在線調整動態資源保留, 這部分其實不難,mesos http接口定義十分清晰,依葫蘆畫瓢就好了.
Task的快速部署和資源隔離
task的部署目前我們采用Marathon,上手簡單,功能夠用; 如果需要更靈活的調整策略,可能就需要自己開采框架或基于某一框架二次開發了;
task其實是有重要,緊急之分,占用資源也不盡相同。對于重要緊急任務,為了保障任務的更好運行,我們會利用Mesos attribute,在調度任務時讓特定任務只跑在具有特定attributes的agent上, 這就需要為每個mesos agent設置相應的attributes;
遇到了同樣的問題,mesos不能在線動態調整attributes :-(, 其實也比較簡單,稍微梳理下mesos源碼結構,改起來不難;
還有一個問題,attributes是動態調整的,agent如果重啟了怎么辦?我們為此部署了etcd集群來管理,每臺agent都是etcd上的一個node, 通過etcd提供的http接口更新其attribrtes, agent會周期性的從etcd上同步;同時各agent 上的attributes信息也很容易從etcd上獲得;
直接操作etcd, 刪除某臺agent上的attribute, 那依賴于這種attribute部署的任務會自動別調度走,不再在這臺agent上運行;
task隔離問題,針對cpu和memory,mesos都是通過cgroup來完成,對于cpu的限制, 我們使用cfs方式,前提是需要判斷當前kernel是否支持.對于disk的限制,目前mesos使用的是du命令周期性檢測的方式;
對于cpu的限制,mesos有兩種方式:
cpu shared方式:這種方式對 cpu 沒有嚴格限制,機器上的任何task都可以訪問機器上所有cpu資源,比如你限定的cpu使用資源是2, 這種方式可能使用到4,6或更高;
cpu CFS方式: 相當于配置了獨占 cpu, 比如cpu配置為1,那么這個任務的 cpu 使用率就不會超過 100%, 相當于設定了一個hard limit;
在我們的大部分環境中,受限于kernel版本,mount namespace不支持,因此我們采用rootfs + chroot的方式來作簡單的資源隔離;
我們定制了若干版本的rootfs, 任務打包就是將任務本身的依賴和相應rootfs結合的過程, 打包好可以放到s3等存儲上,供marathon部署任務時調用。
這里我們結合marathon的一個任務部署的json配置來講一下, 先看一個這個配置, 我將說明直接寫在里面
“如何利用Mesos構建多任務調度系統”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。