EN JA
CARP(4)
CARP(4) FreeBSD Kernel Interfaces Manual CARP(4)

名称

carp一般的なアドレス冗長プロトコル (Common Address Redundancy Protocol)

書式

device carp

解説

CARP によって、同じローカルネットワークの複数のホストは、 1 組の IPv4 および/または IPv6 アドレスを共有することができます。その主な目的は、これらのアドレスが常に利用可能であることを保証することです。

carp を使用するために、管理者は、最低でも共通の仮想ホスト ID (vhid) を設定し、仮想のグループに参加するために各マシンで、この vhid に少なくとも 1 つの IP アドレスをアタッチする必要があります。また、次の vhid 基準ごとに追加のパラメータを設定することができます: 仮想ホストのためのマスタであるとき、どのくらいの頻度でホストが通知を送信するかと、 carp 通知を認証するために使用される pass を制御するために使用される advbaseadvskew です。 advbase パラメータは、“通知ベース” (advertisement base) を表わします。それは、秒単位で測定され、通知間隔の基本を指定します。 advskew パラメータは、“通知スキュー” (advertisement skew) を表わします。それは、1/256 秒単位で測定されます。それは、1 つのホストが他で行うより少しより遅いと通知するための基本の通知の間隔に追加されます。 advbaseadvskew の両方は、CARP 通知の内側に置かれます。 ifconfig(8) を使用するか、 SIOCSVH ioctl(2) 通して、これらの値を設定することができます。

次のマルチキャスト可能なインタフェース上で CARP 仮想ホストを設定することができます: イーサネット、層 2 VLAN、FDDI とトークンリング。インタフェースで仮想ホスト ID の任意の数を設定することができます。特別な vhid に IPv4 または IPv6 のアドレスの任意の数をアタッチすることができます。すべての接頭辞は、各通知で供給された暗号のチェックサムに含まれているので、 vhid に参加するすべてのホストが vhid で設定された接頭辞の同じリストがあることは重要です。 1 つのインタフェースで実行する複数の vhid は、独立にマスタ/バックアップ選挙に参加します。

さらに、 sysctl(8) を使用して設定することができる、多くのグローバルなパラメータがあります:

net.inet.carp.allow
着信 carp パケットを受け付けます。デフォルトで有効にされています。
net.inet.carp.preempt
仮想ホストは、互いに先取り (preempt) することができます。有効とされるとき、バックアップ状態の vhid は、より低い advskew でそれ自体を公表しているマスタを先取り (preempt) するでしょう。デフォルトで無効にされています。
net.inet.carp.log
carp vhid に関連するどのイベントがログ記録されるかを決定します。 0 の値は、あらゆるログ記録を無効にします。 1 の値は、 carp vhid のログ記録の状態の変更を有効にします。 1 以上の値は、悪い carp パケットのログ記録を有効にします。デフォルト値は、1 です。
net.inet.carp.demotion
この値は、CARP 降格 (demotion) の現在のレベルの表示します。値は、すべての vhid のための通知で送信された実際の advskew に追加されます。通常のシステム操作で、降格の要因は、0 です。しかしながら、次の問題のある条件は、そのレベルを上げます: carp が送信通知で問題を経験するとき、vhid を実行しているインタフェースがダウンするとき、または pfsync(4) インタフェースが同期されない間です。降格の要因を、sysctl oid に書き込んで調節することができます。 sysctl(8) コマンドに供給される符号付きの値は、現在の降格の要因に追加されます。これによって、例えば、いくつかのデーモンユーティリティの状態で、いくつかの外部の条件に依存する carp の振る舞いを制御することができます。
net.inet.carp.ifdown_demotion_factor
この値は、vhid を実行するインタフェースがダウンするとき、 net.inet.carp.demotion に追加されます。デフォルト値は、240 (最大の advskew 値) です。
net.inet.carp.senderr_demotion_factor
この値は、 carp が、その通知の送信エラーを経験するとき、 net.inet.carp.demotion に追加されます。デフォルト値は、240 (最大の advskew 値) です。

状態変更通知

時々、 carp の状態変更イベントの通知を取得するために役に立ちます。 devd(8) フックを使用することによって、これを達成することができます。マスタ/スレーブイベントは、システム CARP の下でシグナルが起こされます。サブシステムは、vhid とマスタ/スレーブイベントが生じたインタフェースの名前を指定します。メッセージのタイプは、vhid の新しい状態を表示します。詳しい情報については、 devd.conf(5)使用例 のセクションを参照してください。

使用例

複数のインタフェースがあるファイアウォールおとルータのために、物理的なインタフェースの 1 つがダウンするとき、アドレスで実行している (addresses running) carp のすべてがともにフェイルオーバすることは望ましいことです。これは、先取り (preempt) オプションを使用することによって達成されます。ホスト A と B の両方でそれを有効にします:

sysctl net.inet.carp.preempt=1

ホスト A が優先されたマスタであり、em0 の 192.168.1.0/24接頭辞と em1 の 192.168.2.0/24 を実行していると仮定します。これは、ホスト A のためのセットアップです:

ifconfig em0 vhid 1 pass mekmitasdigoat 192.168.1.1/24 
ifconfig em1 vhid 2 pass mekmitasdigoat 192.168.2.1/24

ホスト B のためのセットアップは、同一ですが、より高い advskew があります:

ifconfig em0 vhid 1 advskew 100 pass mekmitasdigoat 192.168.1.1/24 
ifconfig em1 vhid 2 advskew 100 pass mekmitasdigoat 192.168.2.1/24

ホスト A の物理的なインタフェースの 1 つが失敗するとき、 advskew は、すべての carp vhid で設定された値に降格されます。先取り (preempt) オプションのために、ホスト B は、それ自体を公表し始め、したがって、ちょうど失敗したホストの代わりに両方のインタフェースでホスト A を先取り (preempt) します。

次の devd.conf 規則を使用することによって、 carp 状態変更イベントの処理をセットアップすることができます:

notify 0 { 
 match "system"          "CARP"; 
 match "subsystem"       "[0-9]+@[0-9a-z]+"; 
 match "type"            "(MASTER|BACKUP)"; 
 action "/root/carpcontrol.sh $subsystem $type"; 
};

tcpdump(8) 出力でデコードされた carp パケットを見るために、 -T carp オプションを指定する必要があり、そうでなければ、 tcpdump(8) は、次の VRRP パケットとしてそれらを解釈しようと試みます:

tcpdump -npi vlan0 -T carp

歴史

carp デバイスは、 OpenBSD 3.5 ではじめて登場しました。 carp デバイスは、 FreeBSD 5.4 に取り込まれました。 FreeBSD 10.0 で、 carp は、大幅に書き直され、もはや疑似インタフェースではありません。
February 21, 2013 FreeBSD