[Network] Bonding Parameters Based on Network Layout

原文はこちら。
https://blogs.oracle.com/networking/entry/linux_bonding_tips

Linux Bondingに関する概要

名前からわかる通り、Bondingドライバは複数の物理ネットワークインターフェースを下地にして論理ネットワークインターフェースを作成します。様々な理由でそのようにするわけですが、その中にはリンクアグリゲーション冗長性、高可用性などのための高帯域幅のリンクアグリゲーションもその理由に含みます。上位レイヤはIPアドレスを持つ論理的な結合インターフェースで通信するのですが、最終的にはアクティブな物理インターフェースが下位レイヤ(L2)と通信します。また、物理インターフェースを隠すことで上位層に対して透過性を提供します。

Bondingのパラメータ

論理結合インターフェースに属する物理インターフェイスを指定する以外に、機能するような設定をします。いくつかの有効な構成がありますが「アクティブバックアップ」と呼ばれ、1という数値識別子をもつモードに焦点を絞るつもりです。実際にシステムにインストールされているkernel bondingドライバで使える全てのパラメータを一覧表示することができます。以下の'parm'で始まる行を探してみて下さい。/etc/modprobe.confでこれらのオプションを使って構成したり、/etc/sysconfig/network-scripts/ifcfg-bond1に直接指定することで各々のBondingインターフェースに対して構成することもできます。
[root@hostA ~]# modinfo /lib/modules/2.6.32-100.23.80.el5/kernel/drivers/net/bonding/bonding.ko
filename:       /lib/modules/2.6.32-100.23.80.el5/kernel/drivers/net/bonding/bonding.ko
author:         Thomas Davis, tadavis@lbl.gov and many others
description:    Ethernet Channel Bonding Driver, v3.5.0
version:        3.5.0
license:        GPL
srcversion:     4D5495287BB364C8C5A5ABE
depends:        ipv6
vermagic:       2.6.32-100.23.80.el5 SMP mod_unload
parm:           max_bonds:Max number of bonded devices (int)
parm:           num_grat_arp:Number of gratuitous ARP packets to send on failover event (int)
parm:           num_unsol_na:Number of unsolicited IPv6 Neighbor Advertisements packets to send on failover event (int)
parm:           miimon:Link check interval in milliseconds (int)
parm:           updelay:Delay before considering link up, in milliseconds (int)
parm:           downdelay:Delay before considering link down, in milliseconds (int)
parm:           use_carrier:Use netif_carrier_ok (vs MII ioctls) in miimon; 0 for off, 1 for on (default) (int)
parm:           mode:Mode of operation : 0 for balance-rr, 1 for active-backup, 2 for balance-xor, 3 for broadcast, 4 for 802.3ad, 5 for balance-tlb, 6 for balance-alb (charp)
parm:           primary:Primary network device to use (charp)
parm:           lacp_rate:LACPDU tx rate to request from 802.3ad partner (slow/fast) (charp)
parm:           ad_select:803.ad aggregation selection logic: stable (0, default), bandwidth (1), count (2) (charp)
parm:           xmit_hash_policy:XOR hashing method: 0 for layer 2 (default), 1 for layer 3+4 (charp)
parm:           arp_interval:arp interval in milliseconds (int)
parm:           arp_ip_target:arp targets in n.n.n.n form (array of charp)
parm:           arp_validate:validate src/dst of ARP probes: none (default), active, backup or all (charp)
    parm:           fail_over_mac:For active-backup, do not set all slaves to the same MAC.  none (default), active or follow (charp)
Bondingの状態と構成の確認方法

アクティブ-バックアップモードで最もよく使われる構成は、miimonとuser_carrierというパラメータを組み合わせた、リンクベースの障害検知です。以下にその例をご紹介します。
[root@hostA ~]# cat /proc/net/bonding/bond1
Ethernet Channel Bonding Driver: v3.5.0 (November 4, 2008)

Bonding Mode: fault-tolerance (active-backup) (fail_over_mac active)
Primary Slave: None
Currently Active Slave: eth0
MII Status: up
MII Polling Interval (ms): 100
Up Delay (ms): 5000
Down Delay (ms): 5000

