NSX-T オーバーレイの負荷分散(mLAGなし multiple TEP)

スポンサーリンク

NSX-Tの負荷分散構成について考察します。(個人の見解としてはヴイエムウェア社のポジショントークと思っていますが)NSX-TはmLAG構成を非推奨としており、mLAGを使用しないで負荷分散を実現するには複雑な設定が必要です。入れ子となる負荷分散ポリシーを作成したり複数のIPアドレスを付与したりの操作が必要です。このページでは、ホストトランスポートノードとNSX Edgeとの間の冗長化設定を紹介します。

おそらくヴイエムウェア社は、CiscoやJuniperの既存ベンダーのシェアを奪いにいくため、彼らのテクノロジーを必要ないデザインパターンを推奨しているものと推測しています。ヴイエムウェア社の資料を見ると、単純なLayer3 Switchを前提とする設定例が多く、いわゆるmLAGが組めるネットワーク機器を前提とした設定例は少数派です。

Physical Network Design Decisions」によると、「No EtherChannel (LAG/vPC) configuration for ESXi host uplinks」と書かれています。

構成図

NSX-T オーバーレイの負荷分散(mLAGなし multiple TEP)」「NSX-T アップリンクの負荷分散(mLAGなし)」の併せて2記事で以下のような構成を組み上げます。

構成図

このページでは赤枠で囲まれた部分のホストトランスポートノードとNSX Edgeの負荷分散構成を説明します。

説明範囲

前提条件

ポートグループ

負荷分散と冗長化を実現するため、overlay01とoverlay02という名前で互いに入れ子構成となるポートグループを作成します。

trunk01は「アップリンク 3 (vmnic2)」を優先するように設定します。

ポートグループの設定 01

trunk02は「アップリンク 4 (vmnic3)」を優先するように設定します。

ポートグループの設定 02

オーバーレイトランスポートゾーン

ホストトランスポートノードとNSX Edge間でトンネルを確立するためのオーバーレイトランスポートゾーンは作成済みのものとします。

トランスポートゾーンの設定

トランスポートゾーンの設定全文は以下の通りです。

トランスポートゾーン
administrator@ubuntu106:~$ curl --silent --request GET \
>   -u admin:P@ssw0rdP@ssw0rd \
>   --header "Content-Type:application/json" \
>   -k https://192.168.1.121/api/v1/transport-zones \
>   | jq ' .results[] | select ( .display_name == "tz-overlay-01" ) '
{
  "transport_type": "OVERLAY",
  "host_switch_name": "nsxDefaultHostSwitch",
  "host_switch_id": "44d16d8a-be90-41c8-aee3-f21e725212ce",
  "transport_zone_profile_ids": [
    {
      "resource_type": "BfdHealthMonitoringProfile",
      "profile_id": "52035bb3-ab02-4a08-9884-18631312e50a"
    }
  ],
  "host_switch_mode": "STANDARD",
  "nested_nsx": false,
  "is_default": false,
  "resource_type": "TransportZone",
  "id": "e14e4399-dfba-4252-b0da-386b9e3673f1",
  "display_name": "tz-overlay-01",
  "_create_user": "admin",
  "_create_time": 1620742845710,
  "_last_modified_user": "admin",
  "_last_modified_time": 1620742845710,
  "_system_owned": false,
  "_protection": "NOT_PROTECTED",
  "_revision": 0,
  "_schema": "/v1/schema/TransportZone"
}

ホストトランスポートノード側の設定

アップリンクプロファイル

NSX-TにTEP(Tunnel End Point)を複数作成し、TEPごとに負荷分散されるアップリンクプロファイルを作成します。

「プロファイルの追加」を押下します。

ESXi向けアップリンクプロファイル 01

何か分かりやすい名前を入力します。

ESXi向けアップリンクプロファイル 02

「アクティブアップリンク」には、アップリンク名をカンマ区切りで2つ入力します。チーミングポリシーは負荷分散される「ロードバランシングの送信元」または「ロードバランシングの送信元のMACアドレス」のいずれかにします。

