CARPによるサーバ冗長化
調べているうちに、IANAからプロトコルナンバーをもらえていないようで、
若干心が萎えてしまったのですが、、、
CARP(Common Address Redundancy Protocol)とは、VRRPの様なルータ冗長化プロトコルです。
実際には、VRRPがCiscoSystemsのHSRPとのパテント抵触問題が発生していたため、
OpenBSDの開発者によって、VRRPの代わりとなるプロトコルとして実装されたそうです。
さて、このCARP。OpenBSDで開発されただけあり、OpenBSDをはじめ、NetBSD、FreeBSDで
カーネルデバイスとして実装されています。
気になる機能は?
CARPインタフェースに仮想IPアドレスを設定し、同一ネットワーク上の複数のホストで
このIPアドレスを共有して使用します。
設定により、ホットスタンバイ構成と負荷分散構成が構築可能です。
ホットスタンバイ構成の場合、マスターとなるマシンによて仮想IPのパケットが処理されます。
マスターとなるマシンは、「アナウンスパケット」と呼ばれるActive通知パケットをブロード
キャストに送信し、仮想IPの所有をスタンバイ機に通達します。
いざ、障害(ホストダウンやネットワーク障害)が発生し、アナウンスパケットが
送信されなくなるとスタンバイ機がこの状態をキャッチし「Gratuitous ARP」を投げ、
IP重複の確認とARPテーブルのクリアを実施します。
なお、マスターが復帰(あるいはこのマシンに障害発生)するまで、このスタンバイ機が仮想IPの
パケットを処理します。
NetBSDによるCARPの設定メモ
NetBSDでは、標準でCARPが使えるようになっていないため、カーネルを再構築し、
CARP Deviceを有効にします。(FreeBSDも同様)
※OpenBSDは標準でこのデバイスが使えるようになっています。
なお、今回は2台のNetBSDマシーンで設定してみます。
1号機 | 2号機 | |
---|---|---|
HOST名 | archytas01 | archytas02 |
IPアドレス | 192.168.24.10 | 192.168.24.19 |
共有IP | 192.168.24.15 | 192.168.24.15 |
1. カーネルソースの入手
標準のインストーラでは、カーネルソースが含まれていなかったため、NebBSDのFTPサイトより
ソースを入手し、/usr/srcに展開します。
入手URL:ftp://ftp.netbsd.org/pub/NetBSD/NetBSD-4.0.1/source/sets/syssrc.tgz
2. カーネルコンフィグレーションの作成とコンパイル
今回はGenericカーネルを使用していたので、「GENERIC」のコピーから編集しました。
# cd /usr/src/sys/arch/i386/conf※私はマルチユーザモードで作業したため、shutdown -r nowにて再起動しています
# cp GENERIC ARCHYTAS
# vi ARCHYTAS
下記の1行を追加(コメントアウトを外す)
pseudo-device carp
# config ARCHYTAS
# cd ../compile/ARCHYTAS
# make depend && make
# mv /netbsd /netbsd.old && mv /usr/src/arch/i386/compile/ARCHYTAS/netbsd /
# reboot
※ARCHYTASは私のカーネルコンフィグの名前です。
3. カーネルの設定
まずは、コンパイルしたカーネルで起動しているかを確認します。
# uname -a
NetBSD archytas 4.0.1 NetBSD 4.0.1 (ARCHYTAS) #0: Sat Oct 3 22:11:56 JST 2009
root@archytas:/usr/src/sys/arch/i386/compile/ARCHYTAS i386
続いて、CARPが使用できるようになっているかカーネルパラメータを確認します。
# sysctl -a | grep carp
net.inet.carp.preempt = 0
net.inet.carp.arpbalance = 0
net.inet.carp.allow = 1
net.inet.carp.log = 0
CARPが使用できるようにカーネルパラメータを設定します。
# sysctl -w net.inet.carp.preempt=1
※恒久的に設定を有効にする場合、
# vi /etc/sysctl.conf
下記1行を追加
net.inet.carp.preempt=1
4. CARPデバイスの設定
ここでは、とりあえずの設定です
1号機設定(マスタ)
# ifconfig carp0 create2号機設定(スタンバイ)
# ifconfig carp0 vhid 1 carpdev pcn0 pass lanpass 192.168.24.15 netmask 255.255.255.0
# ifconfig carp0 create
# ifconfig carp0 vhid 1 carpdev pcn0 pass lanpass advskew 128 192.168.24.15 netmask 255.255.255.0
以上で、CARPによる冗長化が行える