CARP


CARPとは

CARP(Common Adress Redundancy Protocol)とはOpenBSD由来のサーバ冗長化プロトコル

なんだとか。これを用いることで、冗長化を図ることが出来ます。

具体的には、仮想のIPアドレスを複数のマシンで共有することができるので
もしマシンが止まってしまった場合、バックアップのマシンに自動的に切り替わってくれるというもの。
難しい設定もないので、実際に動作を見たほうが説明するよりも理解しやすいと思います。



今回は、この環境の構築を行っていきたいと思います。



今回使用したのは、 FreeBSD 8.0 マシンを2台使用しました。
(以前に、VMware仮想マシンを用いて構築しようとした際には失敗しています。)
なかなか個人では用意できないかもしれませんが、物理的にマシンを複数台用意したほうがよさそうです。
快諾してマシンを提供してくれたゼミのK先輩に感謝感謝。


カーネルの再構築


標準の状態では、CARPを使用することは出来ないのでカーネルの再構築を行う必要があります。

# cd /usr/src/sys/i386/conf
# cp GENERIC MYKERNEL

で、MYKERNELをエディタで開いて

device carp

という1行を最終行にでも、追加してください。


/usr/src ディレクトリに移動します。

# cd /usr/src

カーネルコンパイルします。

# make buildkernel KERNCONF=MYKERNEL

新しいカーネルをインストールします。

# make installkernel KERNCONF=MYKERNEL

そして、再起動で再構築が完了。


CARPの設定


続いて、CARPの設定を。

etc/rc.confに以下の2行を追加

cloned_interfaces="carp0"
ifconfig_carp0="vhid 1 pass ******(パスワード) ***.***.***.***/**(仮想IPアドレス)"

という感じに設定してあげます。


あとは再起動で設定自体は終了です。

確認

$ifconfig

等で設定が有効になっているかどうか確認してみてください。


・マシン1

carp0: flags=49 metric 0 mtu 1500
inet 10.1.123.100 netmask 0xffffff00
carp: MASTER vhid 1 advbase 1 advskew 0

・マシン2

carp0: flags=49 metric 0 mtu 1500
inet 10.1.123.100 netmask 0xffffff00
carp: BACKUP vhid 1 advbase 1 advskew 0


"MASTER"のマシンで

#ifconfig carp0 down

とすると、マシン2がMASTERに変わっていることが確認できると思います。
今度は、マシン1を

#ifconfig carp0 up

とすることで、MASTERと復帰していることが確認できると思います。




参考にさせていただいたサイト
カスタムカーネルの構築とインストール − FreeBSD ハンドブック
第3の冗長化プロトコル、CARPを試す - 負け組アーキテクトの憂鬱