「ロードバランシングの送信元」は日本語訳では誤解を招く言い方ですが、英語原文では「LOADBALANCE_SRCID」です。分散仮想スイッチのポートIDごとに負荷分散されます。

ESXi向けアップリンクプロファイル 03

ESXi用 アップリンクプロファイル
administrator@ubuntu106:~$ curl --silent --request GET \
>   -u admin:P@ssw0rdP@ssw0rd \
>   --header "Content-Type:application/json" \
>   -k https://192.168.1.121/api/v1/host-switch-profiles \
>   | jq ' .results[] | select ( .display_name == "prof-host-multiple-vlan-0002" ) '
{
  "teaming": {
    "policy": "LOADBALANCE_SRC_MAC",
    "active_list": [
      {
        "uplink_name": "uplink1",
        "uplink_type": "PNIC"
      },
      {
        "uplink_name": "uplink2",
        "uplink_type": "PNIC"
      }
    ]
  },
  "named_teamings": [],
  "transport_vlan": 2,
  "overlay_encap": "GENEVE",
  "resource_type": "UplinkHostSwitchProfile",
  "id": "15baef7a-217e-405b-9195-97cae152dad0",
  "display_name": "prof-host-multiple-vlan-0002",
  "description": "",
  "tags": [],
  "_create_user": "admin",
  "_create_time": 1620743083815,
  "_last_modified_user": "admin",
  "_last_modified_time": 1620743083815,
  "_system_owned": false,
  "_protection": "NOT_PROTECTED",
  "_revision": 0
}

ノードスイッチの設定

ESXiに対してノードスイッチを設定します。

ESXi ノードスイッチの設定 01

アクティブリンクに複数を指定したアップリンクプロファイルを適用します。

ESXi ノードスイッチの設定 02

IPアドレスは複数を指定し、VDSのアップリンクは複数を指定します。

ESXi ノードスイッチの設定 03

設定完了後、ESXiにSSHログインします。esxcliコマンドでvmk10とvmk11の2つのTEPが作成されていることが確認できます。

[root@esxi182:~] esxcli network ip interface ipv4 address list
Name   IPv4 Address   IPv4 Netmask   IPv4 Broadcast   Address Type  Gateway      DHCP DNS
-----  -------------  -------------  ---------------  ------------  -----------  --------
vmk0   192.168.1.182  255.255.255.0  192.168.1.255    STATIC        192.168.1.1     false
vmk10  192.168.2.192  255.255.255.0  192.168.2.255    STATIC        192.168.2.1     false
vmk11  192.168.2.182  255.255.255.0  192.168.2.255    STATIC        192.168.2.1     false
vmk50  169.254.1.1    255.255.0.0    169.254.255.255  STATIC        192.168.1.1     false
[root@esxi182:~] 

ノードスイッチの設定全文は以下の通りです。

