VRRP(vrrpd)でルータの冗長化

Ads

VRRPとは?

VRRP とはルータを冗長化するためのプロトコルでその詳細は RFC2338 で定義されています。

複数台のルータで、仮想IP*1を使いまわすことによってルータのダウンタイムを限りなく小さくします。 通常はマスタールータが仮想IPを持っていて、そのルータがなんらかの理由で死んでしまった時には他のルータがそれを検知して仮想IPを自分に付けることにより 全体としては落ちることなく動作し続けるように見えるということを実現するためのプロトコルです。

障害時に利用する経路を切り替えるといったことは OSPF のようなルーティングプロトコルを利用することで可能ですが、 VRRP を利用する場合は動的経路制御ができない環境*2でも冗長構成にすることが出来ます。

高級なハードウェアルータは VRRP 機能を持っているものがあります。 そして Linux や BSD でも VRRP が利用できるようです。

VRRP利用のポイント

基本的には以下の必須3点が決まればどのルータでも設定は簡単に出来るはず。

VRID
仮想サーバのグループID。同じ VRID を持ったルータ群で一つの仮想 IP を持つ。1〜255 の値が利用できます。
仮想IP
ルータに振られている実 IP と別に VRRP で共有される仮想IP。同じ VRID を持つルータのどれかがこの IP を持つ。現在どのルータが仮想IPを持っているかは MAC アドレスをフェイクしていなければ、ARP で仮想 IP の MAC アドレスを見れば分かる。
仮想IPを持つインターフェース
どのインターフェースでVRRPの仮想IPを持つかを指定します。RTシリーズなら pp とか lan1 とか、Linux なら eth0 とかのこと。

上記以外にオプショナルな設定として、以下の設定ができる。

プライオリティ
1〜254 の値が設定できる。デフォルトは100。仮想IPと同じ実IPをもつルータが稼動している場合はそのルータは優先度255となる。
プリエンプトモード
稼働中のマスタールータより優先度の高いバックアップルータが参加してきたら優先度の高いバックアップルータに仮想IPを移行するかどうか。プリエンプティブモードが有効なら移行する、そうでなければ移行しないで優先度の低いマスタールータが仮想IPを持ち続ける。デフォルトは有効。*3
認証用パスワード
認証用に 1〜8 文字の文字列が利用できる。デフォルトは認証無し。*4

これ以外に、ルータによっては、あるネットワークが落ちたとかPINGタイムアウトの検出等をトリガーとして積極的にマスターからバックアップに移行するということが出来たりもする。 これらの詳細を突っ込もうと思ったら各ルータのマニュアルを参照するべし。

RTシリーズやCentreCOM AR300/AR700 シリーズでは上述のようにトリガーを設定してマスターとバックアップを切り替えたりメールを送ったりすることが出来るみたい。 Linux VRRPd ではそういったことは出来ないようなのでやろうと思ったらスクリプト等を駆使して実現するしかなさそうです。

実践

感想から言うと、VRRPってのは、どのプラットフォームでも驚くほどシンプルな設定で簡単に使えてしまうということが分かった。

以下、試してみたもののメモ。 とりあえずシンプルな使い方のみを書いておきます。

YAMAHA、RTシリーズ

ip コマンドで VRRP の設定を行う。

  • lan1 に、VRID=50、仮想IP=192.168.10.1 で VRRP インターフェースを設定する例。
    ip lan1 vrrp 50 192.168.10.1
    これだけ。 lan1 と同じ LAN 内に、同じ VRID と仮想 IP を持つルータがあればその IP はどちらかのルータがダウンしても存在し続けるように見えるはずです。

参考:http://www.rtpro.yamaha.co.jp/RT/docs/vrrp/vrrp.html

Allied Telesis、CentreCOM AR300/AR700 シリーズ

ENABLE VRRPCREATE VRRP コマンドで VRRP の設定が出来る。

  • eth0 に、VRID=50、仮想IP=192.168.10.1 で、VRRP を設定する例。
    ENABLE VRRP
    CREATE VRRP=50 OVER=eth0 IP=192.168.10.1

Linux VRRPd

vrrpd は以下のURLから入手できます。

https://sourceforge.net/projects/vrrpd/

インストールは、make して出来た vrrpd を自分で /usr/sbin 等にコピーするだけです*5 :p

  • eth0 に、VRID=50、仮想IP=192.168.10.1 で、仮想MACアドレスを使わずに VRRP を設定する例。
    vrrpd -i eth0 -n -v 50 192.168.10.1

仮想MACアドレスなんて一見魅力的な(?)機能があるにも関わらず、それを使わないことには理由があります。 Linux vrrpd では仮想MACを使わないようにしておかないと、default route が消えたり、いきなり通信が切れたりということが起きるようなので、 初めて vrrpd を試してみるときには -n を付けておいた方が無難です。 仮想MACなんて使わなくても VRRP のテストは問題なく行うことが出来るので、仮想MACアドレスを用いることの影響がちゃんと分かっている場合のみ利用したほうが良いと思います。

ところで vrrpd は完全にユーザランド(カーネル関係なし)で動くようなので、 vrrpd が動いているどのマシンで ifconfig してもそれらしいインターフェイスが見当たらず、パッと見、今誰が仮想IPを持っているか分かりません。 それを判断するには同じネットワーク上から、vrrpd が動いている全マシンの実IP全てと仮想IPに対して ping 等を打ち続け arp コマンドで仮想IPと同じMACアドレスを持つIPを確認する方法が考えられます。しかし当然仮想MACを使ってたらこの方法では分かりません。

Linux keepalived

最近は keepalived でVRRPするのが素敵らしい。

keepalived でググれば情報は沢山見つかるので詳細はそちら参照。

Freevrrpd

僕自身は BSD は使ったことは無いのですが、BSD にも VRRP の実装があるようなのでポインタだけメモ。

コメント

  • YAMAHAとAlliedTelesisとか、YAMAHAとLinuxとかいう組み合わせでもサクッと動作できるっぽ。 -- ずん 2003-12-10 (水) 12:10:28
  • VRRP は使ったこと無いですが、仮想 IP を提供しているセグメントではなく、Packet を fowarding するセグメントの IF に問題があったら、priority を変えられるなどの機能があると、安定した Network 環境が出来ますね。 -- 通りすがり? 2007-08-14 (火) 13:03:47

*1 実装により仮想IPに仮想MACアドレスを持たせることも出来ます。
*2 例えば一般的なLAN環境であれば各PCは固定的にルータのIPをゲートウェイとして利用してると思います。
*3 優先度が高く設定されているルータが頻繁に落ちる場合はプリエンプティブモードをOFFにしておくなどという使い方が考えられる。
*4 これはカレントのマスタールータがプリエンプトモードで稼動しているときに、より優先度の高いルータが参加してきたときに仮想IPを明け渡すかどうかに使われると思われる。
*5 make install くらい用意してくれりゃいいのに

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2010-04-01 (木) 10:26:56 (2446d)