10分でわかる marathon-lb
TRANSCRIPT
![Page 1: 10分でわかる marathon-lb](https://reader033.vdocuments.mx/reader033/viewer/2022061307/586ff8b11a28ab92198b76fb/html5/thumbnails/1.jpg)
1
Mesos + Marathon
ShujiYamada@uzyexeJan22,2016
「10分でわかる marathon-lb」
https://www.flickr.com/photos/archetypefotografie/3629857292/
![Page 2: 10分でわかる marathon-lb](https://reader033.vdocuments.mx/reader033/viewer/2022061307/586ff8b11a28ab92198b76fb/html5/thumbnails/2.jpg)
https://www.flickr.com/photos/xmodulo/24195478656/
What is marathon-lb?
• HAProxy ベースで Marathon 連携可能な ロードバランサーツール。
• Marathon apps の定義を元に、HAProxy 設定を動的に変更管理する。
• HAProxy は、SSL サポート、HTTP 圧縮、ヘルスチェック、プロキシなど豊富な機能を備えているTCP or HTTPベースのロードバランサー。
2
![Page 3: 10分でわかる marathon-lb](https://reader033.vdocuments.mx/reader033/viewer/2022061307/586ff8b11a28ab92198b76fb/html5/thumbnails/3.jpg)
https://www.flickr.com/photos/wakalani/90366591/
marathon-lbの特徴的機能
3
• Stateless design: no direct dependency on any third-party state store
• Real-time LB updates, via Marathon's Event Bus
• Support for Marathon's Health Checks
• Multi-cert SSL Support
• Per-service HAProxy Templates
• Automated Docker Image Builds (mesosphere/marathon-lb)
• Global HAProxy Templates which can be supplied at launch
![Page 4: 10分でわかる marathon-lb](https://reader033.vdocuments.mx/reader033/viewer/2022061307/586ff8b11a28ab92198b76fb/html5/thumbnails/4.jpg)
https://www.flickr.com/photos/livenature/13918665173/
HAProxy Description
• version 1.7 : 開発版。
• version 1.6 : 最新安定版。state keeping, Dynamic name resolution, Lua
• version 1.5 : SSL, IPv6, keep-alive, DDoS protection, etc...
• version 1.4 : SSLを利用しない人向け。
• version 1.3 : 諸事情によりアップデートできない人向け。
4
![Page 5: 10分でわかる marathon-lb](https://reader033.vdocuments.mx/reader033/viewer/2022061307/586ff8b11a28ab92198b76fb/html5/thumbnails/5.jpg)
https://www.flickr.com/photos/kk/23390123/
Reverse Proxy vs. Load Balancer
• リバースプロキシのことをロードバランサーと呼ぶこともある。
• リバースプロキシには下記のような機能が備わっている。
• Web アクセラレーション
• SSL termination
• セキュリティ
5
![Page 6: 10分でわかる marathon-lb](https://reader033.vdocuments.mx/reader033/viewer/2022061307/586ff8b11a28ab92198b76fb/html5/thumbnails/6.jpg)
https://www.flickr.com/photos/xmodulo/23925971320/
Reverse Proxy の一般的なメリット
• 柔軟性と拡張性 - バックエンドサーバの並列展開が容易
• セキュリティ - ACL設定の集中管理が容易
• compression - 圧縮による応答高速化
• SSL termination - SSL暗号化/復号化の終端(バックエンドの負荷軽減)
• Caching - キャッシュによる応答高速化
6
![Page 7: 10分でわかる marathon-lb](https://reader033.vdocuments.mx/reader033/viewer/2022061307/586ff8b11a28ab92198b76fb/html5/thumbnails/7.jpg)
https://www.flickr.com/photos/davegray/5429335705/
Marathon とのインターフェイス間通信
7
• Polling - 一定間隔毎にポーリング
• EventBus - Publish/Subscribe によるリアルタイムイベント購読
• Server Sent Events (SSE) : EventStream によるリアルタイムイベント通知
![Page 8: 10分でわかる marathon-lb](https://reader033.vdocuments.mx/reader033/viewer/2022061307/586ff8b11a28ab92198b76fb/html5/thumbnails/8.jpg)
8
design
![Page 9: 10分でわかる marathon-lb](https://reader033.vdocuments.mx/reader033/viewer/2022061307/586ff8b11a28ab92198b76fb/html5/thumbnails/9.jpg)
https://www.flickr.com/photos/mcclanahoochie/5517670903/
marathon-lb のシンプルな起動方法 in docker• Polling で Marathon Apps の情報を問い合わせる marathon-lb コンテナ docker run \ --name="marathon-lb" \ --net="host" \ mesosphere/marathon-lb:${MARATHON_LB_VERSION} \ poll \ --marathon http://${MARATHON_HOST}:${MARATHON_PORT} \ --haproxy-config ${HAPROXY_CONFIG} \ --group ${LB_GROUP_NAME}
9
![Page 10: 10分でわかる marathon-lb](https://reader033.vdocuments.mx/reader033/viewer/2022061307/586ff8b11a28ab92198b76fb/html5/thumbnails/10.jpg)
https://www.flickr.com/photos/mrsmagic/5870198525/
HAProxy configuration - App labels
10
• service.mesosphere.com というVHOSTと収容GROUPを指定する場合 { "id": "http-service", "labels": { "HAPROXY_GROUP": "external", "HAPROXY_0_VHOST": "service.mesosphere.com" } }
![Page 11: 10分でわかる marathon-lb](https://reader033.vdocuments.mx/reader033/viewer/2022061307/586ff8b11a28ab92198b76fb/html5/thumbnails/11.jpg)
ここでデモ
11
![Page 12: 10分でわかる marathon-lb](https://reader033.vdocuments.mx/reader033/viewer/2022061307/586ff8b11a28ab92198b76fb/html5/thumbnails/12.jpg)
https://www.flickr.com/photos/littlestuffme/10597619904/
HAProxy configuration - Overridable templatesHAPROXY_{n}_FRONTEND_HEAD
HAPROXY_{n}_BACKEND_REDIRECT_HTTP_TO_HTTPS
HAPROXY_{n}_BACKEND_HEAD
HAPROXY_{n}_HTTP_FRONTEND_ACL
HAPROXY_{n}_HTTPS_FRONTEND_ACL
HAPROXY_{n}_HTTP_FRONTEND_APPID_ACL
12
HAPROXY_{n}_BACKEND_HTTP_OPTIONS
HAPROXY_{n}_BACKEND_TCP_HEALTHCHECK_OPTIONS
HAPROXY_{n}_BACKEND_HTTP_HEALTHCHECK_OPTIONS
HAPROXY_{n}_BACKEND_STICKY_OPTIONS
HAPROXY_{n}_FRONTEND_BACKEND_GLUE
HAPROXY_{n}_BACKEND_SERVER_TCP_HEALTHCHECK_OPTIONS
HAPROXY_{n}_BACKEND_SERVER_HTTP_HEALTHCHECK_OPTIONS
HAPROXY_{n}_BACKEND_SERVER_OPTIONS
![Page 13: 10分でわかる marathon-lb](https://reader033.vdocuments.mx/reader033/viewer/2022061307/586ff8b11a28ab92198b76fb/html5/thumbnails/13.jpg)
https://www.flickr.com/photos/ekilby/5614304885/
評価指標
• CPS (Connection per Seconds)
• Simple json Rest API
• SSL Support
• WebSocket Support
• Zero-DownTime (Hot-reload)
• Event Driven
13
• Helth Check
• Docker image
• Least connections load balancing
• Custom Configuration
• Dynamic name resolution
![Page 14: 10分でわかる marathon-lb](https://reader033.vdocuments.mx/reader033/viewer/2022061307/586ff8b11a28ab92198b76fb/html5/thumbnails/14.jpg)
https://www.flickr.com/photos/nadili/2563472441/
その他の Marathon 連携可能なロードバランサー候補
• hapoxy-consul • Hipache • Bamboo • moxy • Træfɪk • Vamp Router • Vulcand
14
![Page 15: 10分でわかる marathon-lb](https://reader033.vdocuments.mx/reader033/viewer/2022061307/586ff8b11a28ab92198b76fb/html5/thumbnails/15.jpg)
https://www.flickr.com/photos/nadili/2563472441/
その他の Marathon 連携可能なロードバランサー候補
• hapoxy-consul - consul を挟む分だけ煩雑 • Hipache - 2015/02 で開発停止? • Bamboo - marathon-lb より優れているポイントがない • moxy - 枯れてないので除外 • Træfɪk - 枯れてないので除外 • Vamp Router - marathon-lb より優れているポイントがない • Vulcand - etcd 向け
15
![Page 16: 10分でわかる marathon-lb](https://reader033.vdocuments.mx/reader033/viewer/2022061307/586ff8b11a28ab92198b76fb/html5/thumbnails/16.jpg)
https://www.flickr.com/photos/staffanscherz/6161284551/
困ったこと
• 負荷が高まると EventBus でも SSE でもイベント通知が遅延する。
• 概ね2~4分。ダメになると延々と通知が来ない・・・
• Polling が一番安定的・・・
16
![Page 17: 10分でわかる marathon-lb](https://reader033.vdocuments.mx/reader033/viewer/2022061307/586ff8b11a28ab92198b76fb/html5/thumbnails/17.jpg)
https://www.flickr.com/photos/playingwithpsp/2280744328/
困ったこと
• 思ったほどスケールできない・・・
• イベント通知部分の安定性が・・・
• Polling で 2000 アプリ分くらいまでしか収容できない。
17
![Page 18: 10分でわかる marathon-lb](https://reader033.vdocuments.mx/reader033/viewer/2022061307/586ff8b11a28ab92198b76fb/html5/thumbnails/18.jpg)
https://www.flickr.com/photos/stevehopson/403037117/
忘れてるとハマりそうなこと
• HAProxy 1.6 以前のバージョンでは、プロセスの起動時に名前解決して取得したIPアドレスをキャッシュし続ける仕様だった。
• バックエンドサーバをドメイン名で書いた場合でも、ドメイン名の Aレコードの内容が変更されても HAProxy は追跡しない仕様だった。
• HAProxy 1.6 では、resolvers を設定ファイル内で指定している場合、HAProxyを再起動することなくリアルタイムで動的に名前解決が可能。
18
![Page 19: 10分でわかる marathon-lb](https://reader033.vdocuments.mx/reader033/viewer/2022061307/586ff8b11a28ab92198b76fb/html5/thumbnails/19.jpg)
https://www.flickr.com/photos/jazbeck/6213634972/
DNS Base vs. Event Base• DNS ベースのアーキテクチャには下記のような懸念点が存在する。
• SRVクエリを使用しない限り、DNS は サービスポートを識別できない。
• ほとんどのアプリケーションは SRV レコードに対応していない。
• DNS レコードはTTLを持っているとキャッシュされる。
• DNS レコードはエンドポイントに対するステータスを持ちません。
• 一部のアプリケーションやライブラリは複数のAレコードを正しく処理しない。
19
![Page 20: 10分でわかる marathon-lb](https://reader033.vdocuments.mx/reader033/viewer/2022061307/586ff8b11a28ab92198b76fb/html5/thumbnails/20.jpg)
https://www.flickr.com/photos/axelhartmann/16308797077/
よかったこと
• Docker イメージが用意されている。(mesosphere/marathon-lb)
• 中身は HAProxy なので枯れている。軽快で機能も豊富。
• app label での定義はわかりやすくて導入が簡単。
• consul や zookeeper を叩くAPIを書かなくてもいい。
• DCOSでも採用されいて Marathon 標準的な扱いなので心配が少ない。
20
![Page 21: 10分でわかる marathon-lb](https://reader033.vdocuments.mx/reader033/viewer/2022061307/586ff8b11a28ab92198b76fb/html5/thumbnails/21.jpg)
https://www.flickr.com/photos/mdpettitt/8671901426/
Any Questions?
21