ONTAPとNexus SwitchのLACP設定【互いに設定が合ってると言い合うのは避けたい】

## はじめに
ONTAPでNFSやCIFSによるファイル共有の提供する場合に、物理的なNetworkケーブルをSwitchに接続してから利用する形となります。この接続においては、**冗長構成及び負荷分散を加味した、LACP（Link Aggregation Control Protocol）を使用することが多い**かと思います。

特に初期設定時には、ONTAP側でNetworkに関する設定を完了した後に**疎通確認が取れない場合、Storage側かNetwork側のどちらで設定が正しく行われていないのか？**
そもそも故障しているのでは無いか？といった切り分けに苦慮する事があります。

この記事では、Network接続を行う際の**ONTAP側と利用が多いシスコ社のNexus OS側におけるLACP設定手順について記載し、手順誤りによる切り分けを容易にできるようにする**事を目的としています。
![002.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1268577/4edb424a-ad6b-1bfc-cdfe-1a45436062b9.png)




## 何をしたい？できる？
- ONTAP側でLACPの設定を行う
- Nexus Switch側でLACPの設定を行う

## Link Aggregation Control Protocol(LACP)について
複数の機器間を接続する複数の物理リンクを束ねて1つの仮想リンクに結合し、より高速なネットワーク接続を提供するためのプロトコルです。

ONTAP設定におけるマルチモード(Static)との違いは、機器間で定期的にネゴシエーションを行う為、例えば一部のSFP障害やメディアコンバーター障害などリンクダウンを伴わない障害でも自動的に障害リンクを避けて通信可能となります。

なお、**ONTAP側のLACP仕様として、アクティブ モードで動作し、タイマーは、Negotiation時にはshort timer (1s)でLACPDUs を送信し、Negotiation完了後、Link UpしたらtimerはSlow timers(30s)で挙動**します。

<img width="500" alt="qiita-square" src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1268577/5cabc2a2-81a4-6f83-bc9f-7f0d43d96905.png>


## Virtual Port Channel(vPC)について
シスコ社のNexusシリーズにおける2つの物理Switchを1つの論理Switchとして動作させるための機能で、2つの物理Switchのどちらかに接続されているかのように動作しますが、実際には両方のSwitchに接続されていることになります。**いわゆる、MLAG(Multi-chassis Link Aggregation)です。**

vPCでは2つのリンクを両方使用できるため高可用性と負荷分散を提供できます。
1つの物理Switchに障害が発生した場合でも、もう1つの物理Switchが引き継ぐことができ、両方の物理Switchがトラフィックを処理する事で、負荷分散を実現することができます。
<img width="500" alt="qiita-square" src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1268577/ae2429f4-a579-f574-8a64-c3c6cbc996f5.png>


## 記事における環境情報
本記事では、実施した環境のイメージとしては以下の通りで
多くの場合は、以下のような物理構成にする事が多いのではないかと思います。
- **StorageはLACPを利用し複数の物理Portを束ねる**
- **Network Switch側はvPCを使って、Switch跨ぎでPortを束ねる**

<img width="700" alt="qiita-square" src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1268577/eb036481-c34b-38a3-3890-1ab0f18e9c66.png>


## 設定手順
この手順例では、**既に以下の内容が設定済(vPCやLACPが利用可能)となっているNetwork SwitchへStorageを接続するといった内容**での記載となります。

- vPC機能のサービス有効化
- LACP機能のサービス有効化
- vPC Peer-Keepaliveの設定
- vPCピアリンク用のインターフェースを設定
- 利用するVLAN設定

<details open>

<summary>参考までにvPCの初期設定例</summary>

</details>

```bash:
> configure terminal

# vPC機能とLACPサービス有効化(有効化していない場合)
> feature vpc
> feature lacp


# vPCドメインの設定
> vpc domain 123 (vPCピアSwitchで同じ値)

# vPC Roleの設定
vPCプライマリを値を小さく、vPCセカンダリを値を大きくする
> role priority 10

# vPC Peer-Keepaliveの設定
# destinationにvPCピアSwitchのアドレスを指定し、sourceに自身の送信元アドレスを指定
# (対向のSwitchを設定する際にはIPは逆になる)
> peer-keepalive destination 192.168.123.10 source 192.168.123.20 vrf management

# vPCペアが論理的な一台のSTP rootとして動作
> peer-switch 

# 隣接がすでに確立されている場合に、リロード後に復元した vPC ピア デバイスの起動より仮想ポート チャネル（vPC）を遅らせる設定
> delay restore 150 

# 着信パケットの宛先MACがそのvPCピアSwitchのMACである場合、転送可能にする
> peer-gateway 

# vPCピアリンクのダウンの発生時にPrimary Switchがダウンするという二重障害が発生してもSecondary SwitchをPrimaryとして正常に動作させる
> auto-recovery 

# ピアSwitch障害後の復旧時、vPCピアSwitch間のARP情報を同期させる(L3トラフィックの収束時間改善)
> ip arp synchronize


# vPCピアリンク用のインターフェースを設定(Port Channel番号は各Switchで同じにする)
# この例ではPort Channelで2本(Port50と51)を束ねてから接続+LACP利用
> interface Eth1/50-51 
> channel-group 100 mode active 
> no shutdown
> exit

> interface Eth1/50
> description vPC Peer Link to Nexus-02:e1/50
> exit

> interface Eth1/52
> description vPC Peer Link to Nexus-02:e1/51
> exit

# vPCピアリンク用のPort Channel設定
> interface port-channel 100
> description vPC peer-link
> switchport mode trunk

# トランクポートでUntaggedを扱うが、VLAN１はタグ付きで利用し、トランクポートで利用出来るVLANを指定
> switchport trunk native vlan 20 
> switchport trunk allowed vlan 1,2,10,11

# STP Networkポートとして設定
> spanning-tree port type network

# 選択したPort Channelを vPCピアリンクとして設定
> vpc peer-link
> exit

# 設定情報の保存
> copy run start
```
</div>
</details>

