# バーチャルシャーシスタック（VCS） / 応用

## 応用設定

### トリガー機能を利用したリンクアグリゲーション非対応機器への回線冗長化

VCSグループを運用する場合、マスター・スレーブにまたがるリンクアグリゲーション（ポートトランキング）を利用して、接続先機器との回線を冗長化する構成が一般的ですが、接続先の機器がリンクアグリゲーションをサポートしていない場合はそのような構成をとることができないため、通常RIP、OSPFなどを用いてレイヤー3で冗長化するか、スパニングツリープロトコル（STP）を用いてレイヤー2で冗長化することとなります。
しかし、このようなケースでも、本製品のトリガー機能を利用すれば、RIP、OSPF、STPなどの動的な経路制御・冗長化プロトコルを用いずに、接続先機器との間でアクティブ・スタンバイ型の回線冗長化が可能です。以下では、トリガー機能を利用したリンクアグリゲーション非対応機器への回線冗長化設定を紹介します。
なお、トリガー機能を利用した回線冗長化では障害時にトリガーを用いて回線の切り替えを行っているため、VCS-FFによる高速切り替えは行われません。切り替えに要する時間は構成に依存し、本設定例の構成でメンバーが離脱する場合の所要時間は、約17秒となります。
Note

本応用設定はレジリエンシーリンクありの構成を前提としています。レジリエンシーリンクなしの構成では使用できませんのでご注意ください。レジリエンシーリンクの要件に関する詳細は、導入編の「基本仕様」を参照ください。

#### ネットワーク構成

ここでは次のような構成を想定しています。
リンクアグリゲーション非対応機器（ルーター）とは、vlan100所属のポート1.0.5と2.0.5で接続します。
対向の2ポート（ルーター側の2ポート）は、ルーターのLAN側スイッチポートを想定しています。ルーターにスイッチが内蔵されていない場合は、VCSグループとルーターの間にスイッチをはさむ必要があります。
なおこの構成では、ルーターはリンクアグリゲーションだけでなくスパニングツリープロトコルもサポートしていないものと仮定しています。

#### 監視対象イベントと対応動作

本設定例では、インターフェーストリガーとスタックメンバートリガーを利用して、下記の4つのイベントを検出し、それぞれに対応した動作を自動的に行わせます。

- ルーター接続用ポート1.0.5（正常時アクティブポート）のリンクダウン（インターフェーストリガーで検出）
  → スタンバイしていたポート2.0.5を有効に設定します。

- ルーター接続用ポート1.0.5（正常時アクティブポート）のリンクアップ（インターフェーストリガーで検出）
  → ポート2.0.5を無効化してスタンバイ状態に戻します。

  ポート1.0.5がアップしてから、インターフェーストリガーによってポート2.0.5が無効化されるまでの間、両方のポートがリンクアップしている状態となりますが、ポート1.0.5とポート2.0.5はリンクアグリゲーション（手動設定）のメンバーポートのため、ループなどの通信障害は発生しません。
- VCSメンバーの離脱（スタックメンバートリガーで検出）
  → ポート1.0.5（正常時アクティブポート）とポート2.0.5の両方のポートを有効に設定します。
  両方のポートを有効化するのは、スタックメンバートリガーではどのメンバーが離脱したかを判断できないためです。実際には離脱によりどちらか一方のポートは存在しなくなるため、そのポートに対する有効化のコマンドはエラーとなり、結果的に残っているメンバーのポートだけが有効となります。
  スタックモジュールや両方のスタックケーブルに障害が発生したとき、スレーブは「Disabled Master」状態に遷移してスイッチポートをリンクダウンし、両方が「Active Master」（通常のマスター）となって通信障害が発生するのを防ぎます。また、「Disabled Master」では、Disabled Masterトリガー以外のスタックトリガーは動作しないため、スタックメンバートリガーで両方のポートを有効化しても、「Disabled Master」側ではトリガーが実行されないため、結果的に「Disabled Master」側のポートは有効化されません。

  ※上図はID=1のメンバーが離脱した場合です。
- VCSメンバーの参加（復帰）（スタックメンバートリガーで検出）
  ポート2.0.5（正常時スタンバイポート）を無効に設定します。
  トリガーではどのメンバーが参加したかを判断できないため、正常時はID=1側のポート1.0.5を使用するものとします。

  ※上図はID=1のメンバーが復帰した場合です。

#### 設定手順

以下の例では、VCSの基本設定とVLANの作成、IPアドレスの設定は完了しているものとします。
VCSの基本設定については、導入編を参照してください。また、VLANの設定については、「L2スイッチング」の「バーチャルLAN」をご覧ください。IPアドレスの設定については、「IP」の「IPインターフェース」をご覧ください。また、トリガー関連のコマンドについては、「運用・管理」の「トリガー」をご覧ください。

1. ID=1メンバー側のポート1.0.5を正常時のアクティブポート、ID=2メンバー側のポート2.0.5を正常時のスタンバイポートとします。そのため、初期状態ではポート2.0.5を明示的に無効化して、使用不可に設定しておきます。

       awplus(config)# interface port2.0.5
       awplus(config-if)# shutdown
       awplus(config-if)# exit

