Upgrade to Pro — share decks privately, control downloads, hide ads and more …

DMM動画の可用性を支えるConsul

tinoji
December 17, 2018

 DMM動画の可用性を支えるConsul

第4回 HashiCorp User Group Meetupの登壇資料
https://hashicorp.connpass.com/event/110653/

tinoji

December 17, 2018
Tweet

More Decks by tinoji

Other Decks in Programming

Transcript

  1. 動画配信事業部 配信基盤スクラムチーム 菊地 弘晃 ͖ͪ͘ͻΖ͖͋ C V 菊地 弘晃 T

    E A M @_tinoji ピチピチの新卒2年目(アラサー)。X線の研究をして ましたが、飽きたのでエンジニアになりました。 仕事ではGoとLuaを書くことが多いです。二郎系と 温泉とラジオとHashiCorpが好き。 ࣗ ݾ ঺ հ Who am I
  2. % . . ಈ ը ͷ α ʔ Ϗ ε

    Our Services http://www.dmm.com/digital/
  3. ࢮ ׆ ؂ ࢹ Health Check Route53にもヘルスチェック機能はあるが、HTTP, HTTPS, TCPに限られる =>

    可用性を高めるために、もっと細かい監視・制御がしたい・・・ 特定のミドルウェアの死活監視、DBとの疎通チェック etc… 死活監視は別のなにかで行い、フェイル/リカバーをフックしてRoute53のAPIを叩けたらいいなぁ
  4. $ P O T V M Ͱ % / 4

    ੾ Γ ସ ͑ Update DNS by Consul ɾservice.json ɾwatch.json ɾ(PͰॻ͍ͨ$-*πʔϧ TUBQJʹ%#ͱͷૄ௨౳ΛؚΊͨεςʔλενΣοΫ༻"1*Λ࡞੒ɻ ͜ΕΛୟ͍ͯϔϧενΣοΫɻ ˢͷαʔϏε౳Λ؂ࢹ͠ɺมԽ͕͋ͬͨ৔߹ˣͷπʔϧΛ࣮ߦɻ 3PVUFͷ"1*Λୟ͍ͯ%/4Λߋ৽͢Δɻ ҟৗͷ͋Δϊʔυ͸αʔϏεΞ΢τ͞ΕΔɻ ϊʔυ௥Ճ࣌ʹ͸$POTVM,74Ͱ%/4ొ࿥ର৅֎ϦετΛ࡞੒ɻ ಈ࡞ݕূ׬ྃ·ͰύϒϦοΫ%/4ొ࿥ΛߦΘͳ͍Α͏ʹ͍ͯ͠Δɻ "services": [ { "name": “st-api", "checks": [ { "id": "hoge", "name": “foo", “http": “εςʔλενΣοΫAPI”
  5. 3 F E J T ͷ ϑ Σ Π ϧ

    Φ ʔ ό ʔ Failover of Redis st-api master.service.consul slave.service.consul slave.service.consul 接続 Consul DNSを使用 Redis Sentinel
  6. 3 F E J T ͷ ϑ Σ Π ϧ

    Φ ʔ ό ʔ Failover of Redis st-api master.service.consul slave.service.consul slave.service.consul 接続 Consul DNSを使用 Sentinelによって新しいmasterが選出 Redis Sentinel
  7. st-api slave.service.consul slave.service.consul 3 F E J T ͷ ϑ

    Σ Π ϧ Φ ʔ ό ʔ Failover of Redis 死んだRedisに繋いだまま Redis Sentinel master.service.consul
  8. 3 F E J T ͷ ϑ Σ Π ϧ

    Φ ʔ ό ʔ Failover of Redis 一般的な解決法 (http://tech.gmo-media.jp/post/48748908427/introduce-redis-sentinel) ・LBでどうにかする ・VIPでどうにかする ・DNSでどうにかする ・hostsでどうにかする ・iptablesでどうにかする ・(クライアント側でどうにかする) チームの要求 ConsulのServiceに、masterかslaveかを含めてRegisterしておいた方がUIから見たときに 分かりやすそう。なのでフェイルオーバー時にはServiceの更新も行っておきたい。
  9. 3 F E J T ͷ ϑ Σ Π ϧ

    Φ ʔ ό ʔ Failover of Redis 一般的な解決法 (http://tech.gmo-media.jp/post/48748908427/introduce-redis-sentinel) ・LBでどうにかする ・VIPでどうにかする ・DNSでどうにかする ・hostsでどうにかする ・iptablesでどうにかする ・(クライアント側でどうにかする) チームの要求 ConsulのServiceに、masterかslaveかを含めてRegisterしておいた方がUIから見たときに 分かりやすそう。なのでフェイルオーバー時にはServiceの更新も行っておきたい。 ← Consul DNSでいけそう
  10. st-api slave.service.consul notification script(※)を利用して Consul DNSを変更 3 F E J

    T ͷ ϑ Σ Π ϧ Φ ʔ ό ʔ Failover of Redis ※reconfiguration scriptの方がいいかも Redis Sentinel master.service.consul
  11. st-api slave.service.consul slave.service.consul slave master notification scriptを利用して Consul DNSを変更 3

    F E J T ͷ ϑ Σ Π ϧ Φ ʔ ό ʔ Failover of Redis Redis Sentinel master.service.consul
  12. st-api slave.service.consul slave.service.consul master notification scriptを利用して Consul DNSを変更 3 F

    E J T ͷ ϑ Σ Π ϧ Φ ʔ ό ʔ Failover of Redis => 30行弱のPythonスクリプトで実現できてしまった 他の方法と比較してもかなりシンプルかも? Redis Sentinel slave master.service.consul