10分でわかる marathon-lb

21
1 Mesos + Marathon Shuji Yamada @uzyexe Jan 22, 2016 「10分でわかる marathon-lb」 https://www.flickr.com/photos/archetypefotografie/3629857292/

Upload: shuji-yamada

Post on 24-Jan-2018

1.573 views

Category:

Technology


0 download

TRANSCRIPT

Page 1: 10分でわかる marathon-lb

1

Mesos + Marathon

ShujiYamada@uzyexeJan22,2016

「10分でわかる marathon-lb」

https://www.flickr.com/photos/archetypefotografie/3629857292/

Page 2: 10分でわかる marathon-lb

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://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://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://www.flickr.com/photos/kk/23390123/

Reverse Proxy vs. Load Balancer

• リバースプロキシのことをロードバランサーと呼ぶこともある。

• リバースプロキシには下記のような機能が備わっている。

• Web アクセラレーション

• SSL termination

• セキュリティ

5

Page 6: 10分でわかる marathon-lb

https://www.flickr.com/photos/xmodulo/23925971320/

Reverse Proxy の一般的なメリット

• 柔軟性と拡張性 - バックエンドサーバの並列展開が容易

• セキュリティ - ACL設定の集中管理が容易

• compression - 圧縮による応答高速化

• SSL termination - SSL暗号化/復号化の終端(バックエンドの負荷軽減)

• Caching - キャッシュによる応答高速化

6

Page 7: 10分でわかる marathon-lb

https://www.flickr.com/photos/davegray/5429335705/

Marathon とのインターフェイス間通信

7

• Polling - 一定間隔毎にポーリング

• EventBus - Publish/Subscribe によるリアルタイムイベント購読

• Server Sent Events (SSE) : EventStream によるリアルタイムイベント通知

Page 8: 10分でわかる marathon-lb

8

design

Page 9: 10分でわかる marathon-lb

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://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

ここでデモ

11

Page 12: 10分でわかる marathon-lb

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://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://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://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://www.flickr.com/photos/staffanscherz/6161284551/

困ったこと

• 負荷が高まると EventBus でも SSE でもイベント通知が遅延する。

• 概ね2~4分。ダメになると延々と通知が来ない・・・

• Polling が一番安定的・・・

16

Page 17: 10分でわかる marathon-lb

https://www.flickr.com/photos/playingwithpsp/2280744328/

困ったこと

• 思ったほどスケールできない・・・

• イベント通知部分の安定性が・・・

• Polling で 2000 アプリ分くらいまでしか収容できない。

17

Page 18: 10分でわかる marathon-lb

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://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://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://www.flickr.com/photos/mdpettitt/8671901426/

Any Questions?

21