2. スパニングツリープロトコルを有効にしている場合（本製品の初期状態ではRSTPが有効）、ルーター接続用の2つのポートはエッジポートに設定しておきます。エッジポートではフォワーディング状態への高速遷移が有効になるため、リンクアップ後すぐに通信が可能となります。

       awplus(config)# interface port1.0.5,port2.0.5
       awplus(config-if)# spanning-tree edgeport
       awplus(config-if)# static-channel-group 1
       awplus(config-if)# exit

3. L2スイッチ接続用の2つのポートにリンクアグリゲーション（手動設定）の設定を行います。L2スイッチ側の対向ポートにも同様の設定をしてください。

       awplus(config)# interface port1.0.9,port2.0.9
       awplus(config-if)# static-channel-group 2
       awplus(config-if)# exit

4. 必要に応じてIPの経路情報を設定してください。ここではデフォルト経路をルーターのLAN側インターフェース（192.168.1.2）に向けます。

       awplus(config)# ip route 0.0.0.0/0 192.168.1.2

5. editコマンドなどを使って、トリガーから呼び出す4つのスクリプトファイルを作成します。なお、以下のスクリプトは実際の構成にあわせてポート番号などを変更してください。
   - ルーター接続用であるポート1.0.5（正常時アクティブポート）のリンクダウンを検出したときに実行するスクリプト「flash:/port1.0.5down.scp」を次の内容で作成します。

         enable
         configure terminal
         interface port2.0.5
         no shutdown

   - ルーター接続用であるポート1.0.5（正常時アクティブポート）のリンクアップを検出したときに実行するスクリプト「flash:/port1.0.5up.scp」を次の内容で作成します。

         enable
         configure terminal
         interface port2.0.5
         shutdown

   - スタックメンバーの離脱を検出したときに実行するスクリプト「flash:/memleave.scp」を次の内容で作成します。

         enable
         configure terminal
         interface port1.0.5
         no shutdown
         interface port2.0.5
         no shutdown

   - スタックメンバーの参加（復帰）を検出したときに実行するスクリプト「flash:/memjoin.scp」を次の内容で作成します。

         enable
         configure terminal
         interface port2.0.5
         shutdown

6. ルーター接続用ポートのリンクアップ・ダウンやスタックメンバーの離脱・参加を検出し、対応するスクリプトを自動実行するため、4つのトリガーを作成します。
   Note

   scriptコマンドではスクリプトファイルの場所をデバイス名付きの絶対パスで指定してください。

   - ルーター接続用ポート1.0.5（正常時アクティブポート）のリンクダウンを検出したときに、スクリプト「flash:/port1.0.5down.scp」を実行するインターフェーストリガー「1」を作成します。

         awplus(config)# trigger 1
         awplus(config-trigger)# type interface port1.0.5 down
         awplus(config-trigger)# script 1 flash:/port1.0.5down.scp
         awplus(config-trigger)# exit

   - ルーター接続用ポート1.0.5（正常時アクティブポート）のリンクアップを検出したときに、スクリプト「flash:/port1.0.5up.scp」を実行するインターフェーストリガー「2」を作成します。

         awplus(config)# trigger 2
         awplus(config-trigger)# type interface port1.0.5 up
         awplus(config-trigger)# script 1 flash:/port1.0.5up.scp
         awplus(config-trigger)# exit

   - スタックメンバーの離脱を検出したときに、スクリプト「flash:/memleave.scp」を実行するスタックメンバートリガー「3」を作成します。

         awplus(config)# trigger 3
         awplus(config-trigger)# type stack member leave
         awplus(config-trigger)# script 1 flash:/memleave.scp
         awplus(config-trigger)# exit

   - スタックメンバーの参加（復帰）を検出したときに、スクリプト「flash:/memjoin.scp」を実行するスタックメンバートリガー「4」を作成します。

         awplus(config)# trigger 4
         awplus(config-trigger)# type stack member join
         awplus(config-trigger)# script 1 flash:/memjoin.scp
         awplus(config-trigger)# exit

7. 以上で設定は完了です。

#### その他

