【Cisco】vPCってなに？

# ■vPC（virtual PortChannel）
AWSの方じゃないよ!

1台のデバイスから2台のNexusとの間でポートチャネルを構成可能にする技術（マルチシャーシイーサチャネル）で、MC LAGとも言われています。Catalystでは似たような機能に"VSS"があります。

https://note.com/fscom_japan/n/n336504669db0

LAGやイーサチャネルは1台のポートで冗長をとるものですが、2台のネットワークスイッチをまたいで構成できます。
・STPでブロックされるポートを排除できます。
・全てのアップリンク帯域を利⽤できます。
・リンク/デバイスの障害の際にも、速いコンバージェンスを提供できます。

## 構成要素
### vPC
vPC peerと下位のPort Channelを設定したSwitchとの組み合せ
### vPC peer
vPCを構成するスイッチ
### vPC domain
2台のvPC peerデバイス，関連するリンク（vPC peer-linkなど）で構成されるコンポーネント
### vPC peer-keepalive-link（vPC PK-Link）
vPC peerデバイス間でハートビートを転送するL3リンク（フォールトトレラント）
### vPC peer-link
vPC peerデバイス間の同期リンク※10GE接続
### vPC member port
vPCを形成するポート
### CFS（Cisco Fabric Services Protocol）
vPC peerデバイス間の同期・設定確認に使用するプロトコル
### vPC Role（Primary / Secondary）
vPC peerのどちらがBPDUを処理するかを定義

## 注意点
・vPC VLAN（vPC上に存在するVLAN）以外のVLANを伝送することは推奨されない
・LACP推奨
・Nexus 1台につき、最低2つのポートを使用する
・Point-to-Pointで接続すること
・vPC Peer-Link にはBridge AssuranceとUDLDの設定を推奨
・vPC PK-link と vPC Peer-Link は同じInterfaceで兼用させない
    
# ■設定例
以下のように、SWのmgmtポートがL2で繋がっており、下にホストがLACPでぶら下がっている場合の設定。
管理ネットワークを経由しPeer-Keepaliveを行います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/673840/1b582295-436a-8fd3-e553-d3fb6061dc41.png)


## 1号機設定
### Feature ※vPC，lacpを有効化
```
feature vpc
feature lacp
```
### vPC domain,PK-Link(peer-keepalive-link),Peer-Link設定-------------
```conf
vpc domain 10                                           ###domainは2号機と合わせる。同一のL2リンク内でユニークにする
  role priority 1000                                    ###priorityを2号機の値より小さくする
  peer-keepalive destination 1.1.1.2 source 1.1.1.1     ###mgmtポートに設定されているアドレス。L2SW経由でkeepalive
  peer-switch                                           ###vPC peerデバイス2台を単一のRoot Bridgeとする機能
  delay restore 210                                     ###vPC起動までの待機時間。NWが安定後vPCの切り戻しを行う
  peer-gateway                                          ###vPC peerのRouter MACアドレス宛てパケットをローカルで転送可能とする
  auto-recovery                                         ###vPC peer2台が同時に再起動後に1台だけしか復旧しないようなシナリオで、1台だけでもvPCが稼働出来るようにする機能
  ipv6 nd synchronize                                   ###vPC peer間のND情報を同期させ、Neighbor Discoveryテーブル復元に伴う遅延を解消する
  ip arp synchronize                                    ###vPC peer間のARP情報を同期させ、ARPテーブル復元に伴う遅延を解消する
```
```conf
interface port-channel10
  switchport mode trunk
  vpc peer-link                                         ###渡りで組むPoでpeerlink
  switchport trunk allowed vlan 100-150
  spanning-tree port type network                       ###vpc peer-linkの設定を行うと自動で設定される

interface Ethernet1/17
  switchport
  switchport mode trunk
  switchport trunk allowed vlan 100-150
  rate-mode dedicated                                   ###オプション設定
  channel-group 10 mode active
※Ethernet1/18も同様
```

