當前位置:
首頁 > 知識 > 微服務彈性計算平台DCOS的服務入口—Marathon-LB

微服務彈性計算平台DCOS的服務入口—Marathon-LB

DC/OS作為一個承載上層應用服務的自治的彈性計算集群,需要開放入口供客戶端進行訪問。這種職責在傳統架構中通常由Nginx承擔,在DC/OS中是通過Marathon-LB負責的。

微服務彈性計算平台DCOS的服務入口—Marathon-LB

Marathon-LB(MLB)是一個根據Marathon應用服務的狀態自動調整和配置HAProxy的工具。HAProxy是一個為TCP、HTTP應用提供快速,高效,高可用性的負載均衡器,它還具有很多其他高級特性如支持SSL,HTTP壓縮,健康檢查,Lua腳本等。因此,Marathon-LB既可以用作服務代理,也可以用作負載均衡和服務發現工具。

Marathon-LB是一個容器應用,它訂閱了Marathon的事件匯流排,自動獲取各個APP的信息,為每一組APP生成HAProxy配置,能夠根據變更實時調整更新HAProxy的配置信息。


主要特性

  • 無狀態設計:除了通過Marathon獲取應用狀態信息,沒有直接依賴任何第三方狀態存儲像ZooKeeper或etcd。

  • 冪等和確定性:可水平伸縮

  • 高度可擴展:可以為單個實例提供埠限速,為多個實例提供容錯和更高的吞吐量

  • 通過Marathon的事件匯流排實現實時LB更新

  • 支持Marathon的健康檢查

  • 多證書TLS / SSL支持

  • 零停機部署

  • 支持為每個服務提供HAProxy模板

  • 與DC/OS集成

  • 可在啟動時提供全局HAProxy模板

  • 支持與每容器固定IP方案進行集成,如通過Calico項目

應用場景

微服務彈性計算平台DCOS的服務入口—Marathon-LB

如上圖所示,Marathon-LB的應用場景非常靈活,例如:

  • Marathon-LB可用在邊際節點上提供負載均衡和服務發現。在DCOS中可以部署於Public節點,為入口流量做路由負載。這種情況下可以將Public節點的IP通過A記錄與內部或外部DNS記錄綁定。

  • Marathon-LB可用於內部負載均衡和服務發現,外部流量的入口路由負載可以使用硬體設備如F5,或者是雲負載如AWS的Elastic Load Balancer(ELB)。

  • Marathon-LB只用於內部負載均衡和服務發現。

  • 可以將內部LB和外部LB同時使用Marathon-LB,不同的服務根據需求開放給不同的Marathon-LB。

應用示例

注意:默認配置下,Marathon-LB部署在Public節點上。如果需要用作內部負載均衡,可參考如下配置:

微服務彈性計算平台DCOS的服務入口—Marathon-LB

Marathon-LB在部署時,默認佔用80,443,9090,9091,10000-10100埠(80、443埠已被Marathon-LB中的 HAProxy獨佔)。

要使用Marathonn-LB,服務定義中必須設置HAPROXY_GROUP標籤。

Marathon-LB運行時綁定在服務定義的服務埠servicePort(如果APP不定義servicePort,Marathon會隨機分配埠號)上,然後,外部或內部服務請求可以通過Marathon-LB所在節點的相關服務埠訪問具體的服務。

例如:Marathon-LB部署在node1上,服務S1部署在node2上並且綁定的servicePort是10001,服務S2部署在node3上,那麼S2可以通過node1上的100001埠訪問部署在node2上的S1。

微服務彈性計算平台DCOS的服務入口—Marathon-LB

S1

通過增加instances的值,可以增加S1的部署實例,這些實例通過Marathon-LB進行負載調度。


虛擬主機

Marathon-LB的另一個重要特性是支持虛擬主機。這一特性可以將HTTP請求準確路由到多個主機節點(FQDNs)中的一個。

