Save 37% off PRO during our Black Friday Sale! »

Mesosを使ったImmutable Infra 管理システムを作ってみた

B642bff07fa32e9574c6647d6a83b35f?s=47 tatsuru
March 25, 2014

Mesosを使ったImmutable Infra 管理システムを作ってみた

Immutable Infrastracture Conference #1 で発表した資料です
http://atnd.org/events/47786

B642bff07fa32e9574c6647d6a83b35f?s=128

tatsuru

March 25, 2014
Tweet

Transcript

  1. Mesos Mesosを使った を使ったImmutable Infra Immutable Infra 管理システムを作ってみた 管理システムを作ってみた Tatsuru WATANABE

    2014/03/25 Immutable Infrastracture Conference
  2. 自己紹介 • Tatsuru WATANABE • id:wtatsuru @tatsuru • サーバ運用@はてな •

    最近 AWS 6割くらい
  3. Outline • Immutable Infrastracture • 作ってみた • 中身のこと – Cluster

    Management – Log Aggregation – Metrics/Monitoring
  4. Immutable Infrastracture

  5. 実際、今どこまでできるんだろう

  6. • Git push • Docker Build • Test • Deploy-ready

    • Deploy 作ってみた
  7. 詳しくはブログで サービス開発合宿を開催しました http://developer.hatenastaff.com/entry/2013/12/24/182329

  8. 中身 • Docker • Mesos • Jenkins • Fluentd •

    Graphite • Sensu • Dashboard
  9. 中身 • Docker • Mesos • Jenkins • Fluentd •

    Graphite • Sensu • Dashboard VM VM Cluster Cluster Test Test Log Log Visualize Visualize Monitoring Monitoring Orchestration Orchestration
  10. 中身 • Docker • Mesos • Jenkins • Fluentd •

    Graphite • Sensu • Dashboard VM VM Cluster Cluster Test Test Log Log Visualize Visualize Monitoring Monitoring Orchestration Orchestration
  11. 詳細略 • 仮想化 – Docker – AWS – KVM •

    Test & Deploy – Jenkins – 差分ビルド – serverspec
  12. Cluster Management Server app1 tcp/8000

  13. Cluster Management Server app1 tcp/8000 Server app2 tcp/8001 app2 tcp/8001

  14. Server Cluster Management Server Server Server Server Server Server Server

    Server
  15. Cluster Management • 自前 – 1 Active VM/Host – Serf

    • 全部入り – OpenStack – Coud Foundry • リソース管理システム – Apache Mesos – Omega (Google)
  16. Cluster Management • Apache Mesos – Master/Slave – Framework –

    Executor • リソースの提供だけ Hindman, Benjamin, et al. "Mesos: A platform for fine-grained resource sharing in the data center." Proceedings of the 8th USENIX conference on Networked systems design and implementation. 2011. http://mesos.apache.org/documentation/latest/mesos-architecture/
  17. Cluster Management • Apache Mesos – Master/Slave – Framework: Marathon

    – Executor: Mesos-Docker Marathon POST /v1/apps/start { “executor”: “/opt/mesos-docker”, “instances”: 2, “cpus”: 1, “mem”: 128,... } Server1: 4CPU 4GB Server2: 2CPU 8GB Server3: 8CPU 7GB Task1: Server1 1CPU 128MB Server2 1CPU 128MB 1 2 3
  18. Cluster Management • 最近の Mesos/Marathon – API v2: Docker 対応

    – Deimos: Docker の仕組みを組み込む • 実際どうなの – 仕組みは悪くはない。中身見える
  19. Log Aggregation • Log Aggregation – Fluentd – rsyslog, Flume,

    Kafka, • コンテナ内で Fluentd – Supervisor 経由 docker-+-lxc-start---supervisord-+-fluentd | |-ruby (sensu_server) |-run---/opt/App/start_server `-sshd Server Container Application Fluentd sshd Sensu
  20. Log Aggregation Docker Log Management Using Fluentd http://jasonwilder.com/blog/2014/03/17/docker-log-management-using-fluentd/

  21. Log Aggregation • Collection Inside Container • Collection Outside Container

    • Collection In Separate Container Server Container Fluentd Container Fluentd Server Container Container Log Volume Fluentd App App App App Server Container Container App App Container Log Volume Fluentd Inside Outside In Separate
  22. Metrics • サーバメトリクス – サーバが頻繁に入れ替わる:サーバ単位ではダメ • サービスメトリクス • いい感じに集めたい –

    アプリケーションごと – デプロイごと
  23. Metrics • サーバメトリクス – ホストから: cgroup, netstat – 他はヘルプにあります http://docs.docker.io/en/latest/articles/runmetrics/

    • いい感じに集めたい – Sensu/Fluentd で送る – Graphite: glob + 名前空間 $ cat /sys/fs/cgroup/lxc/718e*/cpuacct.stat user 28707710 system 6369370 docker.$host.$app-$rev.$seq.memory -> docker.*.$app-*.memory -> docker.*.$app-$rev.*.memory
  24. Metrics • ログベース解析 – Latency, Error Ratio • 従来通り –

    フローで解析: Fluentd (fluent-plugin-datacounter etc.) – バッチ解析: MongoDBに貯める – Kibana, 外部サービスに流す, etc.
  25. Metrics • サーバメトリクス:ホスト単位だと運用が難しい – Munin, Zabbix • Agent型もあり – 台数課金なサービスはつらい:

    NewRelic • Aggregation が課題
  26. Monitoring • 監視 • エージェント型 – Sensu – Zabbix –

    NewRelic • 外部監視:いけそう – Nagios: Docker API から公開されているポートを取得して監視 https://github.com/tatsuru/nagios-plugin/blob/master/check_docker_container_exported_port.pl
  27. Visualization/Monitoring • エージェント型 • ログと同じパターンで運用できそう Server Container Sensu Container Sensu

    Server Container Container App App App App Server Container Container App App Container Sensu Sensu
  28. Helper Containers? • Ambassador Container よりもう少し高機能 – http://docs.docker.io/en/latest/use/ambassador_pattern_linking/ • 監視、ログ収集

    etc. Server Container Application Container Application Container Application Container Sensu Container Fluentd
  29. Orchestration • ダッシュボード • マスターデータ – サービスとリポジトリの対応 – リソース状況 –

    デプロイ状態
  30. Orchestration • アプリのリポジトリ • クラスタにもたせる – Serf • 中央で管理する何か –

    AWS Elatic Beanstalk – NewRelicでがんばる – 自作
  31. まとめ • Immutable 環境作ってみた • 課題いろいろ – Cluster Management –

    Log Aggregation – Metrics/monitoring • どんどん作っていきましょう – 教えてください
  32. 以上です はてなでは、こういうのを一緒に作ってくれる人を募集してます