この記事は Retty Advent Calendar 19日目です。
昨日は@bokenekoのcharacter-level CNNでクリスマスを生き抜くでした。
DNSで一部バランシングを行っていたら、なんと半分が死んでいる!!
あー辛い!ってなったので、DNSのお話から代替案についても書いていこうかと思います。
DNSについて
そもそも、DNSとはどういった仕組みの物かを紹介してから問題点について書きます。
DNSの仕組み
私達がweb検索等で利用するDNSは「分散環境」と「ドメイン・ツリー」という仕組みから成り立っている。
この仕組によりDNSサーバー自身の負荷分散も行えているため、世界中からweb検索を行っていても落ちること無く動作している。
普段使用しているドメインex.[retty.me, xxxx.co.jp]は「.」(ピリオド)により複数の階層に区切られます。
DNSは、「.」で区切られた階層以下のドメイン名やホスト名毎にしか管理しない、「分散型サービス」となっております。
具体的にはどういった仕組みかは以下の図の様になっています。
DNSサーバーは決まった仕事しかしない仕組みになっており、それにより負荷が軽減されている。
また、このツリー構造になっているDNSの構図をドメイン・ツリーと呼びます。
DNSの反映時間について
ここまではDNSの仕組みについて書いて来ましたが、ここから本題に入って行きます。
DNSではレコードと呼ばれる設定を追加することにより、名前解決を可能にしています。
その設定の際に、TTL(Time To Live)と呼ばれるパケットの有効時間も設定します。
(TTLはrouterを通過する度に値が減っていく仕組みになっており、本来パケットが行き先を見失った際にrouter内で無限ループが走らないように設定されています。)
自分たちのPCにはDNSキャッシュという仕組みがあり、TTLで設定された時間はDNSサーバーに接続先を検索することなく接続が可能となっている。
そのため、DNSレコードの設定を変更したところで反映には時間がかかってしまう。
DNSのバランシングについて
ここまではDNSの仕組みについて書いてきたため、バランシングについても書いていきたいと思います。
DNSでは、レコードを登録してIPやドメインとの紐付けを行っています。また、このレコードは1つのドメインに対して複数書くことができ、紐付けた値に対して重み付けをすることも出来ます。
そのため、レコードを複数登録してバランシングすることも可能になっています。
DNSのバランシングによるデメリット
- 障害時にもバランシングがされてしまう。
- サーバーの切り離しに時間がかかってしまう。
- インスタンスのIPが再起動の度に変わるインスタンスに対しては、都度の設定変更が必要。
- 設定変更に時間がかかってしまう。
解決方法
このデメリットを解決する方法としては幾つかありますが、今回はAWSで環境を作っているため、
ELBによるバランシング方法を選択します。
また、これと並行してmonitとというプロセス監視を行い、停止した場合に再起動をかけるツールを併用します。
ELBのメリット
- ポートに対するヘルスチェック機能があるため、障害時にサーバーの切り離しがされる。
- インスタンスIDでELBとの紐付けを行うため、再起動が発生した場合も設定変更が不要。
- 設定変更に時間がかからず、即時反映される。
monitを導入する理由
プロセスの監視を行い、問題が発生した場合は再起動を実行することにより、ダウンタイムを短くできる。
これは、再起動で復旧するものに対しては有効だが、設定ファイルのミス等の再起動では解決出来ないものもあるため、その時はアラートを飛ばす事が可能になっている。
弊社では、slackに障害発生時と復旧時に通知する様になっています。
では皆様も良いmonit Lifeを