1. 程式人生 > >基於Apache Mesos 構建高可靠,高可用的Jenkins CI

基於Apache Mesos 構建高可靠,高可用的Jenkins CI

Author: Mao, James

    Mesos 計算框架是一個開源的叢集管理平臺,他提供了高效的,高可靠的,跨應用/框架的資源隔離和共享,在其之上可以執行Hadoop,Spark,JBoss,Ruby On Rails等應用框架,支援多種資源的計劃分配。其中主要的一個目的就是有效的利用和共享計算資源,避免資源的浪費。Mesos 起源於Twitter和AirBnB,Twitter和AirBnB的很多核心服務以及大資料基礎架構就是建立在Mesos之上的。從Mesos開源開始就受到了業界廣泛的關注,eBay 是最早將這個平臺上搭建Jenkins CI的公司之一,同時我們也對完善這個系統做出了貢獻,本文就eBay在Apache Mesos 上搭建Jenkins CI 做一個比較系統的介紹。

Jenkins CI的兩種模式

    eBay的Jenkins CI 採用的是獨佔模式,每個人都可以申請一臺VM,預裝好Jenkins,他的優點是獨立,隔離,你在上面執行任務不會影響到其他人,其他人的任務也不會影響到你, 但是缺點也是明顯的,一臺VM往往有4個CPU,16GB的記憶體, 這樣對資源造成很大的浪費,大部分的時間你申請的VM都處於閒置狀態。

    Payal 的CI 採用的是Master/Slave模式, 統一的入口介面,但是你提交的任務是提交到Slave 叢集上,這樣的好處是大家共享Slave叢集資源,不必每人獨佔VM, VM的數量肯定大幅下降,但是缺點是Jenkins Master/Slave配置不靈活,Master需要知道所有的Slave節點的資訊,而且不能做到資源自動化的增加和回收。

    利用Apache Mesos/Marathon就可以很好的解決以上兩種模式的缺點。讓資源最大力度地的優化,同時配置也靈活並且自動化。

