May 23, 2005

FreeBSD CARP 共通アドレス冗長プロトコル [computer]

FreeBSDのcarpのmanを訳してみた。 まだ少々難はあるけど。ま、vrrp等の概念がわかっていないとどのみちちゃん とした日本語になってもこれだけじゃわからんだろうし興味持つような人なら ある程度のイメージは掴んでいるだろうからこれでもある程度は役に立ってく れるだろう(?)。

CARPはOpenBSD由来でvrrpの後継という売り文句だが、OpenBSDのサイトを見た ところvrrpがCISCOのパテントに引っかかるので例によって(中略)ということ で作りなおしたというところらしい。

LinuxのLVSに比べると機能的にはイマイチのところもあり。 vrrpの置き換えというところが大きいようで。 pfのpfsyncとの連携はできるようで出口用のファイアウォールをターゲット にしているよう。 ARPロードバランシングは使える場合が限定されるようで小規模ネットワーク 向けに取り合えず付けてみたというところか。

取り合えず訳語は以下の通り

 
failover      故障からの回復
preempt       占有
advertisement 告示

NAME

carp -- 共通アドレス冗長プロトコル

SYNOPSIS

     device carp

詳細

carpインターフェースはCARPプロトコルの実装で制御を行う疑似デバイスです. CARPは単一のローカルネットワーク上の複数のホストの間でIPアドレスの集合 を共有を可能にします. これの主な用途はこれらのアドレスが常に利用可能な ように保護することですが、設定によってcarpで負荷分散の機能を与えること もできます.

carpインターフェースは ifconfig carpN create コマンドで実行時に作成したり /etc/rc.confファイルのcloned interfaceの設定で作成できます.

carpの使用には, 管理者は最低、仮想グループ内のマシンそれぞれに common virtual host IDと virtual host IPアドレスを設定する必要があります. インターフェース毎の追加パラメータとしてadvbaseとadvskwがあり, 仮想ホ ストのマスタに告示を行う間隔を制御するために使われます. また, passは 告示の認証に使われます.

advbaseパラメータは"advertisement base"を意味します. これは秒単位で 告示間隔の基本設定に使われます. advskewパラメータは"advertisement skew"という意味です. 1/256秒単位です. これはあるホストの告示が他の ホストよりわずかに遅くなるように基本の告示間隔に加算されます. advbase と advskewはCARPの告示に含められます.これらの設定はifconfig(8) やioctl(2)のSIOSVHによって設定されます.

加えていくつかのグローバルパラメータがsysctl(8)で設定できます.

	net.inet.carp.allow

入ってくるcarpパケットを受け入れます. デフォルトで有効になっています.

	net.inet.carp.preempt

仮想ホストの占有を認めます. carpインターフェースグループの故障からの 回復のために使われます. このオプションが有効の場合にcarpを使用している 物理インターフェースが故障した場合, 全てのインターフェースでadvskewが 240になります. EXAMPLEの最初を参照してください. デフォルトでは無効になっ ています.

	net.inet.carp.log

値が0のときはまったくログを取りません. 1のときは不正なcarpパケットの 記録を取ります. 1より大きな値の場合はcarpインターフェースの状態の変化 を記録します. デフォルトでは1です.

	net.inet.carp.arpbalance  

ARPを使いローカルトラフィックの分散を行います. デフォルトでは無効です. (ARP負荷分散)

	net.inet.carp.suppress_preempt

占有の抑制状態を示す読み取り専用の値です. 占有はインターフェースがdown であるかpfsync(4)インターフェースが同期していない場合には抑制されます. 0の値は問題がまったく検出されておらず,占有が抑制されていないことを示し ます. 問題の原因ごとに+1される抑制カウンタです.

EXAMPLES

複数のインターフェースを持つファイアウォールやルーターでは, ひとつの物 理インターフェースが故障した時には全てのcarpインターフェースが同時に切 り替わる必要があります. これは preemptオプションで実現できます. ホストAとBの両方で有効にします.

	sysctl net.inet.carp.preempt=1

ホストAをマスタで物理インターフェースは192.168.1.x/24と192.168.2.x/24 に設定されているとします. 以下はホストAの設定になります.

ifconfig carp0 create
ifconfig carp0 vhid 1 pass mekmitasdigoat 192.168.1.1/24
ifconfig carp1 create
ifconfig carp1 vhid 2 pass mekmitasdigoat 192.168.2.1/24

ホストBの設定はadvskewの値を大きくする以外はまったく同じになります.

ifconfig carp0 create
ifconfig carp0 vhid 1 advskew 100 pass mekmitasdigoat 192.168.1.1/24
ifconfig carp1 create
ifconfig carp1 vhid 2 advskew 100 pass mekmitasdigoat 192.168.2.1/24

preemptオプションによりホストAの物理インターフェースの1つが故障すると Aの全てのcarpインターフェースのadvskewが240になります. これによりホス トBの両方のインターフェースが共にインターフェースひとつが故障した物 (ホストA)から置き換わります.

ARP負荷分散の仮想ホストを構築するにはARPリクエストに応答し, トラフィックを 扱う物理ホストそれぞれに仮想ホストの設定を行う必要があります. 以下の例では2つのホストが負荷分散と192.168.1.10のIPアドレスの故障から の回復をします.

まずホストAのcarpインターフェースの設定です. advskewが100になっている2 つ目の仮想ホストは幾らか少ない頻度で告示を行うことになります.

ifconfig carp0 create
ifconfig carp0 vhid 1 pass mekmitasdigoat 192.168.1.10/24
ifconfig carp1 create
ifconfig carp1 vhid 2 advskew 100 pass mekmitasdigoat 192.168.1.10/24

ホストBの設定は仮想ホスト1のadvskewを仮想ホスト2より大きくすることを除 いて同じです.

ifconfig carp0 create
ifconfig carp0 vhid 1 advskew 100 pass mekmitasdigoat 192.168.1.10/24
ifconfig carp1 create
ifconfig carp1 vhid 2 pass mekmitasdigoat 192.168.1.10/24

最後に両方のホストでARP負荷分散機能を有効にします.

	sysctl net.inet.carp.arpbalance=1

ホストが192.168.1.10へのARPリクエストを受けるとリクエストのソースIPア ドレスがどちらの仮想ホストが応答するかを決めるのに使われます. 選ばれた ホストがマスタになり他のホストは無視します.

このようにしてローカルに接続されたシステムは異なるARP応答を受け取り, それに続くIPトラフィックはホスト間で分散されます. もしホストの1台が 故障したら他のサーバが仮想MACアドレスを受け継ぎARPリクエストに応答 します.

注意: ARP負荷分散はローカルネットワークのセグメント内でのみ働きます. ルータはそれ自身が仮想的に同一のホストとして扱われるためルータを経由し たトラフィックの負荷分散を行うことはできません.

Posted at 00:49 in computer

Archives
Powered by
blosxom 2.0
and
modified by
blosxom starter kit