仮想サーバー構築

【仮想サーバ構築】NICチーミングを設定する!【NIC冗長化】

仮想環境の普及とともにチーミング(ボンディング)技術は、その必要性が薄れてきた昨今ではありますが、仮想化技術では対象出来ないデータ量を扱うような場面では、まだまだ物理環境(チーミング)は健在です。

本来、仮想環境(VmWare Workstation Player)に構築されたサーバーへのNIC冗長化を設定する必要はありません。何故なら、仮想環境には物理ケーブルや物理NICが存在しないからです。

では、なぜ冗長化設定を行うのか?それは、物理サーバーを見据えてのことです。昨今のシステム環境は、技術の進歩に呼応して、流れるデータ量も膨大な量に増え続けています。当初は仮想環境で設計していたシステムが、そのデータ量に耐え切れず、急遽、物理環境(オンプレミス)へ変更すると言ったことが日常的になっています。

この記事では、仮想環境に構築したRHEL7.5サーバーへ、チーミング設定の行っていきます。

チーミングとは

チーミングとは、 コンピュータ内の複数の物理的なネットワークアダプタ(NIC)を、ソフトウェア上で仮想的な一つのアダプタとして一体的に運用することを指します。

ネットワーク上を流れるパケットのサーバへの玄関 (NIC)が壊れてしまうと、それ以降は通信が出来なくなってしまう状態となります。それを防ぐために、予め ネットワークを流れるパケットのサーバへの玄関(NIC) を2つ用意しておきます。

玄関が2つあっても、建物の住所(IPアドレス)は変わりません。

RHEL6までのNIC冗長化は「ボンディング」一択でしたが、RHEL7から「チーミング」が機能として追加されました。オプションとして「Runner(バランシング方式)」や「NICの監視方式」が指定できるようになり、今後のNIC冗長化には「チーミング」が標準で使用されていくことになると思います。

想定する構築環境

チーミング設定を行う前提として、下記の環境を想定しています。

ポイント

  • Webサーバー
    • wb01(冗長化なし)
  • APサーバー
    • ap01(今回の記事での設定対象)、ap02(ap01と同様に設定)
  • DBサーバー
    • db01(ap01と同様に設定)、db02(ap01と同様に設定)

NICチーミングを設定する

NetworkManagerの導入有無確認

RHELへチーミングを設定するために「NetworkManager」の導入有無を確認します。

# yum info NetworkManager

「リポジトリ」が「installed」の為、「NetworkManager」モジュールは導入されています。

本記事では、上記のモジュール「NetworkManager」を使用して、NICチーミングの設定を行っていきます。

NICチーミング構成

本環境のネットワーク構成は下記の通りです。
今後を踏まえて、dbサーバー分まで含めて載せています。

サーバー名ipアドレスnic名categoryteam名runner
ap01192.168.109.151/24
gw:192.168.0.2
ens33public-lanteam0activebackup
ens34
ap02192.168.109.152/24
gw:192.168.0.2
ens33public-lanteam0activebackup
ens34
db01192.168.109.153/24
gw:192.168.0.2
ens33public-lanteam0activebackup
ens34
db02192.168.109.154/24
gw:192.168.0.2
ens33public-lanteam0activebackup
ens34

NICチーミングの負荷分散方式

負荷分散に固有の機能は、「ランナー」と呼ばれる別のコードユニットによって実行されます。RHEL7.5では、下記の「runner(ランナー)」が使用可能です。

RHEL7.5で使用可能なランナー

  • broadcast
    データは全ポートで送信されます
  • round-robin (デフォルト)
    データは全ポートで順番に送信されます
  • active-backup
    1 つのポートまたはリンクが使用され、他はバックアップとして維持されます
  • loadbalance
    アクティブ Tx 負荷分散と BPF ベースの Tx ポートセレクターを使用
  • lacp
    802.3ad リンクアグリゲーション制御プロトコルを実装

本記事では、一方を稼働系、他方を待機系の「FT(フォールトトレランス)」仕様として冗長化の設定を行います。ランナーには「active-backup」を設定します。

NICチーミングの設定

本記事では、代表サーバーとして「ap01」サーバーへNICの設定を行っていきますが、他のサーバーも必要に応じてNICの設定を行います。

チーミング設定の流れ

  • チームの追加
  • チームアドレスの設定
  • スレイブNICの追加
  • チームのリンクアップ
  • チーム「team0」の状態確認
  • 負荷分散方式の設定
  • 動作確認
  • ルーティングテーブルの確認

① チームの追加

チーム名「team0」を追加します。

# nmcli c add type team ifname team0 con-name team-team0

「team0」を追加

チームの解除

チームを解除(削除)したい場合は下記のコマンドでチームを解除します。

# nmcli c del team-team0

チーミング設定ファイルは「/etc/sysconfig/network-scripts/」配下へ作成されます。既に「team0」のスレイブとして「ens33」「ens34」が紐づけられている状態となっていることが分かります。その場合は、下記のコマンドで既に紐づけられている「ens33」「ens34」を一旦削除します。

