VRRPの応用【負荷分散を実現する】

VRRPはルータなどの装置を冗長化する仕組みであるということを前回の記事で見てきました。

冗長化によって、システム障害や常時稼動しているシステムへの負担が一時的に過剰になった場合に、システムダウンを回避して業務やサービスの提供が停止するのを防ぐ事ができるようになります。
ただ、裏を返せば、そういったトラブルが発生しない限り、バックアップ機器を無駄に遊ばせているという考え方にもなります。

冗長化に加えて、負荷分散の仕組みも取り入れることができえれば、機器を遊ばせることなく、かつ、冗長化の仕組みも実現でき、一石二鳥です。この仕組みをVRRPで実現できないかどうかを今回の記事では考えていきます。

負荷分散とは

負荷分散とは、並列に運用されている機器間で、負荷がなるべく均等になるように処理を分散して割り当てる仕組みのことです。処理を分散させることによる性能改善が主な目的ですが、負荷分散技術によっては、故障時には機器を切り離し、残りの機器で縮退運転させる冗長化の用途でも使用することができます。

負荷分散の実現方法はたくさんあり、専用の装置(ロードバランサ)を使う方法やDNS、プロキシの機能を利用する方法などがあります。そのうち、DNSを使った負荷分散方法について少し見ていきましょう。

DNSラウンドロビン

利用するサーバーをDNSの仕組みを使って動的に切り替えることで、リクエストを複数のサーバーに転送し、負荷分散を実現する方法です。DNSでひとつのホスト名に複数のIPアドレスを割り当てることができる機能があります。DNSサーバーは、同じホスト名に対応するIPアドレスが複数登録されている場合には、問い合わせごとに順番に異なるIPアドレスを返答します。この仕組みを利用して、負荷分散を実現できるということです。

この方法は、DNSサーバーのゾーンファイルの設定を少し追加するだけで、簡単に導入することができるため、以前はよく用いられていました。

ただ、この方法には欠点があり、今では単体で使われることはほとんどなくなりました。

欠点はいくつかありますが、最も重要なのはサーバーや機器の故障を検出できない点です。たとえ機器が故障していたとしても、故障している方にも順番に割り振ってしまうため、冗長化の役割はなせていません。

代わりに、現在では負荷分散装置(ロードバランサ)が普及し、それを利用した負荷分散が主流です。負荷分散装置にはサーバーの状態を随時確認するヘルスチェック(生存確認)機能があり、異常がある機器は自動的に負荷分散対象から切り離してくれます。

上図は負荷分散装置によりルータを冗長化した構成です。複数のプロバイダと契約し、インターネットへの接続経路を複数用意することで、負荷を分散させ、かつ、一方の回線に障害が発生しても、もう一方の経路から接続できるよう冗長化構成としています。このような構成をマルチホーミングと言います。

VRRPの応用

VRRPは冗長化のためのプロトコルですが、その技術を応用することで負荷分散の役割もはたすことができます。

マルチグループVRRP

VRRPグループID(VRID)を複数設定して使い分けることで、複数の仮想ルータを構築することが可能です。その複数の仮想ルータを使い分けて正常時のデフォルトゲートウェイを振り分けることで負荷分散を実現します。

ルータAとルータBで「仮想ルータA」と「仮想ルータB」を作ります。PC1のデフォルトゲートウェイは仮想ルータA、PC2のデフォルトゲートウェイは仮想ルータBとしておくことで通常時は負荷が分散されます。さらにどちらのルータが故障した場合もバックアップルータに切り替わるため、冗長化も実現できます。

DNSラウンドロビンとの併用

DNSラウンドロビンは、DNSサーバーに同じひとつのホスト名で複数のIPアドレスを登録することで負荷分散する仕組みで、欠点はサーバーや機器の障害を検知できないので、ダウンしているものにも振り分けてしまうというものでした。この欠点をVRRPと併用することで解決することができます。

VRRPはルータだけの冗長化プロトコルではありません。下図では、2台のメールサーバーで冗長化しています。

DNSサーバーには「msvc」というホスト名で仮想メールサーバー1、2のIPアドレスをそれぞれ登録します。

クライアントとなるPCはメールサーバーに対して、「msvc」というホスト名で通信するようにすれば、DNSサーバーがDNSラウンドロビンにより、振り分けてくれるので冗長化と負荷分散になるという仕組みです。また、この構成であれば、もしどちらか一方のメールサーバーが故障しても、VRRPにより故障を検知し、バックアップの方に自動で切り替えてくれるので冗長性を確保できます。なぜなら、VRRPによって、正常なメールサーバーにVIP(仮想IPアドレス)と仮想MACアドレスが引き継がれるからです。

負荷分散の流れ

では具体的に、VRRPとDNSラウンドロビンを併用することによってどのように冗長化と負荷分散を実現するのか、その流れを追いかけてみましょう。前出の図のようにメールサーバー「MSV1」と「MSV2」でVRRPを組み、「仮想MSV1」、「仮想MSV2」を作ります。仮想MSV1、2のIPアドレスはそれぞれ、VIP1とVIP2を設定します。その上で、DNSサーバーのゾーン情報として、「msrv」というホスト名に「VIP1」と「VIP2」を登録し、PCのメールサーバー接続先設定には「msrv」にしたとします。

  1. PCがmsvcのIPアドレスをDNSサーバーに問い合わせると、DNSラウンドロビンにより、VIP1またはVIP2のどちらかのIPアドレスを得る。
  2. PCがVIP1のIPアドレスを取得した場合、優先度が高いMSV1と通信する。
  3. PCがVIP2のIPアドレスを取得した場合、優先度が高いMSV2と通信する。

このように、2台のメールサーバーどちらにもmsvcというホスト名でDNS登録しておくと、PCのメールソフトに設定するメールサーバーはひとつ(msvc)で済みます。PC側(クライアント側)の設定を振り分けておく必要はありません。さらに、正常時には、PCからのアクセスが分散し、どちらかが故障しても影響なくメールが使えるということです。

まとめ

VRRPとはクライアントPC側でひとつしか設定できないデフォルトゲートウェイを冗長化する技術であり、VRRP対応ルータ(ルータ以外でも可) を2台以上同じネットワークに配置し、それらを1つのVIPアドレスでグループ化します。また、VRRPはサーバーなど、レイヤー3以上で動作する機器でも活用できます。

このVRRPにより、クライアントPCからはルータが1台であるように見せかけることができ、ルータが1台故障した際もスタンバイしているルータがVIPアドレスを引き継ぎ、通信を継続させることができます。さらに、VRRPを複数構成したり、他の技術と組み合わせることで、負荷分散を行うことも可能です。

ネットワーク機器を冗長化する技術は他にもスタックやSTPなどがありますが、それらは冗長化する上でのレイヤーが異なります。VRRPはレイヤー3で動作する冗長化技術です。

スタックレイヤー1 物理層
STPレイヤー2 データリング層
VRRPレイヤー3 ネットワーク層

VRRPなどの冗長化技術を知る上で、どのレイヤーで動作するものなのかはとても重要な要素なので、その点もおさえておきましょう。