### 1. Nexus側のvPC Memberport+LACP設定

以下の画像における青線のLACP+VPCにおけるSwitch側の設定例になります。
<img width="500" alt="qiita-square" src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1268577/20e43d81-348d-3eab-9ed8-7ac772ccdec2.png>

実際には、SW#1で2 Port、SW#2で2 Portの計4 Portを束ねるパターンが多いかと思いますので、設定例の対象Portの増やして頂くことで同様に設定が可能になるかと思います。

```bash:
# Switch01側での設定例
> configure terminal

# vlanの作成
> vlan 11
> exit

# 接続する物理Portへの設定(mode activeの部分がLACP設定)
> interface Ethernet1/1
> switchport mode trunk
> channel-group 50 mode active
> exit

# 接続する物理Portの所属するchannel-groupへの設定(vpc XXがvPC Memberpor設定部分)
# トランクポートでUntagged(vlan 20)を扱うが、VLAN 1,2,10,11はタグ付きで利用し、トランクポートで利用出来るVLANを指定した例
> interface port-channel 50
> switchport mode trunk
> switchport trunk native vlan 20
> switchport trunk allowed vlan 1,2,10,11
> vpc 50
> exit
=======================================
# Switch02側での設定例
> configure terminal

# vlanの作成
> vlan 11
> exit

# 接続する物理Portへの設定(mode activeの部分がLACP設定)
> interface Ethernet1/1
> switchport mode trunk
> channel-group 50 mode active
> exit

# 接続する物理Portの所属するchannel-groupへの設定(vpc XXがvPC Memberpor設定部分)
# トランクポートでUntagged(vlan 20)を扱うが、VLAN 1,2,10,11はタグ付きで利用し、トランクポートで利用出来るVLANを指定した例
> interface port-channel 50
> switchport mode trunk
> switchport trunk native vlan 20
> switchport trunk allowed vlan 1,2,10,11
> vpc 50
> exit
=======================================

# また必要に応じて各Switchのport-channelの設定にSTPのエッジポートとして設定、MTUサイズの指定
> interface port-channel 50
> spanning-tree port type edge trunk
> spanning-tree guard root
> MTU XXXX
> exit

# 必要に応じて以下のように説明を入れる事も可能
> interface port-channel 50
> description Node1:10G-Bond
> exit

# 設定情報の保存
> copy run start
```


### 2. ONTAP側のLACP設定

以下の画像における青線のLACP+VPCにおけるStorage側の設定例になります。
<img width="500" alt="qiita-square" src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1268577/20e43d81-348d-3eab-9ed8-7ac772ccdec2.png>


以下の例では、Node1側のe0e,e0fの2Portを束ねてIntergface Groupo(LACP)設定を実施しています。
本来はNode2側でも同様の設定を実施して、Node障害時に切り替え後も疎通できるようにする必要があります。

```bash:
# Node1側に対して2つのPortを束ねてLACP設定
> network port ifgrp create -node node01 -ifgrp a0a -mode multimode_lacp -distr-func ip

> network port ifgrp add-port -node node01 -ifgrp a0a -port e0e
> network port ifgrp add-port -node node01 -ifgrp a0a -port e0f


> network port ifgrp show
         Port       Distribution                   Active
Node     IfGrp      Function     MAC Address       Ports   Ports
-------- ---------- ------------ ----------------- ------- -------------------
node01
         a0a        ip           d2:39:ea:17:12:fc full    e0e, e0f

# VLAN 11を使うVLANインターフェースの切り出し
> network port vlan create -node node01 -vlan-name a0a-11

```

## Nexus側設定はChatGPTで解決できそう？

vPC設定の部分が上手く生成できなく、そもそもの設定を知ってないと判断できないので厳しいように思えます。

#### 質問文

<img width="500" alt="qiita-square" src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1268577/823b07bc-dd31-eca8-bc13-8cc7bdcbf3f2.png>

#### GPT-3.5
<img width="500" alt="qiita-square" src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1268577/7ce785e0-ddb7-c39f-1bd4-dcc9229b7b15.png>

#### GPT-4
<img width="500" alt="qiita-square" src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1268577/5a76ca55-e721-f875-f073-c0d87e7909de.png>


## 参考及びリンク
[LACPポートチャネル/インターフェイスグループのトラブルシューティング](https://kb-ja.netapp.com/onprem/Switches/Fabric%2C_Interconnect_and_Management_Switches/Troubleshooting_LACP_port_channel_interface_groups
)

[物理ポートを組み合わせてインターフェイスグループを作成する](https://docs.netapp.com/ja-jp/ontap/networking/combine_physical_ports_to_create_interface_groups.html#%E3%82%A4%E3%83%B3%E3%82%BF%E3%83%BC%E3%83%95%E3%82%A7%E3%82%A4%E3%82%B9%E3%82%B0%E3%83%AB%E3%83%BC%E3%83%97%E3%81%AE%E3%82%BF%E3%82%A4%E3%83%97)

[How to configure and confirm LACP timers in ONTAP 9](https://kb.netapp.com/onprem%2Fontap%2Fda%2FNAS%2FHow_to_configure_and_confirm_LACP_timers_in_ONTAP_9)

[ベストプラクティスを使用したNexus 9000 vPCの理解と設定](https://www.cisco.com/c/ja_jp/support/docs/switches/nexus-9000-series-switches/218333-understand-and-configure-nexus-9000-vpc.html)