什麼是Mesos?

    Mesos是 Apache top level 的專案,是叢集管理軟體,用以有效利用計算資源,構建一個高可用、容錯的、可伸縮的系統。他為分散式的應用和框架提供有效的資源隔離和共享。在此之上你可以執行Hadoop, Hypertable, Spark, Marathon, JBoss, Ruby on Rails, Memcache, Jenkins CI等應用框架。

    Mesos 充分利用了當前流行的cgroups(Linux), zones (Solaris)中提供的CPU/記憶體/IO/檔案系統的隔離特性。Mesos想要做的是將如此多樣的計算資源整合在一起,對使用者來說就像一臺超級計算機。之前你的架構可能是將不同的應用部署在不同的叢集上,比如,為了Jenkins CI, 你搭建了一個叢集,為了Jira系統,你搭建在另外一個叢集上,為Hadoop,你又建了一個叢集。Mesos的目的就是將所有這些叢集的資源整合起來,而你的這些應用通過Mesos部署在這個大的叢集上,就像你在一臺超級計算機上安裝了不同的軟體一樣。

    Google也有類似Mesos這樣的專案的 Borg” 和 “Omega”。這些就是Google叢集管理的祕密武器。(warehouse-scale computing

Mesos 架構

    Mesos 架構上基本上是由Mesos Master , Mesos Slave和Frameworks 組成, Master 由ZooKeeper來負責災備, 同一時間只有一個Master (Leader) 來管理所有Slave, Frameworks 通過Mesos API呼叫在Slave上執行任務 (Framework Tasks)。 流行的Framework 包括Hadoop, MPI, 等。

    一個Framework由兩個重要的部件組成

  • 一個Scheduler 用以從Master接受和註冊資源;
  • 一個Executor 是啟動在Slave上的一個程序用以執行任務。

詳解工作流程:

  1. 當Slave有空閒資源時,向Master彙報他的資源情況,比如有幾個CPU,多少記憶體空閒;
  2. 通過分配規則(Allocation Policy), Master確定多少資源可以供給每個Framework;
  3. Master 將資源資訊(Offer)分發給Framework, Framework Scheduler 挑選其中的一個Offer;
  4. 當一個Framework接受Offer後,他會向Mesos提供一個希望在這個Offer上執行的任務的描述;
  5. 隨後Master會將這個任務發給提供這個Offer的Slave
  6. 最後,Framework的Executor將啟動來執行這個任務。

Mesos - Jenkins

     Jenkins Master/Slave 排程是一個可擴充套件的框架。

     Mesos Jenkins Plugin 通過對Jenkins Master/Slave 的擴充套件,利用Mesos API排程Mesos Slave資源來完成Jenkins Job的執行。

     安裝此Jenkins Plugin後,在系統管理中,能看到如下圖所示的配置

   

    從閱讀Mesos Jenkins Plugin 的原始碼我們可以看出,他也是Mesos Scheduler的實現

import org.apache.mesos.Scheduler;

import org.apache.mesos.SchedulerDriver;

public class JenkinsScheduler implements Scheduler {

public void registered(…) {}

public void disconnected(SchedulerDriver driver) {}

public synchronized void resourceOffers(…) {}

}

     Mesos Jenkins 的歷史很短,用的人也不是很多,所以自然會有很多bug,在使用過程中,我們對Mesos Jenkins Plugin 做了很多修訂, 你可以在這裡找到eBay對這個專案的貢獻。

Mesos High Availability

    上圖的配置項Mesos Master用來配置你的Mesos Master 的地址, 不過你可能注意到是zk://xxx:2181,什麼是zk協議? Zk是ZooKeeper的通訊協議。

    所以實際上Jenkins 是從ZooKeeper那裡得到Mesos Master地址, 而且ZooKeeper 一般都是配置一個Leader,兩個Standby,所以在上面的配置中,你會看到有3個ZooKeeper地址。 這樣做的好處是為了防止Single Point Failure。

    Mesos Master 啟動指令碼

root:~# ./mesos-master

--cluster=docker --zk=zk://host1:port1,host2:port2,.../path

   Master 啟動時候就將自己註冊到了ZooKeeper, 這個時候ZooKeeper 就知道了有哪幾臺Mesos Master 在系統裡。

    Mesos Slave啟動指令碼

root:~# ./mesos-slave

--cluster=docker --master=zk://host1:port1,host2:port2,.../path

    Slave 啟動時候會問ZooKeeper 要Master地址, 一旦得到後,Slave就可以直接

呼叫Master

    同一個時間只會有一臺ZooKeeper 作為Leader, 也只會有一臺Mesos Master 作為Leader, 當Leader掛起後,會重新選舉一臺作為Leader。

什麼是Marathon?

    從這個名字“馬拉松”可以猜到,他就是用來管理long-running 任務/服務。比如執行一個web 應用 (tomcat, play等), 這樣的一個應用執行的時間是很長的,如果這個應用壞掉了,Marathon可以幫你很快的在叢集裡找到另外一臺伺服器上啟動起來,繼續為使用者提供服務。甚至是Marathon自己也可以用Marathon來管理。你將他想象成是叢集版的init.d。旨在為使用者提供基於事件(event subscriptions)的高可用性的服務和監控。

    Marathon可以執行像Tomcat,Rails,Django,Play這樣的Web應用,Marathon提供了一套REST API 用來啟動,關閉這些應用,也提供了一套擴充套件這些應用的能力(Scale-in, Scale-out)。

    下圖比較直觀的描述了Mesos Master/Slave和Framework之間的關係:

    關於Marathon這裡有一個比較直觀的例子,左圖假設中間的機器上部署了一個Solr一個Play,如果這臺機器掛了, 那麼Marathon可以無縫的在叢集中找到另外一臺有空閒的伺服器上重新啟動一個Solr,在另外一臺機器上啟動一個新的Play。

ZooKeeper + Mesos + Marathon + Jenkins

    Jenkins Master 從本質上來說就是一個Web Application, jenkins.war 就是核心, 從前文我們已經瞭解到Marathon可以用來在Mesos上動態部署Web Application 而且可以保證應用的Availability. 所以我們自然就想到了用Marathon來部署Jenkins Master。而且這個Master裡已經安裝並配置好了Mesos Jenkins Plugin, 這樣當用戶拿到Jenkins Master 時候,他的Job就會利用Mesos 的資源排程,在Slave上執行。下圖就是eBay Jenkins CI 在Mesos 上執行的基本示意圖。

    啟動Marathon

root:~# export MESOS_NATIVE_LIBRARY=/usr/local/lib/libmesos-0.17.0.so

root:~# /usr/local/marathon/bin/start --master zk://localhost:2181/mesos --zk_hosts localhost:2181 --http_port 8086

    在前端, 利用Nginx 的反向代理,給使用者生成一個唯一的CI標識,比如http://ebayci.com/zhangsan, 這就是張三的Jenkins CI 入口, zhansan 並不關心Jenkins Master具體執行在那臺Server 上。這一切都是Marathon來控制的。

Zhangsan

zhangsan -ci-40560

phx-40560.abc.com

Lisi

lisi-ci-40360

phx-40360.abc.com

    假設張三的伺服器掛了phx-40560.abc.com, Marathon會監聽到這個Event,並會將這個Event發出來,此時Marathon 會自動從Mesos Slave 叢集裡找一臺空閒的VM來分配給張三, 並更新Nginx

Zhangsan

zhangsan -ci-40560

phx-40570.abc.com

Lisi

lisi-ci-40360

phx-40360.abc.com

    整個過程對於張三來說是透明的。

結語

    在eBay, DevEx team已經將Jenkins CI 部署在Mesos + Marathon上。

    Mesos和Docker的搭配可以為我們提供更好的隔離性。

    未來我們會架設更多的Framework共存在Mesos上,來達到計算資源最大限度的利用。比如Hadoop。

相關推薦

基於Apache Mesos 構建可靠可用Jenkins CI

Author: Mao, James     Mesos 計算框架是一個開源的叢集管理平臺,他提供了高效的,高可靠的,跨應用/框架的資源隔離和共享,在其之上可以執行Hadoop,Spark,JBoss,Ruby On Rails等應用框架,支援多種資源的計劃分配。其中主

[Essay] Apache Flink:十分可靠一分不差

pac 資源 模型設計 end AD 抽象 pan 市場 mage Apache Flink:十分可靠,一分不差 Apache Flink 的提出背景 我們先從較高的抽象層次上總結當前數據處理方面主要遇到的數據集類型(types of datasets)以及在處理數據時可供

Redis(併發可用(叢集)資料)快取資料的流程

為什麼要用redis:現在我們資料每次都是從資料庫讀取,這樣當網站訪問量達到高峰時段,對資料庫壓力很大,並且影響執 行效率。我們需要將這部分廣告資料快取起來。 1.查詢的時候走快取,增刪改的時候同步更新快取 2.查詢的時候:先查redis,根據key去查 1>.如果redis有,直接返

利用多執行緒解決Tkinter在button事件中執行io耗時操作視窗無響應問題

    昨天利用python自己寫了一個微型伺服器,突發奇想用Tkinter寫一個GUI介面,並將監聽開始的函式繫結到其中的一個button上,但是當我點選開始服務button時,視窗立馬陷入無響應狀態。搜尋一番發現,是伺服器函式中的while迴圈阻塞了GUI的響應,同理而言

企業網站並發網站的最佳服務器選擇--新鄉BGP物理機

租用 情況 之間 避免 高並發 服務器 運營 並發 延時 BGP機房就是服務器租用商通過技術的手段,實現不同運營商能共同訪問一個IP,並且不同運營商之間都能達到最快的接入速度的相關網絡技術。BGP機房在一定程度上解決了各用戶南北互通的問題,提高了用戶的訪問速度,用BGP協議

Uber基於Apache Hudi構建PB級資料湖實踐

## 1. 引言 從確保準確預計到達時間到預測最佳交通路線,在Uber平臺上提供安全、無縫的運輸和交付體驗需要可靠、高效能的大規模資料儲存和分析。2016年,Uber開發了增量處理框架Apache Hudi,以低延遲和高效率為關鍵業務資料管道賦能。一年後,我們開源了該解決方案,以使得其他有需要的組織也可以利

打不死的美國防100G單機防禦防禦真實可靠和攻擊說Bye-bye

美國高硬防服務器 美國抗DDOS服務器 速度快的美國高防服務器 美國服務器相比國內服務器有非常多的優勢,這些優勢包括:免備案,帶寬資源更充足,網速更穩定,出現故障的頻率更低等等。現在我們就逐一的看一下美國高防服務器的這些優勢。 1. 免除備案 眾所周知,美國高防服務器是不需要備案的,而國內的服

如何基於 k8s 開發可靠服務?容器雲牛人有話說

容器雲?? k8s 是當前主流的容器編排服務,它主要解決「集群環境」下「容器化應用」的「管理問題」,主要包括如下幾方面:?? 容器集群管理 編排? 調度? 訪問? ? 基礎設施管理 計算資源? 網絡資源? 存儲資源?? k8s 的強大依賴於它良好的設計理念和抽象,吸引了越來越多的開發者投入到 k8

基於opencv下對視頻的灰度變換斯濾波canny邊緣檢測處理同窗體顯示並保存

rmi 其他 AS info ali 利用 測試結果 14. 中間 如題:使用opencv打開攝像頭或視頻文件,實時顯示原始視頻,將視頻每一幀依次做灰度轉換、高斯濾波、canny邊緣檢測處理(原始視頻和這3個中間步驟處理結果分別在一個窗口顯示),最後將邊緣檢測結果保存為一個

基於nginx+swoole+phalcon+atlas實現的性能負載均衡集群系列之【構建篇】

p12 adb 列表 服務器性能 nodeps devel unit tcl aio 一、簡介   php一直詬病於性能,可對開發者如此友好的語言為什麽不能登上大雅之堂? 於是php一線開發者站了出來。 先有鳥哥優化php引擎,又有rango大神開源swoole。至此,基

基於vue2+nuxt構建仿餓了麽(2018版)

case 開發 targe 謝謝 註意 utf-8 def 快速 sets 前言 高仿餓了麽,以nuxt作為vue的服務端渲染,適合剛接觸或者準備上vue ssr的同學參考和學習 項目地址如遇網絡不佳,請移步國內鏡像加速節點 效果演示 查看demo請戳這裏(請用chrome

基於vue2+nuxt構建仿餓了麼(2018版)

前言 高仿餓了麼,以nuxt作為vue的服務端渲染,適合剛接觸或者準備上vue ssr的同學參考和學習 專案地址如遇網路不佳,請移步國內映象加速節點 效果演示 檢視demo請戳這裡(請用chrome手機模式預覽) 移動端掃描下方二維碼 API介面文件 介面文件地址(基於apidoc) 技術棧 vue2 +

基於QoE的實時視訊編碼優化:低功耗低延時質量

在實時通訊領域,只有當Codec的優化適應了當前的網路狀況,裝置平臺及應用場景,使用者才能得到最佳的體驗。在LiveVideoStackCon2018大會中聲網Agora視訊工程師吳曉然詳細介紹瞭如何設計與實現基於QoE的實時視訊編碼優化。本文由LiveVideoSt

柔性電子:靈敏電阻基於定向獨立的碳納米管陣列的柔性壓力感測器

摘要: 對於這些同素異形體的傳統轉移過程的複雜性,其成功與否要依賴於基底的表面條件,限制了用於壓力感測器的可行性。因此,我們提出了一種利用高定向和獨立的疏水碳納米管薄片(CNT sheets)製作柔性壓力感測器的方法。這些薄片從單壁碳納米管森林中獲取,只需要經過一次轉移過程,不需要額外

低價可靠的短視訊去水印解析API搞客戶端開發的童鞋們拿去不謝!

本文適合這些人閱讀:iOS開發者、Android開發者、小程式開發人員、H5開發人員等客戶端開發人員。 今天要給客戶端開發者們介紹的一個介面是iiiLab提供的視訊去水印解析介面,介面特點: 1. 通用介面支援解析抖音、快手、火山、今日頭條、西瓜視訊、微博、秒拍、小咖秀、晃咖、微視、美拍

構建可靠、高效能的web應用

目標:構建高可靠、高效能的web應用,這是接下來學習的一些重點。 一、可靠性:可擴充套件性、服務降級、負載均衡 垂直擴充套件(scala up):提高機器硬體配置,如加記憶體等 水平擴充套件:加機器,服務須無狀態,可分散式 資料庫擴充套件sharding: –垂直拆分

併發降溫美團高效能、可靠四層負載均衡MGW優化實踐

負載均衡的作用及分類 網際網路初期階段,業務邏輯簡單、流量不大,單臺伺服器就可滿足日常需求。隨著網際網路的發展,業務不僅會流量爆發、邏輯越來越複雜且對可靠性的需求也逐步遞增。 這時,就需要多臺伺服器來應對單臺伺服器在效能、單點等方面凸顯出來的問題,進行效能的水平擴充套件和災備。但客戶端的流量要如何順利訪問到

基於opencv的數碼管識別準確度較

環境:opencv3.0+vs2013 主要思路: 圖片常規處理方法,灰度,二值化,膨脹,腐蝕等操作,然利用opencv的輪廓提取函式,提取輪廓進行圖片分割。 分割大量的圖片後,利用opencv自帶knn機器學習庫訓練資料,最後根據訓練樣本獲取最後結果。 裡面的引數需要根據

基於MATLAB的filter的使用低通、帶通和通濾波器設計

1、目的 學習MATLAB的filter函式的使用,通過設計低通、帶通和高通濾波器對其進行模擬 2、用到的主要函式和工具 MATLAB、FDATOOL、filter、fft 3、設計 訊號的產生 %% Parameter Interface Frequence0