by shigemk2

当面は技術的なことしか書かない

サーバ/インフラを支える技術1 ルータやロードバランサの冗長化

前回
サーバ/インフラを支える技術1 Webサーバを冗長化する - by shigemk2

前回まででロードバランサが出てきたけども、
ロードバランサが冗長化されていないため、ロードバランサは1つしかなく、
コイツが死んだらサービスが全部死んでしまう。

こいつを冗長化するために、VRRPを使う。

VRRP(Virtual Router Redundancy Protocol)

ベンダによって仕様が異なるため、
異なるベンダのロードバランサを相互運用するための
ベンダ非依存の冗長化プロトコルのこと。(RFC3768で定義されている)

keepalivedVRRPを利用できるため、keepalivedの設定を追加するだけで
冗長化ができる。

流れ
1. マスタノードが正常に稼動しているかどうかをチェック(ヘルスチェック)

    • マスタノードからVRRPパケットをマルチキャストアドレスに定期的に送出しつづける。一定期間受信がなければフェイルオーバ(普通のヘルスチェックは機器に対しリクエストを送りレスポンスを待つ)
    • 送信先のマルチキャストアドレスは変更不可能なので、複数の系列のロードバランサがある場合、仮想ルータIDを利用して複数のマルチキャストアドレスがあるように見せかける(これにより誤作動を防ぐ)
    • VRRPでは通常はマスタが中心となって動き、マスタが死んだ場合どのBackupに引き継がせるかを選ぶことが出来る。また、プリエンプティブモードに設定することでプライオリティの高いノードをマスタを含むすべてのノードから選べる

2. マスタノードが停止していたらBackupノードにVIPをひきつぐ

    • 引き継ぐときは、仮想IPアドレスだけでなく仮想MACアドレスも引き継がれる。MACアドレスを引き継がずにIPアドレスを引き継ぐと、通信相手のすべての機器のARPテーブルを更新してもらう必要があり、ARPテーブルを更新できなかった機器は動かなくなってしまう。

とは言うもののkeepalivedは仮想MACアドレスを使わない実装になっている。そのため、フェイルオーバ時にARPエントリが更新されなかった機器があったとき、ARPキャッシュがクリアされるまでの間通信できなくなる可能性がある。

これを解決するために、gratuitous ARP(GARP)の遅延送出を利用する。keepalivedにはgrap_master_delayという設定項目がある。これを利用して、ARPエントリの更新を数秒遅らせ、通信がこみあう時間帯を避けてARPエントリの更新を行うことが出来る。




[24時間365日] サーバ/インフラを支える技術 ?スケーラビリティ、ハイパフォーマンス、省力運用 (WEB+DB PRESS plusシリーズ)

[24時間365日] サーバ/インフラを支える技術 ?スケーラビリティ、ハイパフォーマンス、省力運用 (WEB+DB PRESS plusシリーズ)