スイッチングハブの冗長化
リンクアグリゲーション(IEEE802.3ad)
機器間(スイッチ⇔スイッチ、スイッチ⇔サーバ)で、複数本の物理リンクを集約して1つの論理リンクを構成し、冗長化とトラフィック分散、帯域幅の拡張を実現する仕組み。IEEE802.3adでLACP(Link Aggregation Control Protocol)として標準化されている。リンクアグリゲーショングループ内のすべての物理ポートは、同一転送速度かつ全二重である必要があり、物理ポートは複数のグループに所属できない。また、三つ以上の機器間でリンクアグリゲーショングループは構成できない。
LACPでは機器間で定期的(高速レート:1秒、低速レート:30秒)に情報(ポートIDや状態など)を交換する。LACPの宛先MACアドレスは「01-80-C2-00-00-02」(フラッディングされないマルチキャストアドレス)、送信元MACアドレスは物理ポートのMACアドレス、タイプ領域の値は「0x8809」。
フレームは、宛先MACアドレス、送信元MACアドレス、宛先IPアドレス、送信元IPアドレスの各アドレス情報に基づいて、複数の物理リンクに振り分けられる。クライアントからサーバへは送信元MACアドレス、サーバからクライアントへは宛先MACアドレスで振り分けると効果的。
![]() |
| リンクアグリゲーションの構成例 |
スパニングツリープロトコル(IEEE802.1D)
信頼性の向上には迂回ルートが有効だが、迂回ルートはトポロジーの観点からするとループ構成になる。スパニングツリープロトコル(STP:Spanning Tree Protocol)を有効にしなければ、ブロードキャストフレームがループ内を循環し続け、「ブロードキャストストーム」という輻輳状態に陥る。
IEEE802.1Dで規格化されたSTPが有効なネットワークでは、特定のポートがブロックされ、論理的にはツリー上のトポロジー(スパニングツリー)を形成する。
STPでは、ブリッジ間で定期的にBPDU(Bridge Protocol Data Unit)フレームを交換し、ループ発生の検出や障害発生時の経路の切り替えを行う。
各ブリッジは、以下の手順でスパニングツリーを構成する
- ルートブリッジの決定
- ルートポート、代表ポート、オルタネートポートの決定
- スパニングツリーの維持と障害検出
まず、スパニングツリーのルートノードにあたるルートブリッジを決定する。ブリッジIDが最も小さいブリッジがルートブリッジになる。各ブリッジは起動すると、互いにBPDUを送信し合い、ブリッジIDを比較する。自身がルートブリッジでないとわかったブリッジは、ルートブリッジへのコストなどを再計算して、ほかのブリッジにBPDUを送信する。このプロセスを経て最終的にルートブリッジが決定する。
ブリッジID
以下はブリッジIDのフォーマット
![]() |
| ブリッジID |
- ブリッジプライオリティ
デフォルトは32768(0x8000)で、任意に変更可能
- MACアドレス
ブリッジがポートごとに持つMACアドレスから一つ選ばれる。通常は最も小さい値
次にルートポート、代表ポート、オルタネートポートが決定される。パスコスト、ブリッジID、ポートIDに基づき、いずれかになる。
| ポート種別 | 説明 |
|---|---|
| ルートポート (root port) |
ブリッジの中で、ルートブリッジへのコスト※が最小のポート。ルートポートの候補が複数ある場合は、送信元ブリッジのブリッジIDが小さい方、(同一ブリッジの場合は)送信元ポートIDの小さい方が選出される。ただし、ルートブリッジはルートポートを持たない |
| 代表ポート (designated port) |
ブリッジを収容しているセグメントの中で、ルートブリッジへのコスト※が最小のポート。代表ポートをもつブリッジは、そのセグメントの代表ブリッジとなる。代表ポートの候補が複数ある場合は、送信元ブリッジIDの小さい方、(同一ブリッジの場合は)送信元ポートIDの小さい方が選出される。通常動作時、代表ブリッジはルートブリッジからBPDUを受信すると、パスコストなどを適切な値に更新してから、代表ポートを通じてBPDUを送信する |
| オルタネートポート (alternate port) |
ルートポートでもなく、代表ポートでもないポート。ブリッキングポートともいう。論理的にブロックされた状態になり、データフレームは送受信しない。BPDUは送信しないが、受信だけは行う |
※ルートブリッジへのコストはルートブリッジから当該ブリッジに至るまでの経路のパスコストを加算したもの
※「送信元ブリッジ」とは、ルートブリッジから自分に至る経路の中で、自分と接続しているブリッジ(自分の直前にあるブリッジ)を指す
※「送信元ポート」とは、送信元ブリッジの中で、自分と接続しているポートを指す
ポートID
以下はポートIDのフォーマット
![]() |
| ポートID |
- ポートプライオリティ
デフォルトは128(10進表記)で、任意に変更可能
- ポート番号
ポートの物理的な番号
パスコスト
パスコストはルートブリッジまでの距離を表す
| 帯域幅 | コスト値 |
|---|---|
| 10Gbps | 2 |
| 1Gbps | 4 |
| 100Mbps | 19 |
| 10Mbps | 100 |
スパニングツリーの構成例
![]() |
| スパニングツリーの構成例 |
スパニングツリーが完成した後は、ブリッジはBPDUをやり取りして(Hello時間:デフォルトで2秒)スパニングツリーを維持する。直接接続されたリンクのダウンを検出するか、最大エージ時間(BPDUを受信できない期間の許容値:デフォルトで20秒)が経過してもBPDUわれるを受信できない、他新たなBPDUを受信すると、障害が発生したと判断し、スパニングツリーの再構成が行われる。ポートは次のように状態遷移する
![]() |
| ポートの状態遷移 |
- ブロッキング状態
データフレームは転送せず、BPDUの受信のみ行う。スパニングツリーの再計算を行うとき、転送状態のポートもブロッキング状態になる。BPDU受信の結果、ルートポートまたは代表ポートになり得ると判断すれば、リスニング状態に遷移する
- リスニング状態
転送遅延時間の期間中、BPDUを送受信し合い、スパニングツリーの計算を行っている状態。データフレームは転送しない。オルタネート状態になると判断すればブロッキング状態に遷移し、さもなくば、ラーニング状態へ遷移する
- ラーニング状態
再構成されたスパニングツリーのトポロジーに合わせて、転送遅延時間の期間中、アドレステーブルの学習を行う。BPDUを送受信し合い、データフレームは転送しない
- 転送状態
ルートポートまたは代表ポートのどちらかの状態。BPDUを送受信し合い、データフレームを転送する
スパニングツリーが完成することをコンバージェンス(収束)という。収束までの経過時間はデフォルトで50秒
最大エージ時間(20秒)+転送遅延時間(50秒)+転送遅延時間(50秒)=50秒
STPには他に、IEEE802.1D:2004で規格化されたSTPを高速化したRSTP(Rapid Spanning Tree Protocol:高速スパニングツリープロトコル)、IEEE802.1sで規格化されたVLANごとにスパニングツリーに対応したMSTP(Multiple Spanning Tree Protocol)がある
ルータの冗長化
VRRP
VRRP(Virtual Router Redundancy Protocol)は、同一サブネット内の複数台のルータをグループ化し、1台の仮想ルータ(Virtual Router)を構成できるプロトコル。仮想ルータを構成する各ルータは次のパラメタを共有する
- VRID
仮想ルータを識別するID。値は「0~255」
- 仮想MACアドレス
仮想ルータへのARP要求に対して返答されるMACアドレス。値は「00-00-5E-00-01-{VRID}」
- 仮想IPアドレス
仮想ルータのIPアドレス。クライアントのデフォルトゲートウェイに設定するIPアドレス
以下のパラメタは各ルータが個別にもつ
- 優先度
値は1~255(10進表記)。デフォルトは「100」
仮想IPアドレスと物理インタフェースのIPアドレスが同じ場合、優先度は自動的に「255」になる(優先マスタルータ)。ほかのルータには「1~254」の優先度を設定する。優先度「0」は、マスタルータが(シャットダウンなどにより)仮想ルータから離脱を通知するときに使用する
VRRPでは、ルータの同一インタフェースに複数のVRIDを設定でき、同一サブネットに複数の仮想ルータを稼働させることができる。仮想ルータは1台の「マスタルータ」と、1台以上の「バックアップルータ」から構成される。
| ルータ種別 | 内容 |
|---|---|
| マスタルータ | 仮想IPアドレスと仮想MACアドレスをもつルータとして振る舞い、仮想IPアドレスへのARP要求に対して仮想MACアドレスを返答する。IPパケットを受信したら、自身のルーティングテーブルを用いてルーティングする。また、自分の優先度を格納したVRRP広告パケットを定期的に送信し、バックアップルータに自らの健在を知らせる。自分より高い優先度をもつ広告パケットを受信した場合は、バックアップルータになる |
| バックアップルータ | 仮想ルータとしての動作は行わずに、VRRP広告パケットを監視する。広告パケットが一定期間途絶えると、マスタルータに障害が発生したものと判断し、新たなマスタルータの選出プロセスに入る。その結果、バックアップルータの中で最も高い優先度をもつルータがマスタルータになる。(通常は、プリエンプトモードが有効になっているので)自分より低い優先度を持つ広告パケkットを受信した場合は、自らをマスタルータに移行すべく選出プロセスに入る |
マスタルータはVRRP広告パケット定期的に送信する。VRRP広告パケットは、プロトコルスタック上は、IPパケットの上位層に位置する。
以下はVRRPパケットの主な仕様
| MACヘッダ/IPヘッダ | 宛先MACアドレス | VRRP用のIPマルチキャストアドレス(224.0.0.18)を、IANA用のマルチキャストアドレス・ブロック(00-00-5E)にマッピングした値(00-00-5E-00-00-12) |
|---|---|---|
| 送信元MACアドレス | 仮想MACアドレス | |
| 宛先IPアドレス | VRRP用のIPマルチキャストアドレス(224.0.0.18) | |
| 送信元IPアドレス | 実インタフェースのIPアドレス | |
| プロトコル番号 | 112(0x70)(IPヘッダ内のプロトコル番号) | |
| ペイロード | VRID | マスタルータに設定されたVRID |
| 仮想IPアドレス | マスタルータに設定された仮想IPアドレス | |
| 優先度 | マスタルータに設定された優先度 |
VRRPの動作例
![]() |
| VRRPのネットワーク構成例 |
VRRPの設定例
| ルータ | インタフェース | 実IPアドレス | 実MACアドレス | VRID | 仮想IPアドレス | 優先度 |
|---|---|---|---|---|---|---|
| Ra | eth-x | IPa-x | MACa-x | x | IP-x | 200 |
| eth-y | IPa-y | MACa-y | y | IP-y | 200 | |
| Rb | ethb-x | IPb-x | MACb-x | x | IP-x | 100 |
| eth-y | IPb-y | MACb-y | y | IP-y | 100 |
- 正常時、サブネットX、Yにおいて、ルータRa(優先度200)がマスタルータ、ルータRb(優先度100)がバックアップルータとして動作している。クライアントのデフォルトゲートウェイは、仮想IPアドレスを設定
- RaはVRRP広告を定期的に送信する。スイッチングハブは、仮想MACアドレスがRa側のポートにあることを学習してMACアドレステーブルを更新する
- サブネットX側のクライアントが、デフォルトゲートウェイを超えてサブネットYのクライアントにパケットを送信するとき、ARP要求を送信する。Raはこれに仮想MACアドレスを返答する(クライアントのARPテーブルにキャッシュされていれば、ARPは送信されない)。次に、仮想MACアドレス宛にフレームを送信する。途中経路のスイッチングハブは、このフレームをRaあてにフォワーディングする
- Raがダウンする。サブネットX、YともにVRRP広告が途絶えるため、それぞれのサブネットでRbはマスタルータに移行する
- RbはVRRP広告を定期的に送信する。スイッチングハブは仮想MACアドレスがRb側のポートにあることを学習し、MACアドレステーブルを更新する
- サブネットXのクライアントが、デフォルトゲートウェイを超えてサブネットYのクライアントにパケットを送信するとき、ARP要求を送信する。Rbは仮想MACアドレスを返答する(クライアントのARPテーブルにキャッシュされていれば、ARPは送信されない)。次に仮想MACアドレス宛にフレームを送信する。途中経路のスイッチングハブは、このフレームをRbあてにフォワーディングする
- Raが復旧すると、RaはRbからのVRRP広告を受信する。自分より低い優先度(100)が格納された広告パケットを受信したので、Raはマスタルータに移行するため、サブネットX、YそれぞれにVRRP広告を送信する
- RbはRaからのVRRP広告を受信する。自分より高い優先度(200)が格納された広告パケットを受信したので、Rbはバックアップルータに移行し、VRRP広告の送信をやめる
構成例では、複数のインタフェースでVRRPを動作させている。マスタルータ(Ra)の1つのインタフェース(例えばeth-x)がダウンしたとき、当該インタフェース上の仮想ルータはバックアップルータに遷移する。しかし、ダウンしたインタフェース側のネットワーク(X)にルーティングできない以上、正常なインタフェース(eth-y)も、マスタルータとして機能すべきでない。そこで、トリガ機能により、自分の優先順位を下げることで、正常なインタフェース上の仮想ルータもバックアップルータに遷移する。
以下はトリガの設定例
| ルータ | インタフェース | 優先度 | 監視インタフェース | 障害検出時の優先度 |
|---|---|---|---|---|
| Ra | eth-x | 200 | eth-y | 99 |
| eth-y | 200 | eth-x | 99 | |
| Rb | eth-x | 100 | eth-y | 100 |
| eth-y | 100 | eth-x | 100 |
- Raのインタフェースeth-xがダウンする。トリガが作動し、eth-yの優先順位が200から99に移行する
- サブネットXでは、VRRP広告が途絶えるため、VRRPの動作に従い、Rbのインタフェースeth-x上の仮想ルータがマスタルータに昇格する。その後、Rbは優先度100を格納したVRRP広告を送信する
- サブネットYでは、Raから優先順位99を格納したVRRP広告が送信される。RbはRaからのVRRP広告を受信する。Rbは自分の優先度100より低い優先度99が格納された広告パケットを受信したことにより、VRRPの動作に従い、Rbはマスタルータに移行する。その後、Rbは、優先度100を格納したVRRP広告を送信する
- サブネットYでは、RaはRbからのVRRP広告を受信する自分より高い優先度100が格納された広告パケットを受信したので、Raはバックアップルータに移行し、VRRP広告の送信をやめる
- 障害対応の後、Raのインタフェースeth-xが復旧する。その結果、eth-x、eth-yの優先順位が99から元の200に移行する
- サブネットXでは、RbはRaからのVRRP広告を受信する。自分より高い優先度200が格納された広告パケットを受信したので、Rbはバックアップルータに移行し、VRRP広告の送信をやめる
- サブネットYでも、同様に、RbはRaからのVRRP広告を受信する自分より高い優先度200が格納された広告パケットを受信したので、Rbはバックアップルータに移行し、VRRP広告の送信をやめる
サーバの冗長化
負荷分散装置
負荷分散装置のIPアドレスを、Webサーバの公開アドレスとしてDNSに登録する。外部クライアントからのリクエストを受信すると、負荷分散装置はプロキシサーバのように振る舞う。振り分け先のWebサーバを決定し、宛先IPアドレスをそのサーバのIPアドレスに変換して、リクエストを転送する。負荷分散装置はサーバのヘルスチェック機能や、セッション維持機能を備えている
![]() |
| 負荷分散装置の構成例 |
以下は、主なヘルスチェック方式
| ヘルスチェック方式 | 内容 |
|---|---|
| pingチェック | pingを使用し、サーバをIPアドレス単位、ネットワーク層レベルでチェックする |
| ポートチェック | TCPコネクション確立を試みることによって、サーバをポート単位、トランスポート層レベルでチェックする |
| アプリケーションチェック | 特定のアプリケーションコマンドを使用し、リクエストとレスポンスの内容をチェックする |
以下は、主な振り分け方式
| 振り分け方式 | 内容 |
|---|---|
| ラウンドロビン | セッションごとにサーバへ均等に振り分ける。すべてのサーバが同数のコネクションを処理する |
| 比重 | あらかじめサーバに比重(レシオ値)を設定し、その割合に応じて振り分ける |
| 優先度 | あらかじめサーバに優先度を設定し、最も優先度の高いサーバに振り分ける。接続コネクションの上限値を超過するか、ヘルスチェックによりダウンと判断された場合、次の優先度をもつサーバへ振り分ける。同じ優先度をもつサーバ間はラウンドロビンにより振り分ける |
| 最短レスポンス時間 | 最もレスポンスが早いサーバへ振り分ける。サーバ間の負荷を均等化できる。ただし、レスポンス時間を定期的に計測している場合は、計測時は負荷が小さくても、その後もそうであるとは限らないので、完全に均等化できるわけではない |
| 最小コネクション数 | 最もコネクション数の少ないサーバへ振り分ける。おおむね、サーバの負荷を均等化することができる。ただし、コネクション当たりのデータ転送量の偏りが大きい場合、均等化できない |
| ルール | 一定のルールに基づいて、特定のサーバに振り分ける。Cookieに格納されたセッションIDに基づいて負荷分散を行う。ほかの例として、同時セッション数が閾値を超えた場合、Sorryサーバに振り分け、ユーザには「ただいま混雑しています」の案内ページを表示する |
DNSラウンドロビン
DNSサーバの動作(同じホスト名のAレコードが複数あると、IPアドレスを順番に応答する)を利用した負荷分散方式。
![]() |
| DNSラウンドロビンの構成例 |
単純だが以下のデメリットがある
- 負荷分散装置のような効率的な負荷分散には向かない
- サーバの稼働監視(ヘルスチェック)はできない
- 通信が継続されない
クラスタシステム
クラスタシステムは、サーバで稼働しているアプリケーションの可用性対策。目的によって「HPC(High Performance Computing)クラスタ」と「HA(High Availability)クラスタ」の2つに大別できる
| HPCクラスタ | ||
| HAクラスタ | フェイルオーバークラスタ※ (Active-Standby型) |
共有ディスクタイプ |
| データミラータイプ | ||
| 負荷分散クラスタ (Active-Active型) |
ロードバランスクラスタ | |
| 並列データベースクラスタ | ||
※ディザスタリカバリに対応するには、稼働系と待機系を地理的に離れた場所に設置する必要がある。この方式は、フェイルオーバークラスタのなかでも特に「遠隔クラスタ」といういう
NICの冗長化
NICチーミングは、複数のNICを論理的に1つに束ねる技術。OSからは一つのNICに見える。IEEEで標準化された技術でなく、ベンダ製品によって機能が若干異なる。通常、次のいずれかの構成になる
- アクティブ/スタンバイ構成
チーム内1枚の物理NICをアクティブ、残りの物理NICをスタンバイとする
- アクティブ/アクティブ構成
リンクアグリゲーション(IEEE802.3ad)を動作させ、冗長化と負荷分散の両方を実現する
ネットワーク構成は、チーム内の物理NICを同じスイッチに接続するか、異なるスイッチに接続するかの2種類
![]() |
| NICチーミングのネットワーク構成 |
リンクアグリゲーションは、同一スイッチと同一NICチーム内でのみ使用できる。ただし、スイッチをスタック接続することで、異なるスイッチ間でリンクアグリゲーションを構成できる
![]() |
| スタック接続されたスイッチとの組み合わせ |
NICを冗長化する場合、障害時にNICが確実にフェールオーバするように設計する。
以下の構成例で、リンク③が切断されたとき、スタンバイ側のNICをアクティブに切り替える方法は何通りかある
![]() |
| NICチーミングで冗長化した例 |
一つ目は、NICチーミングでリンクダウンを検知するように設定しておき、リンクステートトラッキング機能を備えたL2SWを使用する方法。リンクステートトラッキングは、下位ポートのリンク状態を、上位ポートのリンク状態に追随させる機能(上位リンクに障害が発生したとき、下位リンクを強制的にリンクダウンさせる仕組み)。リンクステートトラッキングの設定では、各ポートを下位ポート、上位ポート、リンクステートトラッキングを適用しないポートのいずれかに指定できる。また、1個の下位ポートに対応付ける上位ポートの数は、複数指定できる(その場合、すべての上位リンク障害時に、下位リンクが強制的にリンクダウンする)。
| リンクステートトラッキングの設定 |
二つ目は、(ドライバ仕様に依存するが)チーミングしているNICからARP要求パケット(例えば、デフォルトゲートウェイを目標とするARP要求)を定期的に発行して接続性を監視し、ARP応答がなければリンクが切断されたと判断し当該NICを使用しないようにフェールオーバする方法。
三つ目は、(ドライバ仕様に依存するが)チーミングしているNICからブロードキャストパケット(ビーコンと呼ぶ)を定期的に送信して相互に接続性を監視し、リンク切断を検知したら、当該NICを使用しないようにフェールオーバする方法。
以下は、NICだけでなくネットワーク全体を冗長化した例。リンク③~⑦でループが形成されているので、スパニングツリーを設定する。リンク③~⑦に障害があってもNICには影響がないので、NICチーミングはリンクダウンを検知するよう設定しておき、リンク①の障害時だけリンク②側のNICに切り替える
![]() |
| ネットワーク全体を冗長化した例 |












0 件のコメント:
コメントを投稿