ESXi ノードスイッチ
administrator@ubuntu106:~$ curl --silent --request GET \
>   -u admin:P@ssw0rdP@ssw0rd \
>   --header "Content-Type:application/json" \
>   -k https://192.168.1.121/api/v1/transport-nodes \
>   | jq ' .results[] | select ( .display_name == "192.168.1.182" ) '
{
  "node_id": "5c35912a-8869-44aa-a1fc-3f95bc0f75fa",
  "host_switch_spec": {
    "host_switches": [
      {
        "host_switch_name": "DSwitch02",
        "host_switch_id": "50 33 a4 6b 8e dc a1 19-f3 fc 59 3f c7 d2 a9 62",
        "host_switch_type": "VDS",
        "host_switch_mode": "STANDARD",
        "host_switch_profile_ids": [
          {
            "key": "UplinkHostSwitchProfile",
            "value": "15baef7a-217e-405b-9195-97cae152dad0"
          }
        ],
        "pnics": [],
        "uplinks": [
          {
            "vds_uplink_name": "アップリンク 1",
            "uplink_name": "uplink1"
          },
          {
            "vds_uplink_name": "アップリンク 2",
            "uplink_name": "uplink2"
          }
        ],
        "is_migrate_pnics": false,
        "ip_assignment_spec": {
          "ip_list": [
            "192.168.2.192",
            "192.168.2.182"
          ],
          "default_gateway": "192.168.2.1",
          "subnet_mask": "255.255.255.0",
          "resource_type": "StaticIpListSpec"
        },
        "cpu_config": [],
        "transport_zone_endpoints": [
          {
            "transport_zone_id": "e14e4399-dfba-4252-b0da-386b9e3673f1",
            "transport_zone_profile_ids": [
              {
                "resource_type": "BfdHealthMonitoringProfile",
                "profile_id": "52035bb3-ab02-4a08-9884-18631312e50a"
              }
            ]
          }
        ],
        "vmk_install_migration": [],
        "pnics_uninstall_migration": [],
        "vmk_uninstall_migration": [],
        "not_ready": false
      }
    ],
    "resource_type": "StandardHostSwitchSpec"
  },
  "transport_zone_endpoints": [],
  "maintenance_mode": "DISABLED",
  "node_deployment_info": {
    "os_type": "ESXI",
    "os_version": "7.0.2",
    "managed_by_server": "192.168.1.190",
    "discovered_node_id": "3ce03caf-22e3-4198-888d-8ccc6cd41fa4:host-14",
    "resource_type": "HostNode",
    "id": "5c35912a-8869-44aa-a1fc-3f95bc0f75fa",
    "display_name": "192.168.1.182",
    "external_id": "5c35912a-8869-44aa-a1fc-3f95bc0f75fa",
    "fqdn": "esxi182",
    "ip_addresses": [
      "192.168.1.182"
    ],
    "discovered_ip_addresses": [
      "192.168.1.182",
      "192.168.2.192",
      "192.168.2.182",
      "169.254.1.1"
    ],
    "_create_user": "admin",
    "_create_time": 1620743664373,
    "_last_modified_user": "admin",
    "_last_modified_time": 1620743664373,
    "_protection": "NOT_PROTECTED",
    "_revision": 0
  },
  "is_overridden": false,
  "resource_type": "TransportNode",
  "id": "5c35912a-8869-44aa-a1fc-3f95bc0f75fa",
  "display_name": "192.168.1.182",
  "description": "",
  "tags": [],
  "_create_user": "admin",
  "_create_time": 1620743667871,
  "_last_modified_user": "admin",
  "_last_modified_time": 1620743667871,
  "_system_owned": false,
  "_protection": "NOT_PROTECTED",
  "_revision": 0
}

Edgeトランスポートノード側の設定

アップリンクプロファイル

TEPごとに負荷分散されるアップリンクプロファイルを作成します。「プロファイルの追加」を押下します。

NSX Edge向けアップリンクプロファイル 01

何か分かりやすい名前を入力します。

NSX Edge向けアップリンクプロファイル 02

「アクティブアップリンク」には、アップリンク名をカンマ区切りで2つ入力します。チーミングポリシーは負荷分散される「ロードバランシングの送信元」にします。

「ロードバランシングの送信元」は日本語訳では誤解を招く言い方ですが、英語原文では「LOADBALANCE_SRCID」です。分散仮想スイッチのポートIDごとに負荷分散されます。

NSX Edgeはロードバランシングアルゴリズム「ロードバランシングの送信元のMACアドレス」に対応していません。「ロードバランシングの送信元のMACアドレス」を選択すると、この後のノードスイッチの設定画面において、アップリンクプロファイル選択のプルダウンメニューに現れません。

NSX Edge向けアップリンクプロファイル 03

アップリンクプロファイルの設定全文は以下の通りです。

NSX Edge用 アップリンクプロファイル
administrator@ubuntu106:~$ curl --silent --request GET \
>  -u admin:P@ssw0rdP@ssw0rd \
>   --header "Content-Type:application/json" \
>   -k https://192.168.1.121/api/v1/host-switch-profiles \
>   | jq ' .results[] | select ( .display_name == "prof-edge-multiple-vlan-0000" ) '
{
  "teaming": {
    "policy": "LOADBALANCE_SRCID",
    "active_list": [
      {
        "uplink_name": "uplink1",
        "uplink_type": "PNIC"
      },
      {
        "uplink_name": "uplink2",
        "uplink_type": "PNIC"
      }
    ]
  },
  "named_teamings": [],
  "transport_vlan": 0,
  "overlay_encap": "GENEVE",
  "resource_type": "UplinkHostSwitchProfile",
  "id": "01dc92e3-0f27-46d5-9f79-91fd68b56233",
  "display_name": "prof-edge-multiple-vlan-0000",
  "description": "",
  "tags": [],
  "_create_user": "admin",
  "_create_time": 1620744207830,
  "_last_modified_user": "admin",
  "_last_modified_time": 1620744207830,
  "_system_owned": false,
  "_protection": "NOT_PROTECTED",
  "_revision": 0
}

