Upload
shuji-yamada
View
1.573
Download
0
Embed Size (px)
Citation preview
1
Mesos + Marathon
ShujiYamada@uzyexeJan22,2016
「10分でわかる marathon-lb」
https://www.flickr.com/photos/archetypefotografie/3629857292/
https://www.flickr.com/photos/xmodulo/24195478656/
What is marathon-lb?
• HAProxy ベースで Marathon 連携可能な ロードバランサーツール。
• Marathon apps の定義を元に、HAProxy 設定を動的に変更管理する。
• HAProxy は、SSL サポート、HTTP 圧縮、ヘルスチェック、プロキシなど豊富な機能を備えているTCP or HTTPベースのロードバランサー。
2
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
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
https://www.flickr.com/photos/kk/23390123/
Reverse Proxy vs. Load Balancer
• リバースプロキシのことをロードバランサーと呼ぶこともある。
• リバースプロキシには下記のような機能が備わっている。
• Web アクセラレーション
• SSL termination
• セキュリティ
5
https://www.flickr.com/photos/xmodulo/23925971320/
Reverse Proxy の一般的なメリット
• 柔軟性と拡張性 - バックエンドサーバの並列展開が容易
• セキュリティ - ACL設定の集中管理が容易
• compression - 圧縮による応答高速化
• SSL termination - SSL暗号化/復号化の終端(バックエンドの負荷軽減)
• Caching - キャッシュによる応答高速化
6
https://www.flickr.com/photos/davegray/5429335705/
Marathon とのインターフェイス間通信
7
• Polling - 一定間隔毎にポーリング
• EventBus - Publish/Subscribe によるリアルタイムイベント購読
• Server Sent Events (SSE) : EventStream によるリアルタイムイベント通知
8
design
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
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" } }
ここでデモ
11
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
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
https://www.flickr.com/photos/nadili/2563472441/
その他の Marathon 連携可能なロードバランサー候補
• hapoxy-consul • Hipache • Bamboo • moxy • Træfɪk • Vamp Router • Vulcand
14
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
https://www.flickr.com/photos/staffanscherz/6161284551/
困ったこと
• 負荷が高まると EventBus でも SSE でもイベント通知が遅延する。
• 概ね2~4分。ダメになると延々と通知が来ない・・・
• Polling が一番安定的・・・
16
https://www.flickr.com/photos/playingwithpsp/2280744328/
困ったこと
• 思ったほどスケールできない・・・
• イベント通知部分の安定性が・・・
• Polling で 2000 アプリ分くらいまでしか収容できない。
17
https://www.flickr.com/photos/stevehopson/403037117/
忘れてるとハマりそうなこと
• HAProxy 1.6 以前のバージョンでは、プロセスの起動時に名前解決して取得したIPアドレスをキャッシュし続ける仕様だった。
• バックエンドサーバをドメイン名で書いた場合でも、ドメイン名の Aレコードの内容が変更されても HAProxy は追跡しない仕様だった。
• HAProxy 1.6 では、resolvers を設定ファイル内で指定している場合、HAProxyを再起動することなくリアルタイムで動的に名前解決が可能。
18
https://www.flickr.com/photos/jazbeck/6213634972/
DNS Base vs. Event Base• DNS ベースのアーキテクチャには下記のような懸念点が存在する。
• SRVクエリを使用しない限り、DNS は サービスポートを識別できない。
• ほとんどのアプリケーションは SRV レコードに対応していない。
• DNS レコードはTTLを持っているとキャッシュされる。
• DNS レコードはエンドポイントに対するステータスを持ちません。
• 一部のアプリケーションやライブラリは複数のAレコードを正しく処理しない。
19
https://www.flickr.com/photos/axelhartmann/16308797077/
よかったこと
• Docker イメージが用意されている。(mesosphere/marathon-lb)
• 中身は HAProxy なので枯れている。軽快で機能も豊富。
• app label での定義はわかりやすくて導入が簡単。
• consul や zookeeper を叩くAPIを書かなくてもいい。
• DCOSでも採用されいて Marathon 標準的な扱いなので心配が少ない。
20
https://www.flickr.com/photos/mdpettitt/8671901426/
Any Questions?
21