### vPC member port設定(server向けポート)--------------------------------
```conf
interface port-channel100
  switchport mode trunk
  switchport trunk allowed vlan 100-150
  storm-control broadcast level 0.10
  storm-control action trap
  no lacp graceful-convergence                          ###Nexus以外の機器とLACPで接続する際は、デフォルト有効となっているLACPプロトコル収束の高速化機能 (lacp graceful convergence) を無効にする。
  vpc 100                                               ###memberportに指定。2号機と合わせる

interface Ethernet1/21
  switchport mode trunk
  switchport trunk allowed vlan 100-150
  channel-group 100 mode active
```

## 2号機設定
### Feature ※vPC，lacpを有効化
```conf
feature vpc
feature lacp
```
### vPC domain, PK-Link(peer-keepalive-link),Peer-Link設定--------------------------------
```conf
vpc domain 10                                          ###domainは2号機と合わせる。同一のL2リンク内でユニークにする。
  role priority 2000                                   ###priorityを1号機の値より大きくする
  peer-keepalive destination 1.1.1.1 source 1.1.1.2    ###mgmtポートに設定されているアドレス。L2SW経由でkeepalive
  peer-switch
  delay restore 210
  peer-gateway
  auto-recovery
  ipv6 nd synchronize
  ip arp synchronize
```
```conf
interface port-channel10
  switchport mode trunk
  vpc peer-link                                        ###渡りで組むPoでpeerlink
  switchport trunk allowed vlan 100-150
  spanning-tree port type network                      ###vpc peer-linkの設定を行うと自動で設定される

interface Ethernet1/17
  switchport
  switchport mode trunk
  switchport trunk allowed vlan 100-150
  rate-mode dedicated                                  ###オプション設定
  channel-group 10 mode active
※Ethernet1/18も同様
```

### vPC member port設定--------------------------------
```conf
interface port-channel100
  switchport mode trunk
  switchport trunk allowed vlan 100-150
  storm-control broadcast level 0.10
  storm-control action trap
  no lacp graceful-convergence                          ###Nexus以外の機器とLACPで接続する際は、デフォルト有効となっているLACPプロトコル収束の高速化機能 (lacp graceful convergence) を無効にする。
  vpc 100                                               ###memberportに指定。1号機と合わせる

interface Ethernet1/21
  switchport mode trunk
  switchport trunk allowed vlan 100-150
  channel-group 100 mode active
```

・`role priority`が小さい方がprimaryになる。
・1,2号機ともメンバーポートがもつPortchannelに`vpc 100`とすることで、上記ピアを通じてルートを冗長化できる。


## 障害時の動作
・`memberport`がダウンした場合、片系に切り替わる(vpc roleは切り替わらない)

・`PK-LINK`に障害発生した場合、Peer-linkがActiveの為トラフィックへの影響はなく、スイッチとして動作を継続する。(vpc roleは切り替わらない)

・`Peer-LINK`が全断したがPK-LinkでPrimaryの生存確認ができた場合、Secondary側のmemberportとSVIはサスペンドされprimary側のパスのみ使用する(vpc roleは切り替わらない)

・`PK-LINK`と`Peer-LINK`の両方に障害が発生した場合（つまり二重障害が発生した場合）、
vPCセカンダリスイッチはvPCプライマリスイッチの状態を確認できないためプライマリに昇格して動作する。⇒両方プライマリになる。


ちなみに下記のようにvpcペア同士を接続する構成の場合、vpc domainのIDは重複しないようにする。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/673840/9a05942a-8758-c5c5-616d-0da050a0e809.png)
以下参照
https://www.cisco.com/c/ja_jp/support/docs/switches/nexus-5000-series-switches/116271-problem-vpc-00.html

## 確認コマンド
https://www.infraexpert.com/study/nexusz7.html


※参考
https://mytech-blog.com/cisco-nexus-vpc/
https://network-arekore.com/?p=1625