Slave Interface: eth0
MII Status: up
Link Failure Count: 0
Permanent HW addr: 00:21:28:4a:cd:80

Slave Interface: eth1
MII Status: up
Link Failure Count: 0
Permanent HW addr: 00:21:28:4a:cd:81
[root@hostA ~]#
ここでわかることは、bond1が2個の物理ネットワークもしくはスレーブ(eth0とeth1)を使ったアクティブ-バックアップモードの状態であることです。リンクの状態を100ミリ秒毎に監視しています。リンクが落ちた場合には、 Bonding ドライバが5000ミリ秒(5秒)待ってから、DOWNしていると判断します。失ったリンクが復活した場合には、ドライバがサイド5000ミリ秒(5秒)待ってからUPと判断します。
'primary'というオプションをnoneに設定します。両方が同時にUPの状態にある場合、Bondingドライバがeth0とeth1の優先権を持っていないことを意味します。リンク障害カウンタはホストが起動してから何回リンクが切れたか追跡し続けます。

MII監視ベースのBondingにおける制限

では、次のトポロジ図を確認しましょう。ホスト'A'には2個の物理インタフェースがあり、それらのリンクは、それぞれ1、2とマークされています。これらの物理インターフェースは、冗長性と高可用性のために各々独立してイーサネットスイッチに接続されています。これらのスイッチは、外部ネットワークに接続しています。それは企業ネットワークやインターネットかもしれません。ローカル·イーサネット·スイッチからのリンクにも、それぞれ3と4とラベルが付けられています。




bond1インターフェースを持つホストAには、現在アクティブなインターフェースとしてet0があります。図のように外部ネットワークと通信することが想定されます。
シナリオ1:リンク1が停止した場合、Bondingドライバが停止を検知してバックアップインターフェースのeth1をアクティブにします。この時点でサービスを再開します。

シナリオ2:リンク3が停止した場合、ローカル物理インターフェースはどちらも問題なく動作しているため、Bondingドライバは何が起きているかわかりません。しかし、リンク3が停止しているため、ホストAは外部ネットワークへの接続ができません。 
OSI第3レイヤで障害を発見するための代替Bonding構成

Bondingドライバは、上記問題を解決するためのパラメータを提供しています。miimonの変わりに、arp_ip_targetとarp_intervalを使います。

修正した設定内容は以下のような感じです。
[root@hostA ~]# cat /proc/net/bonding/bond1
Ethernet Channel Bonding Driver: v3.5.0 (November 4, 2008)

Bonding Mode: fault-tolerance (active-backup)
Primary Slave: None
Currently Active Slave: eth0
MII Status: up
MII Polling Interval (ms): 0
Up Delay (ms): 0
Down Delay (ms): 0
ARP Polling Interval (ms): 60
ARP IP target/s (n.n.n.n form): 192.168.70.1

Slave Interface: eth0
MII Status: up
Link Failure Count: 0
Permanent HW addr: 00:21:28:4a:cd:80

Slave Interface: eth1
MII Status: up
Link Failure Count: 0
Permanent HW addr: 00:21:28:4a:cd:81
[root@hostA ~]#
おわかりのように、Bondingドライバは現在192.168.70.1を60秒(1分)毎にアクセス可能か監視しています。接続が失敗する場合、ローカルリンクの状態にかかわらず、eth1を使用します。

まとめ

LAN内で通信していて、ルータを介さない場合にはMII監視ベースのボンディングは理想的です。現在のInfiniBandネットワークは同一ブロードキャストサブネット(つまりL3ルータを使わない)に限定されているため、IPoIB (IP over InfiniBand)はこの件のよい例です。

ARP IPターゲットベースの監視は上述の例に類似するセットアップにおいてより好ましいと考えます。結合されたインターフェースがルータを通じて外部ネットワークと通信する場合、ローカルリンクステータスではなく、外部IPアドレス群へのアクセシビリティを監視するべきでしょう。EoIB (Ethernet of InfiniBand)で作ったクライアントアクセスネットワークはこの好例です。

0 件のコメント:

コメントを投稿