web-dev-qa-db-ja.com

CARP:2台のマシンがマスターだと考えていますが、1つのインターフェイスのみです

私は2台のマシンを持っており、それぞれが忙しいWebサイトのファイアウォール/ロードバランサーと同じように構成されています。内部インターフェイスと外部インターフェイスの両方でCARPとpfsyncを使用してセットアップしました。内部インターフェイスは期待どおりに動作しています(プライマリはMASTERとしてリストされ、セカンダリはBACKUPとしてリストされています)

両方のマシンで、ネットワークインターフェイスは次のとおりです。

  • em0-外部インターフェース
  • bge0-内部インターフェース
  • bge1-両方のマシン間のクロスオーバー接続
  • carp0-CARPの共有外部インターフェイス
  • carp1-CARPの共有内部インターフェース

以下のIPアドレスとMACアドレスを書き直しました。ネットワークは次のとおりです。

  • 10.0.1.0/24-外部ネットワーク
  • 10.0.2.0/24-内部ネットワーク
  • 10.0.3.0/24-クロスオーバーネットワーク

プライマリのifconfigからの出力は次のとおりです。

em0: flags=8943<UP,BROADCAST,RUNNING,PROMISC,SIMPLEX,MULTICAST> metric 0 mtu 1500
    options=19b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM,TSO4>
    ether [SNIP]
    inet 10.0.1.10 netmask 0xffffff00 broadcast 10.0.1.255
    media: Ethernet 100baseTX <full-duplex>
    status: active
bge0: flags=8943<UP,BROADCAST,RUNNING,PROMISC,SIMPLEX,MULTICAST> metric 0 mtu 1500
    options=9b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM>
    ether [SNIP]
    inet 10.0.2.10 netmask 0xffffff00 broadcast 10.0.2.255
    media: Ethernet 1000baseT <full-duplex>
    status: active
bge1: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
    options=9b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM>
    ether [SNIP]
    inet 10.0.3.10 netmask 0xffffff00 broadcast 10.0.3.255
    media: Ethernet 1000baseT <full-duplex>
    status: active
lo0: flags=80c9<UP,LOOPBACK,RUNNING,NOARP,MULTICAST> metric 0 mtu 16384
    options=3<RXCSUM,TXCSUM>
    inet6 fe80::1%lo0 prefixlen 64 scopeid 0x4 
    inet6 ::1 prefixlen 128 
    inet 127.0.0.1 netmask 0xff000000 
pflog0: flags=141<UP,RUNNING,PROMISC> metric 0 mtu 33152
pfsync0: flags=0<> metric 0 mtu 1460
    pfsync: syncdev: bge1 syncpeer: 10.0.3.11 maxupd: 128
carp0: flags=49<UP,LOOPBACK,RUNNING> metric 0 mtu 1500
    inet 10.0.1.5 netmask 0xffffff00 
    carp: MASTER vhid 1 advbase 1 advskew 0
carp1: flags=49<UP,LOOPBACK,RUNNING> metric 0 mtu 1500
    inet 10.0.2.5 netmask 0xffffff00 
    carp: MASTER vhid 2 advbase 1 advskew 0

そして、これがプライマリからの/etc/rc.confの抜粋です。

defaultrouter="10.0.1.1"
network_interfaces="em0 bge0 bge1 lo0 pfsync0"
cloned_interfaces="carp0 carp1"
ifconfig_em0="inet 10.0.1.10 netmask 255.255.255.0 media 100BaseTX mediaopt full-duplex"
ifconfig_bge0="inet 10.0.2.10 netmask 255.255.255.0 media 1000BaseTX mediaopt full-duplex"
ifconfig_bge1="inet 10.0.3.10 netmask 255.255.255.0 media 1000BaseTX mediaopt full-duplex"
ifconfig_carp0="vhid 1 pass [SNIP] 10.0.1.5/24"
ifconfig_carp1="vhid 2 pass [SNIP] 10.0.2.5/24"
pfsync_enable="YES"
pfsync_syncdev="bge1"
pfsync_syncpeer="10.0.3.11"

そして、これがセカンダリの出力です。

em0: flags=8943<UP,BROADCAST,RUNNING,PROMISC,SIMPLEX,MULTICAST> metric 0 mtu 1500
    options=19b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM,TSO4>
    ether [SNIP]
    inet 10.0.1.11 netmask 0xffffff00 broadcast 10.0.1.255
    media: Ethernet 100baseTX <full-duplex>
    status: active
bge0: flags=8943<UP,BROADCAST,RUNNING,PROMISC,SIMPLEX,MULTICAST> metric 0 mtu 1500
    options=9b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM>
    ether [SNIP]
    inet 10.0.2.11 netmask 0xffffff00 broadcast 10.0.2.255
    media: Ethernet 1000baseT <full-duplex>
    status: active
bge1: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
    options=9b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM>
    ether [SNIP]
    inet 10.0.3.11 netmask 0xffffff00 broadcast 10.0.3.255
    media: Ethernet 1000baseT <full-duplex>
    status: active