ノードスイッチの設定

NSX Edgeに対してノードスイッチを設定します。

NSX Edge ノードスイッチの設定 01

アクティブリンクに複数を指定したアップリンクプロファイルを適用します。

NSX Edge ノードスイッチの設定 02

IPアドレスは複数を指定し、NSX Edgeのアップリンクは複数を指定します。

NSX Edge ノードスイッチの設定 03

設定が完了すると、以下スクリーンショットのようにTEPに複数のIPアドレスが表示されます。

NSX Edge ノードスイッチの設定 04

ノードスイッチの設定全文は以下の通りです。

NSX Edge ノードスイッチ
administrator@ubuntu106:~$ curl --silent --request GET \
>   -u admin:P@ssw0rdP@ssw0rd \
>   --header "Content-Type:application/json" \
>   -k https://192.168.1.121/api/v1/transport-nodes \
>   | jq ' .results[] | select ( .display_name == "nsx-edge131.gokatei.go" ) '
{
  "node_id": "1e3109ea-b259-11eb-9cb3-005056b354ed",
  "host_switch_spec": {
    "host_switches": [
      {
        "host_switch_name": "nsxHostSwitchVlan",
        "host_switch_id": "3b19cc75-0eed-4f6a-a2d9-3786977d0bc6",
        "host_switch_type": "NVDS",
        "host_switch_mode": "STANDARD",
        "host_switch_profile_ids": [
          {
            "key": "UplinkHostSwitchProfile",
            "value": "b926c211-fc87-4b3b-a997-fe02e292578b"
          },
          {
            "key": "LldpHostSwitchProfile",
            "value": "9e0b4d2d-d155-4b4b-8947-fbfe5b79f7cb"
          }
        ],
        "pnics": [
          {
            "device_name": "fp-eth2",
            "uplink_name": "uplink1"
          },
          {
            "device_name": "fp-eth3",
            "uplink_name": "uplink2"
          }
        ],
        "is_migrate_pnics": false,
        "ip_assignment_spec": {
          "resource_type": "AssignedByDhcp"
        },
        "cpu_config": [],
        "transport_zone_endpoints": [
          {
            "transport_zone_id": "b2777d91-22d0-4b58-b577-70f8e32ce991",
            "transport_zone_profile_ids": [
              {
                "resource_type": "BfdHealthMonitoringProfile",
                "profile_id": "52035bb3-ab02-4a08-9884-18631312e50a"
              }
            ]
          }
        ],
        "vmk_install_migration": [],
        "pnics_uninstall_migration": [],
        "vmk_uninstall_migration": [],
        "not_ready": false
      },
      {
        "host_switch_name": "nsxHostSwitchOverlay",
        "host_switch_id": "a2cf3879-c69c-42d9-9720-d8bde703d9dd",
        "host_switch_type": "NVDS",
        "host_switch_mode": "STANDARD",
        "host_switch_profile_ids": [
          {
            "key": "UplinkHostSwitchProfile",
            "value": "01dc92e3-0f27-46d5-9f79-91fd68b56233"
          },
          {
            "key": "LldpHostSwitchProfile",
            "value": "9e0b4d2d-d155-4b4b-8947-fbfe5b79f7cb"
          }
        ],
        "pnics": [
          {
            "device_name": "fp-eth0",
            "uplink_name": "uplink1"
          },
          {
            "device_name": "fp-eth1",
            "uplink_name": "uplink2"
          }
        ],
        "is_migrate_pnics": false,
        "ip_assignment_spec": {
          "ip_list": [
            "192.168.2.131",
            "192.168.2.161"
          ],
          "default_gateway": "192.168.2.1",
          "subnet_mask": "255.255.255.0",
          "resource_type": "StaticIpListSpec"
        },
        "cpu_config": [],
        "transport_zone_endpoints": [
          {
            "transport_zone_id": "e14e4399-dfba-4252-b0da-386b9e3673f1",
            "transport_zone_profile_ids": [
              {
                "resource_type": "BfdHealthMonitoringProfile",
                "profile_id": "52035bb3-ab02-4a08-9884-18631312e50a"
              }
            ]
          }
        ],
        "vmk_install_migration": [],
        "pnics_uninstall_migration": [],
        "vmk_uninstall_migration": [],
        "not_ready": false
      }
    ],
    "resource_type": "StandardHostSwitchSpec"
  },
  "transport_zone_endpoints": [],
  "maintenance_mode": "DISABLED",
  "node_deployment_info": {
    "deployment_type": "VIRTUAL_MACHINE",
    "node_settings": {
      "hostname": "nsx-edge131.gokatei.go",
      "search_domains": [
        "gokatei.go"
      ],
      "ntp_servers": [
        "192.168.1.221"
      ],
      "dns_servers": [
        "192.168.1.221",
        "192.168.1.1"
      ],
      "enable_ssh": true,
      "allow_ssh_root_login": false
    },
    "resource_type": "EdgeNode",
    "id": "1e3109ea-b259-11eb-9cb3-005056b354ed",
    "display_name": "nsx-edge131.gokatei.go",
    "description": "",
    "external_id": "1e3109ea-b259-11eb-9cb3-005056b354ed",
    "ip_addresses": [
      "192.168.1.131"
    ],
    "_create_user": "admin",
    "_create_time": 1620738143618,
    "_last_modified_user": "admin",
    "_last_modified_time": 1620744677302,
    "_system_owned": false,
    "_protection": "NOT_PROTECTED",
    "_revision": 2
  },
  "is_overridden": false,
  "failure_domain_id": "4fc1e3b0-1cd4-4339-86c8-f76baddbaafb",
  "resource_type": "TransportNode",
  "id": "1e3109ea-b259-11eb-9cb3-005056b354ed",
  "display_name": "nsx-edge131.gokatei.go",
  "description": "",
  "tags": [],
  "_create_user": "admin",
  "_create_time": 1620738143672,
  "_last_modified_user": "admin",
  "_last_modified_time": 1620744677323,
  "_system_owned": false,
  "_protection": "NOT_PROTECTED",
  "_revision": 2
}