例如:網路拓撲中存在ilovesteak.com和steaknow.com兩個域名,這兩個DNS域名都指向同一個Marathon-LB的同一個埠,Marathon-LB會根據請求域名的不同,將HTTP請求提交給所負載的具體的服務節點。

微服務彈性計算平台DCOS的服務入口—Marathon-LB

S1

微服務彈性計算平台DCOS的服務入口—Marathon-LB

S2

通過添加HAPROXY_{n}_VHOST(WEB虛擬主機)標籤,Marathon-LB會自動把服務以虛擬主機的形式公布出來。訪問域名steaknow.com時,會直接訪問該域名綁定的Marathon-LB的IP和埠,並通過Marathon-LB自動跳轉到S2服務。標籤中的「0」對應著servicePort的索引,如果有多個servicePort定義,可以相應的配置為0,1,2等等。


基本概念

Marathon-LB通過腳本marathon_lb.py連接到Marathon的API檢索所有正在運行的應用程序,然後生成HAProxy配置並重新載入HAProxy。默認情況下,Marathon-LB綁定到每個應用程序的服務埠,並將傳入請求發送給對應的應用程序實例。

應用程序通過在其Marathon程序定義中聲明的服務埠(servicePort)來提供服務。此外,應用程序僅在具有與Marathon應用程序的標籤(使用HAPROXY_GROUP)中定義的標記(或組)相同的LB上暴露服務。可以為特定標籤標記的應用針對性的調整HAProxy參數。

要創建一個或多個虛擬主機,需要在應用程序的Marathon程序定義中設置HAPROXY_{n}_VHOST標籤。配置了虛擬主機的應用除了在服務埠(servicePort)提供服務外,也通過80和443埠公開服務。可以在HAPROXY_{n}_VHOST中使用逗號作為主機域名之間的分隔符來指定多個虛擬主機。

所有應用程序也使用HTTP頭X-Marathon-App-Id在埠9091上公開。參考HAProxy配置參考中的HAPROXY_HTTP_FRONTEND_APPID_HEAD配置。

可以通過下述地址獲取HAProxy的統計信息。


http://:9090/haproxy?stats

可以通過下述地址獲取當前HAProxy的配置。


http://:9090/_haproxy_getconfig

部署與運行

在選擇Marathon-LB的部署方式前,首先了解一下Marathon-LB如何運行。Marathon-LB的入口程序是marathon-lb.py。可以選擇直接調用或通過打包好的Docker鏡像(**mesosphere/marathon-lb**)來啟動。通過Marathon-LB容器的Dockerfile定義可以看到,容器啟動是通過在run腳本中調用marathon-lb.py並傳遞一組參數:

微服務彈性計算平台DCOS的服務入口—Marathon-LB

在DC/OS中,可以通過WEB UI從Universe倉庫中直接部署Marathon-LB。

微服務彈性計算平台DCOS的服務入口—Marathon-LB


運行模式

Marathon-LB支持3種運行模式:sse,event和poll。

SSE模式

在SSE模式下,marathon-lb.py腳本連接到Marathon事件API以獲得有關應用狀態更改的通知。這隻適用於Marathon 0.11.0或更高版本。

EVENT模式

注意:EVENT模式已棄用,並且將在以後的版本中從marathon-lb中刪除。

在事件模式下,marathon-lb.py腳本在Marathon中註冊HTTP回調,以便在應用狀態更改時獲得通知。

POLL模式

在POLL模式下,marathon-lb.py腳本可以輪詢API以定期獲取調度程序狀態。可以設置POLL_INTERVAL環境變數,更改輪詢間隔(默認為60秒)。