# 既にスレイブとして紐付けられている「ens33」を解放する。
# nmcli c del team-slave-ens33

# 既にスレイブとして紐付けられている「ens34」を解放する。
# nmcli c del team-slave-ens34

スレイブが削除されているのが分かります。

誤って、同一名のNICをスレイブとして設定すると「NetworkManager」は、新規のスレイブとしてそのまま追加してしまいます。

不具合のもとになりかねないので、上記の手順で整理しておきましょう。

初期状態へ戻ったことを確認できたら、再度チーミングの設定をやり直します。

② チームアドレスの設定

チームアドレス「192.168.109.151/24」を追加します。

# nmcli c mod team-team0 ipv4.method manual ipv4.address "192.168.109.151/24"

「team0」 へIPアドレスを設定

ゲートウェイの設定を行う場合は、末尾に「ipv4.gateway ""」を追加して設定します。

注意ポイント

本環境は仮想環境の為、ゲートウェイの設定は必要ありません。実際の商用プロジェクトの場合は、セグメントが複数に分かれる為、ゲートウェイの設定を行います。デフォルトゲートウェイは、1ノードに対し1つのみ設定します。

③ スレイブNICの追加

スレイブとなるNICを追加します。

「ens33」「ens34」を「team0」のスレイブNICとして追加します。

# nmcli c add type team-slave ifname ens33 con-name team-slave-ens33 master team-team0

「ens33」を「team0」のスレイブに追加

# nmcli c add type team-slave ifname ens34 con-name team-slave-ens34 master team-team0

「ens34」を「team0」のスレイブに追加

④ チームのリンクアップ

作成した「team0」を外部と疎通させるためにリンクアップします。

# nmcli c down team-team0
# nmcli c up team-slave-ens33
# nmcli c up team-slave-ens34
# nmcli c up team-team0

1行名:追加した「team0」は、作成時点でリンクアップしています。後から追加したスレイブNIC「ens33」「ens34」を認識させるため、一度 「team0」 をリンクダウンします。
2-3行目:追加したスレイブNIC「ens33」「ens34」をリンクアップ。
4行目:リンクダウンした 「team0」 を再リンクアップします。

追加した 「ens33」「ens34」 を有効化

⑤ チーム「team0」の状態確認

ここまでに作成した「team0」の状態を確認します。

# teamdctl team0 state

追加した 「ens33」「ens34」 が「team0」のスレイブとして機能している状態

先ほど追加した「ens33」「ens34」がスレイブとして機能していることが分かります。

現在のRunnerは「roundrobin」となっていますので、このままでは「NIC」に障害が起きた際に動作が不安定になってしまいます。

⑥ 負荷分散方式の設定

Runnerを「activebackup」へ変更します。

# nmcli c mod team-team0 team.config '{"runner":{"name":"activebackup"}}'

ちなみにコマンドを実行しても、特に反応はありません。Runnerを設定した後は、設定内容を反映するために再起動(リンクダウン-リンクアップ)する必要があるため「④ チームのリンクアップ」を再度実行します。

Runnerが「activebackup」へ変更されたか再度確認します。

# teamdctl team0 state

Runnerが「activebackup」に変更された状態

⑦ 動作確認

「ens33」をリンクダウンして、activeポートは「ens34」へスイッチすることを確認します。

# nmcli c down team-slave-ens33

「ens33」のリンクダウン事項後、activeポートが「ens34」へスイッチしている

メモ

必要に応じて残りのサーバーへ(ap02、db01、db02)も同様の設定を行いチーミングを設定していきます。

⑧ ルーティングテーブル の確認

最後にルーティングの設定を確認します。

# route

正しく設定が完了していれば「ルーティングテーブル」は下記の様に設定されています。

デフォルトゲートウェイの確認

インターフェイス「team0」が、デフォルトゲートウェイとして一番上に並んでいれば正常に設定がされています。

今回設定したチーミングの設定ファイルは「/etc/sysconfig/network-scripts/」配下へ作成されます。

以上でチーミングの設定は完了です。

よく読まれている記事

1

Shellとは? Shellとは、人間の理解できる言葉を機会へ伝えるプログラムです。 Linux環境でコマンドプロンプト画面を開いているとき、常にShellは起動している状態です。 「Shell」とは ...

2

Linuxは主にサーバー用として利用されるOSです。大規模な基幹システムの開発者、ロボットや家電開発等の組み込み系エンジニア、ネットワーク機器やデータベースに携わるインフラエンジニアは触れることが多い ...

3

プログラミング言語を習得しようと思った時、必ずと言っていいほど候補として挙げられるのが「Java」というプログラミング言語です。 「Java」は、現在日本で最も使われている言語であり、非常に人気のある ...

4

この記事は、Linuxについて勉強している初心者の方向けに「Shellスクリプト」について解説します。最後まで読んで頂けましたら、Shellスクリプトはどのような役割を担っているのか?を理解出来るよう ...

-仮想サーバー構築