web-dev-qa-db-ja.com

Ubuntu 16.04 LTSサーバー上の802.3adボンディング構成ファイル

コマンドラインで手動設定を使用する場合( カーネルの指示 に従って)、ネットワーク接続を適切に設定できます。

# modprobe bonding mode=4 miimon=100
# ifconfig bond0 up
# ip link set eno1 master bond0
# ip link set eno2 master bond0

記録のために、使用されているスイッチはCisco Nexus 2248であり、追加の802.1qレイヤーがあるため、IPアドレスは指定していません(構成ファイルの有無は問題に影響を与えません)。

問題は、正しい/etc/network/interfacesファイルを作成して、起動時にこれを自動的に実行できないことです。 ifenslaveパッケージの異なるバージョン間、特にそのドキュメント間、およびifupの使用時に競合状態を回避する方法について、オンラインでロットの混乱があります。以前のバージョンのUbuntuで機能していたものは、もはや機能しません。そして、systemdがさらに厄介なものにしていたとしても、私は驚かないでしょう。基本的に、何をしようとしても、起動時にスクリプトが動かなくなり、起動プロセスが完了するまでに1〜5分待つ必要があります。

これは私が達成できる最高のものです:

auto lo
iface lo inet loopback

allow-bond0 eno1
iface eno1 inet manual
       bond-master bond0

allow-bond0 eno2
iface eno2 inet manual
       bond-master bond0

auto bond0
iface bond0 inet manual
       bond-mode 4
       bond-slaves eno1 eno2
       bond-miimon 100

ブート時にbond0を1分間停止させます(bond0は少なくとも1つのスレーブが起動するのを待っているため、発生しないため、タイムアウトしないため)、システムが起動すると、ifup eno1が機能し、bond0を使用します正常に動作し始めます。

auto eno1を指定すると、ブートプロセスが5分間停止し、bond0が適切に起動されず、ifdown eno1のロックを待機しているため、/run/network/whereverを使用しようとするとスタックします(正確なファイルを覚えておらず、これを再起動しました。マシンはすでに十分に頻繁にあります)、これは、はい、私は競合状態に遭遇し、ifupがeno1で永久にスタックしていることを示しているようです。

最新のUbuntuで実用的なソリューションを持っている人はいますか?

4
To마SE

16.04(linux 4.4.0-22)で動作するセットアップが非常に似ています。

LACPレートと1G(eno1 +)対10G SFP +(eno49 +)を除いて、最大の違いはauto bond0

# /etc/modprobe.d/bonding.conf
alias bond0 bonding
    options bonding mode=4 miimon=100 lacp_rate=1

これらのオプションの一部は冗長な場合があります。

# /etc/network/interfaces
auto eno49
iface eno49 inet manual
    bond-master bond0

auto eno50
iface eno50 inet manual
    bond-master bond0

auto bond0
iface bond0 inet static
    address 10.0.0.1
    netmask 255.255.255.0
    bond-slaves eno49 eno50
    bond-mode 4
    bond-miimon 100
    bond-lacp-rate 1

起動中にストールが発生しません。 systemctl restart networkingは数秒の短い待機をもたらしますが、それ以上のものはありません。

$ systemd-analyze
Startup finished in 2.344s (kernel) + 1.658s (userspace) = 4.002s
2
timss

スレーブポートが常にそれを構成する準備ができていない場合でも、システムがボンドインターフェースを起動できるようにする必要があります。「bond-slaves none」はそれを行います。だから正しい設定例:

allow-hotplug eno1
iface eno1 inet manual
    bond-master bond0

allow-hotplug eno2
iface eno2 inet manual
    bond-master bond0

auto bond0
iface bond0 inet manual
    bond-mode 802.3ad
    bond-miimon 100
    bond-lacp-rate fast
    bond-slaves none
    bond-xmit_hash_policy layer2+3
2
ryci.us

私も16.04でボンディングの設定を行っていますが、私の設定は12.04以降、Ubuntuで問題なく動作します。

私の解決策は@timssの解決策とほとんど同じですが、/ etc/modprobe.d/bonding.confをいじる必要はありませんでした。また、時間の経過に伴って必要となるいくつかの詳細があり、以下に含めてコメントします終わり。

以下では、bond0に結合されたインターフェースeth2-eth5があります。

auto eth2
iface eth2 inet manual
        bond-master bond0

auto eth3
iface eth3 inet manual
        bond-master bond0

auto eth4
iface eth4 inet manual
        bond-master bond0

auto eth5
iface eth5 inet manual
        bond-master bond0

auto bond0
iface bond0 inet manual
        hwaddress ether 00:00:00:00:00:00 <= ADD MAC of one of the bonded interfaces here
        bond-slaves eth2 eth3 eth4 eth5
        bond-miimon 100
        bond-mode 802.3ad
        bond-lacp-rate 1
        xmit_hash_policy layer3+4

コメント:

  1. 「hwaddress ether」:インターフェースを結合すると、結合されたインターフェースのMACアドレスは、結合されているインターフェースの1つのMACアドレスと同じになりますが、システムが再起動されるたびに変更される可能性があります。サーバーが既知のMACアドレスを持っていると便利だと思うので、永続的な方法でインターフェイスの1つのMACアドレスに設定します。
  2. "xmit_hash_policy":このオプションに関するドキュメントを読んでください。これは、結合インターフェースのパフォーマンスに非常に大きな影響を与える可能性があります。
1
mbello

醜いハックを思いつきましたが、クレジットは取得しませんが、適切な回答/修正を待つ間、人々が始めて、より重要なことを行えるようになることを願っています。

auto bond0
iface bond0 inet manual
        pre-up modprobe bonding mode=4 miimon=100
        pre-up ifconfig bond0 up
        pre-up ip link set eno1 master bond0
        pre-up ip link set eno2 master bond0
        up /bin/true
        down /bin/true
        post-down ip link set eno2 nomaster
        post-down ip link set eno1 nomaster
        post-down ifconfig bond0 down
        post-down rmmod bonding

ほとんどの場合、ifupスクリプト全体をオーバーロードします。 ifdown bond0を実行するとエラーメッセージが表示されますが、仕様上、ifdownは残りのスクリプトを実行し続け、システムはクリーンな状態になるため、ifup/ifdownを循環させることができるため、修正せざるを得ません。 。

また、スレーブはマスターのスクリプトで処理されるため、設定ファイルでそれらを宣言する必要はありません。

0
To마SE