動作確認

セグメントと仮想マシンの作成

ホストトランスポートノードとNSX Edgeの間のトンネルを確立するには、NSX-Tでセグメントを作成し、そのセグメントに属す仮想マシンを起動しなければなりません。

まずは動作確認用のセグメントを作成します。

動作確認用のセグメント

セグメントの設定全文は以下の通りです。

セグメント
administrator@ubuntu106:~$ curl --silent --request GET \
>   -u admin:P@ssw0rdP@ssw0rd \
>   --header "Content-Type:application/json" \
>   -k https://192.168.1.121/policy/api/v1/infra/segments \
>   | jq ' .results[] | select ( .display_name | startswith("seg") ) '
{
  "type": "ROUTED",
  "subnets": [
    {
      "gateway_address": "192.168.50.1/24",
      "network": "192.168.50.0/24"
    }
  ],
  "connectivity_path": "/infra/tier-0s/vrf03",
  "vlan_ids": [
    "0"
  ],
  "transport_zone_path": "/infra/sites/default/enforcement-points/default/transport-zones/e14e4399-dfba-4252-b0da-386b9e3673f1",
  "advanced_config": {
    "address_pool_paths": [],
    "hybrid": false,
    "inter_router": false,
    "local_egress": false,
    "urpf_mode": "STRICT",
    "connectivity": "ON"
  },
  "admin_state": "UP",
  "replication_mode": "MTEP",
  "resource_type": "Segment",
  "id": "seg50",
  "display_name": "seg50",
  "path": "/infra/segments/seg50",
  "relative_path": "seg50",
  "parent_path": "/infra",
  "unique_id": "f1a8f911-5cb4-4605-ab09-3f99a3c45490",
  "marked_for_delete": false,
  "overridden": false,
  "_create_user": "admin",
  "_create_time": 1620745218240,
  "_last_modified_user": "admin",
  "_last_modified_time": 1620745218299,
  "_system_owned": false,
  "_protection": "NOT_PROTECTED",
  "_revision": 0
}
{
  "type": "ROUTED",
  "subnets": [
    {
      "gateway_address": "192.168.51.1/24",
      "network": "192.168.51.0/24"
    }
  ],
  "connectivity_path": "/infra/tier-0s/vrf04",
  "vlan_ids": [
    "0"
  ],
  "transport_zone_path": "/infra/sites/default/enforcement-points/default/transport-zones/e14e4399-dfba-4252-b0da-386b9e3673f1",
  "advanced_config": {
    "address_pool_paths": [],
    "hybrid": false,
    "inter_router": false,
    "local_egress": false,
    "urpf_mode": "STRICT",
    "connectivity": "ON"
  },
  "admin_state": "UP",
  "replication_mode": "MTEP",
  "resource_type": "Segment",
  "id": "seg51",
  "display_name": "seg51",
  "path": "/infra/segments/seg51",
  "relative_path": "seg51",
  "parent_path": "/infra",
  "unique_id": "2a04213e-e3f1-486b-9c6f-aca0a4e9e8ad",
  "marked_for_delete": false,
  "overridden": false,
  "_create_user": "admin",
  "_create_time": 1620745172173,
  "_last_modified_user": "admin",
  "_last_modified_time": 1620745172180,
  "_system_owned": false,
  "_protection": "NOT_PROTECTED",
  "_revision": 0
}