lo0: flags=80c9<UP,LOOPBACK,RUNNING,NOARP,MULTICAST> metric 0 mtu 16384
    options=3<RXCSUM,TXCSUM>
    inet6 fe80::1%lo0 prefixlen 64 scopeid 0x4 
    inet6 ::1 prefixlen 128 
    inet 127.0.0.1 netmask 0xff000000 
pflog0: flags=141<UP,RUNNING,PROMISC> metric 0 mtu 33152
pfsync0: flags=0<> metric 0 mtu 1460
    pfsync: syncdev: bge1 syncpeer: 10.0.3.10 maxupd: 128
carp0: flags=49<UP,LOOPBACK,RUNNING> metric 0 mtu 1500
    inet 10.0.1.5 netmask 0xffffff00 
    carp: MASTER vhid 1 advbase 1 advskew 20
carp1: flags=49<UP,LOOPBACK,RUNNING> metric 0 mtu 1500
    inet 10.0.2.5 netmask 0xffffff00 
    carp: BACKUP vhid 2 advbase 1 advskew 20

そして、これがセカンダリからの/etc/rc.confの抜粋です。

defaultrouter="10.0.1.1"
network_interfaces="em0 bge0 bge1 lo0 pfsync0"
cloned_interfaces="carp0 carp1"
ifconfig_em0="inet 10.0.1.11 netmask 255.255.255.0 media 100BaseTX mediaopt full-duplex"
ifconfig_bge0="inet 10.0.2.11 netmask 255.255.255.0 media 1000BaseTX mediaopt full-duplex"
ifconfig_bge1="inet 10.0.3.11 netmask 255.255.255.0 media 1000BaseTX mediaopt full-duplex"
ifconfig_carp0="vhid 1 pass [SNIP] advskew 20 10.0.1.5/24"
ifconfig_carp1="vhid 2 pass [SNIP] advskew 20 10.0.2.5/24"
pfsync_enable="YES"
pfsync_syncdev="bge1"
pfsync_syncpeer="10.0.3.10"

私が理解していないのは、carp1のステータスが本来あるべき状態(プライマリのMASTERとセカンダリのBACKUP)である場合、carp0のcarpステータスは両方のマシンでMASTERです。何が足りないのですか?どこで手がかりを探すべきですか?

3

マシンは外部インターフェイスを介して相互にpingを実行できますか?万が一、外部ネットワークに別のvhid 1がありますか?

6
ryanlim

primaryadvskewは、(0 | primary)をMASTERにする必要があるのに対し、(20 | secondary)はバックアップする。 2つのcarp0インターフェース間の通信の欠如を意味します(?)。

あなたはすでにこれらをチェックしているかもしれませんが、OpenBSDでのいくつかの一般的な診断手順。

  1. 構成ファイル
  2. Carpプロトコルが2台のマシンに出入りできることを確認します
  3. Pfsyncプロトコルが2台のマシンの内外で許可されていることを確認します

あなたはFreeBSDを使用しているようです(つまりOpenBSDを使用していない)私の答えがあなたが調整して役立つように十分明確であることを願っています。

-

1.構成ファイル

以下のようなnet.inet.carp設定はありますか?

ファイル:/etc/sysctl.conf

 net.inet.carp.allow = 1 
 net.inet.carp.preempt = 1 
 net.inet.carp.log = 1 

一方のCARPインターフェースは機能していますが、もう一方は正しいシステム構成が行われたことを示していないようです。確認しても問題ありません。コマンドライン設定で変更を加え、システム構成での設定を忘れることがあります。

  • net.inet.carp.allowは、着信CARPパケットを受け入れるかどうか。デフォルトはyesで、/ etc /sysctl.confにはありません
  • net.inet.carp.preemptグループ内のホストがマスターをプリエンプトできるようにします。 1つのインターフェイスの障害時にすべてのCARPインターフェイスのフェールオーバーを設定します。デフォルトでは無効になっています。
  • net.inet.carp.log不正なCARPパケットをログに記録します。
  • net.inet.carp.arpbalanceグループホスト間でトラフィックの負荷を分散します。デフォルトは無効です。

2.鯉のプロトコル

ファイアウォールがMASTER/BACKUPになる必要があるかどうかを判断するには、コイのパケットを受信する必要があります。

ファイアウォール構成を再確認して、proto carpは、両方のコイの物理インターフェイスで受け渡されます。

例えば:

 {em0 bge0}プロトコイの状態を維持する(同期なし)

ファイアウォールルールセットの先頭にすべてブロックログを追加し、pflog0インターフェイスでtcpdumpを使用して、carpパケットの通過が許可されているかどうかを確認することで確認できます。

2.pfsyncプロトコル

ファイアウォールの状態が2つのホスト間で共有されていることを確認するために、pfsyncパケットがファイアウォールの通過を許可されていることを確認する追加のチェック。

 bge1 proto pfsync keep state(no-sync)
をすばやく渡します。
2
samt