最佳實踐

  • 盡量使用保留範圍內的服務埠(默認值為10000到10100),可以避免埠衝突,確保重新載入後不會導致連接錯誤。

  • 避免使用HAPROXY_ {n} _PORT標籤;盡量定義服務埠。

  • 考慮運行多個MLB實例。在實踐中,應該使用3個或更多個來為生產工作負載提供高可用性。不推薦運行1實例,另外,除非有重大的負載運行,否則也沒必要超過5個實例。運行的MLB實例的數量將根據工作負載和所需的故障容差量而變化。注意:不要在群集中的每個節點上運行MLB。

  • 考慮在MLB前面使用專用的負載平衡器以便於升級/更改。常見的選擇包括用於本地安裝的ELB(在AWS上)或F5等硬體負載平衡器。

  • 使用單獨的MLB分組(使用--group指定)區分內部和外部負載平衡。在DC/OS上,默認分組是external。用於內部負載均衡的配置示例參考上文。

  • 對於HTTP服務,請考慮設置VHost(或可選的路徑)以訪問埠80和443上的服務。或者,可以使用HTTP頭X-Marathon-App-Id在埠9091上訪問服務。例如,訪問ID為tweeter的應用:

微服務彈性計算平台DCOS的服務入口—Marathon-LB

  • Marathon-LB的一些特性假定它是在自己的PID命名空間中運行的唯一實例。例如,MLB假定它在容器中運行。如果多個MLB實例在同一個PID命名空間中,或者在其他HAProxy進程的相同的PID命名空間中運行,某些功能(如/_mlb_signal介面和/_haproxy_getpids介面)(以及擴展和零停機部署)可能會產生不可預期的行為。

  • 可以考慮為環境變數HAPROXY_RELOAD_SIGTERM_DELAY設置為一個值,例如5m。這個值會直接傳遞給每次HAProxy重新載入之後執行的sleep命令,待達到延遲時間設定後再向舊的HAProxy的PID發送SIGTERM(參見service/haproxy/run)。特別是對於需要TCP長連接的情況,更希望在所有連接完成之後再終止HAProxy。如果過於頻繁地重新載入HAProxy,因PID會在指定的延遲內被重複使用,則可能導致SIGTERM發送給錯誤的PID。

總結

在實際運維部署過程中,MLB部署在Public節點時,其他在同一節點部署的容器服務不應使用HOST網路模式,這可能會導致MLB無法更新負載埠的狀態。

限於篇幅,Marathon-LB的管理埠,SSL證書,所負載服務的參數及配置,零停機部署,在藍綠部署過程中切分流量等高級特性請參考MLB的官方文檔。

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 領域修鍊之路 的精彩文章:

在DC/OS中搭建本地UNIVERSE倉庫
DCOS中的容器網路負載均衡與服務埠配置策略
現代系統Secret機密信息管理方案與現狀(2017)
Hashicorp Vault:安全性與複雜性的平衡

TAG:領域修鍊之路 |

您可能感興趣

在SAP雲平台的CloudFoundry環境下消費ABAP On-Premise OData服務
Mac OSX 平台安裝 MongoDB
Arm發布Artisan物理IP,將加速基於台積電22nm ULP/ULL平台的主流移動和物聯網設備SoC設計
Nike VaporMax Moc 2 登陸 NIKEiD 定製平台
Nesto—Hulu用戶分析平台的OLAP引擎
Nolo推出6DoF VR平台,支持DayDream和GearVR
索尼流媒體服務平台Crackle啟用新LOGO
聯想IdeaPad 530S曝光 採用AMD Ryzen/Vega GPU平台
鎖定汽修服務,Atheer為HoloLens客戶帶來AR協作平台
Coinbase將關停GDAX並啟用新的Coinbase Pro平台
聯想IdeaPad 530S曝光 AMD Ryzen/Vega GPU平台
WeWork收購SEO和營銷智能平台Conductor
Digi-Capital推出AR/VR分析平台
軟體定義廣域網平台 NSX SD-WAN by VeloCloud
Digi-Capital推出AR/VR專用數據分析平台
叫板谷歌 Concept3D推出VR旅行平台Tour Builder
NOLO推出全新6DoF VR平台,支持谷歌Daydream和三星Gear VR
PlayStation Video將在5月徹底終止PS3平台服務
微軟發布WMR協作平台SharePoint spaces
微軟發布 WMR 協作平台 SharePoint spaces