Linuxはデュアルネットワークカードボンドとドライバーインターフェースを使用する

Linuxはデュアルネットワークカードボンドとドライバーインターフェースを使用する

債券とは何か

NIC ボンドは、実稼働シナリオでよく使用されるテクノロジーです。複数の NIC を 1 つの論理 NIC に結合して、ローカル NIC の冗長性、帯域幅の拡張、負荷分散を実現します。

適用可能なシナリオ

サーバーの 2 つのネットワーク カードを結合する必要があり、結合後、異なるトラフィックを伝送するために、ネットワーク カードを異なるネットワーク セグメントのアドレスで構成する必要があります。このとき、サブインターフェイス方式を使用できます。

実験シナリオ

装置

  • サーバー: Server_A
  • コアスイッチ: Switch_A、Switch_B

スイッチ接続モード: スタッキング

サーバーネットワークカード: enp176s0f0、enp176s0f1 (ボンドとして)

IPセグメンテーション

  • 事業セグメント
    VLAN 201: 10.10.51.0/24
  • パブリックネットワーク
    VLAN 401: 111.20.200.88/27

必要とする

サーバー Server_A に接続された 2 つのコア スイッチ Switch_A と Switch_B はスタックされています。Server_A の enp176s0f0 および enp176s0f1 光ポートは、それぞれ Switch_A および Switch_B と相互接続されています。enp176s0f0 と enp176s0f1 を結合し、アドレス 10.10.51.16 でビジネス トラフィックを伝送し、アドレス 111.20.200.90 でパブリック ネットワーク トラフィックを伝送し、スイッチ ポートを eth-trunk としてバインドして VLAN201 および VLAN401 を透過的に伝送する必要があります。

ネットワークカード構成スクリプト

# NetworkManager サービスを停止します systemctl stop NetworkManager.service 
systemctl は NetworkManager.service を無効にします。

# バックアップ cp /etc/sysconfig/network-scripts/ifcfg-enp176s0f0{,.bak}
cp /etc/sysconfig/network-scripts/ifcfg-enp176s0f1{,.bak}

# ネットワーク カードのプロトコルを none に変更し、電源を入れずにデバイスを自動的に起動し、デュアル ネットワーク カードを構成する sed -i 's/BOOTPROTO=dhcp/BOOTPROTO=none/' /etc/sysconfig/network-scripts/ifcfg-enp176s0f0
sed -i 's/ONBOOT=no/ONBOOT=yes/' /etc/sysconfig/network-scripts/ifcfg-enp176s0f0
echo "MASTER=bond0" >>/etc/sysconfig/network-scripts/ifcfg-enp176s0f0
echo "SLAVE=yes" >>/etc/sysconfig/network-scripts/ifcfg-enp176s0f0

sed -i 's/BOOTPROTO=dhcp/BOOTPROTO=none/' /etc/sysconfig/network-scripts/ifcfg-enp176s0f1
sed -i 's/ONBOOT=no/ONBOOT=yes/' /etc/sysconfig/network-scripts/ifcfg-enp176s0f1
echo "MASTER=bond0" >>/etc/sysconfig/network-scripts/ifcfg-enp176s0f1
echo "SLAVE=yes" >>/etc/sysconfig/network-scripts/ifcfg-enp176s0f1

# ネットワークカード bond0 を構成する
エコー "DEVICE=bond0
タイプ=イーサネット
ONBOOT=はい
BOOTPROTO=static" >/etc/sysconfig/network-scripts/ifcfg-bond0

# モジュールファイルを書き込みます。結合モードはモード 0 です。
echo "alias bond0 結合
オプション bond0 miimon=100 mode=0" >/etc/modprobe.d/bond.conf
# モジュール modprobe ボンディングをロードする

# ドライバーインターフェース bond0.201
エコー "DEVICE=bond0.201
タイプ=Vlan
PHYSDEV=ボンド0
ONBOOT=はい
BOOTPROTO=静的
REORDER_HDR=はい
IPアドレス=10.10.51.16
ゲートウェイ=10.10.51.1
ネットマスク=255.255.255.0
DNS1=114.114.114.114
DNS2=8.8.8.8
VLAN=はい
VLAN_ID=201" >/etc/sysconfig/network-scripts/ifcfg-bond0.201

# ドライバーインターフェース bond0.401
エコー "DEVICE=bond0.401
タイプ=Vlan
PHYSDEV=ボンド0
ONBOOT=はい
BOOTPROTO=静的
REORDER_HDR=はい
IPアドレス=111.20.200.90
ゲートウェイ=111.20.200.89
ネットマスク=255.255.255.0
DNS1=114.114.114.114
DNS2=8.8.8.8
VLAN=はい
VLAN_ID=401" >/etc/sysconfig/network-scripts/ifcfg-bond0.401

# モジュールをロードし、ホストを再起動します modprobe 8021q
リブート

要点