次に動作確認用の仮想マシンを作成し、これを起動します。

動作確認用の仮想マシン

トンネルの確認

仮想マシンの起動後、ホストトランスポートノードとNSX Edgeの間のトンネルを確認します。ホストトランスポートノートの詳細画面で「監視」タブを開き、確立されたトンネルを確認します。トンネルが4本作成されていることが読み取れます。

トンネル確認

通信経路の確認

ESXiと物理ネットワーク機器の結線関係は以下の通りです。

物理ネットワーク機器のポート収容

mac addressテーブルを表示し、ホストトランスポートノード(f0/7とf0/8)、NSX Edge(f0/3とf0/4)ともにIPアドレス単位で負荷分散されていることを確認します。

Switch#show arp vlan 2
Protocol  Address          Age (min)  Hardware Addr   Type   Interface
Internet  192.168.2.10            -   c472.9559.9043  ARPA   Vlan2
Internet  192.168.2.131           1   0050.56b3.38f6  ARPA   Vlan2
Internet  192.168.2.132           1   0050.56b3.2b3c  ARPA   Vlan2
Internet  192.168.2.161           1   0050.56b3.05dd  ARPA   Vlan2
Internet  192.168.2.162           1   0050.56b3.312d  ARPA   Vlan2
Internet  192.168.2.181           0   Incomplete      ARPA   
Internet  192.168.2.182           0   0050.5666.aa1d  ARPA   Vlan2
Internet  192.168.2.192           0   0050.5663.dc2e  ARPA   Vlan2
Switch#
Switch#
Switch#
Switch#show mac address-table vlan 2 | exclude All
          Mac Address Table
-------------------------------------------

Vlan    Mac Address       Type        Ports
----    -----------       --------    -----
   2    0050.5663.dc2e    DYNAMIC     Fa0/8
   2    0050.5666.aa1d    DYNAMIC     Fa0/7
   2    0050.56b3.05dd    DYNAMIC     Fa0/3
   2    0050.56b3.2b3c    DYNAMIC     Fa0/4
   2    0050.56b3.312d    DYNAMIC     Fa0/3
   2    0050.56b3.38f6    DYNAMIC     Fa0/4
   2    0060.b9e1.03f0    DYNAMIC     Gi0/2
Total Mac Addresses for this criterion: 27

Switch#
タイトルとURLをコピーしました