トリガーの情報を確認するには、show triggerコマンドを使います。

    awplus# show trigger
    TR# Type & Details     Description          Ac Te Tr Repeat     #Scr Days/Date
    -------------------------------------------------------------------------------
    001 Interface (port...                      Y  N  Y Continuous  1   smtwtfs
    002 Interface (port...                      Y  N  Y Continuous  1   smtwtfs
    003 Stack member (l...                      Y  N  Y Continuous  1   smtwtfs
    004 Stack member (j...                      Y  N  Y Continuous  1   smtwtfs
    -------------------------------------------------------------------------------

    awplus# show trigger full
    Trigger Configuration Details
    ------------------------------------------------------------
    Trigger ..................... 1
    Description ................. <no description>
    Type and details ............ Interface (port1.0.5 down)
    Days ........................ smtwtfs
    After ....................... 00:00:00
    Before ...................... 23:59:59
    Active ...................... Yes
    Test ........................ No
    Trap ........................ Yes
    Repeat ...................... Continuous
    Modified .................... Fri Jun  4 22:03:19 2010
    Number of activations ....... 0
    Last activation ............. not activated
    Number of scripts ........... 1
      1. flash:/port1.0.5down.scp
      2. <not configured>
      3. <not configured>
      4. <not configured>
      5. <not configured>
    ...

トリガーの起動やトリガーによって実行されたスクリプト内のコマンドはbufferedログに記録されるため、show logコマンドで確認できます。program欄が「TRIGGER」になっているのがトリガーイベント、「IMISH」になっているのがコマンド実行イベントです。

    awplus# show log | begin TRIGGER
    2010 Jun  4 22:07:20 user.notice awplus TRIGGER[25276]: Trigger 1 activated
    2010 Jun  4 22:07:21 user.notice awplus IMISH[25281]: [SCRIPT] enable
    2010 Jun  4 22:07:21 user.notice awplus IMISH[25281]: [SCRIPT] configure terminal
    2010 Jun  4 22:07:22 user.notice awplus IMISH[25281]: [SCRIPT] interface port2.0.5
    2010 Jun  4 22:07:22 user.notice awplus IMISH[25281]: [SCRIPT] no shutdown
    2010 Jun  4 22:07:22 user.notice awplus IMISH[25281]: [SCRIPT] exit
    2010 Jun  4 22:07:25 user.warning awplus NSM[1053]: Port up notification received for port2.0.5

Note

コマンド実行イベントには、トリガースクリプト内のコマンドだけでなく、CLIから入力したコマンドも含まれます。なお、ログに記録されるのは実行に成功したコマンドラインだけです。エラーになったコマンドラインは記録されません。また、コマンド処理部に渡されたコマンドライン文字列がそのまま記録されるため、コマンドを省略形で実行した場合は省略形が記録されます。

スタックメンバートリガーでは、離脱・参加したメンバーがマスター・スレーブのどちらであるかを判断できないため、スタックメンバー離脱時はポート1.0.5とポート2.0.5の両方をリンクアップしています（どちらかのポートは存在しないため無効なコマンドとなります）。また、スタックメンバー参加時は常にポート1.0.5をリンクアップするようにしています。

## スレーブのファイルを操作する

VCS構成時には、以下のコマンドを使用してスレーブのファイルシステムを操作できます。

- copy
- delete
- dir
- edit
- mkdir
- rmdir
- show file

スレーブ上のファイルを指定するときは、通常のローカルファイルパスの代わりに、次の形式を使用してください。前述のコマンドにおいてローカルファイルパスを指定できる箇所なら、どこでもこの形式を使用できます。

`<VCSHOSTNAME>-<MEMBERID>/<ABSOLUTEPATH>
`

ここで、<VCSHOSTNAME>はVCSグループのホスト名（未設定時はawplus）を、<MEMBERID>はスレーブのスタックメンバーID（1～8）を、<ABSOLUTEPATH>は該当メンバーのファイルシステムにおける絶対パス（デバイス名を含む完全なパス）を表します。
Note

<ABSOLUTEPATH>にUSB（デバイス名「usb」）上のパスを指定することはできません。詳しくは次の「注意・補足事項」をご覧ください。

たとえば、VCSグループのホスト名がvcgで、スレーブのIDが2のとき、スレーブ上のファイルflash:/backup/config/sample.cfgは次のように表します。

`vcg-2/flash:/backup/config/sample.cfg
`

なお、<MEMBERID>にマスターのIDを指定した場合は、単に<ABSOLUTEPATH>を指定したのと同じ扱いとなります。
その他の動作や表示内容については、単体構成時と同じです。
ファイル操作の詳細については、「運用・管理」の「ファイル操作」をご覧ください。

#### 注意・補足事項

ファイル操作コマンドにおいて、<ABSOLUTEPATH>にUSB（デバイス名「usb」）を指定することはできません。スレーブに装着されたUSB上のファイルを操作したい場合は、remote-loginコマンドで該当スレーブメンバーにログインしてから操作してください。
たとえば、スレーブ（ID=2）に装着されたUSB上のファイルoncard.cfgをVCSグループ全体で使用したいときは、次のようにします。

1. remote-loginコマンドでスレーブにログインし、スレーブ上でUSBからフラッシュメモリーにファイルをコピーします。

       vcg# remote-login 2
       Type 'exit' to return to vcg.

       AlliedWare Plus (TM) X.X.X xx/xx/xx xx:xx:xx

       vcg-2> enable
       vcg-2# copy usb:/oncard.cfg flash:/

2. exitコマンドでマスターに戻り、スレーブのフラッシュメモリーからマスター（VCSグループ）にファイルをコピーします。

       vcg-2# exit
       vcg# copy vcg-2/flash:/oncard.cfg flash:/