スイッチ側がeth-trunkで始まる場合、サーバー側はサブインターフェースで始まる必要があります。

スイッチ側とサーバー側の両方で LACP ネゴシエーションを有効にするか無効にするかのどちらかにする必要があります。そうでない場合、ポートは異なります。

スイッチの eth-trunk ポートの設定例

[HH2B108-H01-2-HW9006X-SW001-Eth-Trunk12]これを表示する 
#
インターフェース Eth-Trunk12
ポートリンクタイプトランク
ポート トランク 許可パス VLAN 201 401
#
戻る

サーバー側はボンドモード4を使用してLACPプロトコルを開始します。例は次のとおりです。

 # /etc/modprobe.d/bond.conf の詳細
 エイリアス bond0 結合
 オプション bond0 miimon=100 mode=4 lacp_rate=1

サブインターフェース設定ファイルの「DEVICE=bond0.401」の VLAN 番号は、透過的に送信される必要がある VLAN 番号と一致している必要があります。

サブインターフェースを設定したら、設定を有効にするためにサーバーを再起動する必要があります。 ! !

要約:

上記はこの記事の全内容です。この記事の内容が皆さんの勉強や仕事に一定の参考学習価値を持つことを願っています。ご質問があれば、メッセージを残してコミュニケーションしてください。123WORDPRESS.COM を応援していただきありがとうございます。

以下もご興味があるかもしれません:
  • Linux システムのデュアル ネットワーク カード バインディング構成の実装
  • Linux デュアル ネットワーク カード バインディング スクリプト メソッドの例
  • Linux でのデュアル ネットワーク カードの Firewalld の設定プロセス (推奨)
  • 負荷分散を実現するための Linux デュアル ネットワーク カード バインディングの詳細な説明
  • Linux でデュアル ネットワーク カードを設定する方法
  • Linux システムでのデュアル ネットワーク カード構成の実践の概要
  • Linuxは、単一のIPをバインドするためにデュアルネットワークカードを実装するためにボンドを使用します。サンプルコード

<<:  MySQLデータベースの一般的な最適化操作のまとめ(経験共有)

>>:  Ajax jQueryはページ上のdivの更新効果を実現します

推薦する

「fsck」を使用して Linux のファイルシステムエラーを修正する方法

序文ファイル システムは、データの保存方法と復元方法を整理する役割を担います。 いずれにせよ、時間の...

MySQL が自動的に再起動する問題の解決方法

序文最近、テスト環境で MySQL データベースが自動的に再起動し続ける問題が発生しました。原因は、...

Linux の一般的な Java プログラム起動スクリプトのコード例

シェルを起動する頻度は非常に低いですが。 。 。しかし、書くたびに、多くの jar ファイル パスを...

MySQL で null 値と空文字 ('') を区別する

日常の開発では、データベースの追加、削除、変更、クエリが一般的に行われるため、Mysql で NUL...

VSCode+CMake+Clang+GCC 環境構築チュートリアル (Win10 の場合)

大学院入試に備えて、C/C++ を使って基本的なデータ構造とアルゴリズムを実装する予定です。アルゴリ...

Mysql は、デッドロック問題を解決するために kill コマンドを使用します (実行中の特定の SQL ステートメントを強制終了します)。

MySQL を使用して特定のステートメントを実行すると、データ量が多いためにデッドロックが発生し、...

JSはGMTとUTCのタイムゾーンを完全に理解しています

目次序文1. GMT GMTとはGMTの歴史2. UTC UTCとはUTC は次の 2 つの部分で構...

8 JSのreduce使用例とreduce操作方法

reduceメソッドは配列の反復メソッドです。 mapやfilterとは異なり、 reduceメソッ...

Dockerモードで起動したTomcatのホームページにアクセスすると404エラーが発生する

シナリオ: docker で tomcat を起動すると (Alibaba Cloud からダウンロ...

Linux のハードリンクとソフトリンクの原理と使用法の分析

Linux システムには、ファイル共有を解決するために使用できるリンク ファイルと呼ばれる種類のファ...

JavaScript のアンチシェイクとスロットリングの違いと実装

目次1. 手ぶれ補正2. スロットリング3. まとめ序文:フロントエンド開発者には、次の 2 つの要...

MySQL データテーブルのパーティション戦略と利点と欠点の分析

目次なぜパーティションが必要なのでしょうか?パーティショニング戦略パーティションの危険性なぜパーティ...

MySQL の count()、group by、order by の詳細な説明

最近、IM を実行するときに、これらの 3 つのキーワードを同時に使用したときに問題が発生しました。...

MySQLデータベースのストアドプロシージャとトランザクションの違い

トランザクションは、複数の SQL ステートメントの原子性、つまり、それらが一緒に完了するか、一緒に...

dockerでPostgreSQLを実行する方法

1. Dockerをインストールします。参考URL: Docker 入門インストールチュートリアル ...