升级、备份和还原 SDN 基础结构

适用于:Windows Server 2022、Windows Server 2019、Windows Server 2016,Azure Stack HCI 版本 21H2 和 20H2

本主题介绍如何更新、备份和还原 SDN 基础结构。

升级 SDN 基础结构

可以将 SDN 基础结构从 Windows Server 2016 升级到 Windows Server 2019。 在升级顺序方面,请遵循“更新 SDN 基础结构”部分中提到的相同步骤顺序。 在升级之前,建议备份网络控制器数据库。

对于网络控制器计算机,请在升级完成后使用 Get-NetworkControllerNode cmdlet 检查节点的状态。 在升级其他节点之前,确保该节点恢复“已启动”状态。 升级所有网络控制器节点后,网络控制器会在一小时内更新网络控制器群集中运行的微服务。 可以使用 update-networkcontroller cmdlet 触发立即更新。

在软件定义的网络 (SDN) 系统的所有操作系统组件上安装相同的 Windows 更新,包括:

  • 已启用 SDN 的 Hyper-V 主机
  • 网络控制器 VM
  • 软件负载均衡器多路复用器 VM
  • RAS 网关 VM

重要

如果使用 System Center Virtual Manager,则必须使用最新的更新汇总对其进行更新。

更新每个组件时,可以使用任何标准方法来安装 Windows 更新。 但是,为了尽量减少工作负载停机时间并确保网络控制器数据库的完整性,请执行以下步骤:

  1. 更新管理控制台。

    在使用网络控制器 PowerShell 模块的每台计算机上安装更新。 包括由该模块自行安装了 RSAT-NetworkController 角色的任何位置。 排除网络控制器 VM 本身;你将在下一步骤中更新它们。

  2. 在第一个网络控制器 VM 上,安装所有更新并重启。

  3. 在继续更新下一个网络控制器 VM 之前,使用 get-networkcontrollernode cmdlet 检查更新并重启的节点的状态。

  4. 在重启周期,等待网络控制器节点关闭,然后再次启动。

    重启 VM 后,它可能需要在几分钟后才恢复“已启动”状态。 有关输出示例,请参阅

  5. 逐个地在每个 SLB 多路复用器 VM 上安装更新,以确保负载均衡器基础结构持续可用。

  6. 从包含“待机”模式 RAS 网关的主机开始,更新 Hyper-V 主机和 RAS 网关

    在不断开租户连接的情况下无法实时迁移 RAS 网关 VM。 在更新周期必须小心谨慎,以尽量减少租户连接故障转移到新 RAS 网关的次数。 通过协调主机和 RAS 网关的更新,可以做到每个租户最多故障转移一次。

    a. 清空可实时迁移的 VM 的主机。

    RAS 网关 VM 应保留在主机上。

    b. 在此主机中的每个网关 VM 上安装更新。

    c. 如果更新后需要重启网关 VM,请重启该 VM。

    d. 在包含刚刚更新的网关 VM 的主机上安装更新。

    e. 如果更新后需要重启主机,请重启。

    f. 对包含待机网关的每个附加主机重复上述步骤。

    如果未保留待机网关,请对所有剩余主机执行相同的步骤。

示例:使用 get-networkcontrollernode cmdlet

在此示例中,你会看到从某个网络控制器 VM 运行的 get-networkcontrollernode cmdlet 的输出。

示例输出中显示的节点状态为:

  • NCNode1.contoso.com = Down
  • NCNode2.contoso.com = Up
  • NCNode3.contoso.com = Up

重要

必须等待几分钟,直到节点状态更改为“已启动”,然后逐个更新任何其他节点

更新所有网络控制器节点后,网络控制器会在一小时内更新网络控制器群集中运行的微服务。

提示

可以使用 update-networkcontroller cmdlet 触发立即更新。

PS C:\> get-networkcontrollernode
Name            : NCNode1.contoso.com
Server          : NCNode1.Contoso.com
FaultDomain     : fd:/NCNode1.Contoso.com
RestInterface   : Ethernet
NodeCertificate :
Status          : Down

Name            : NCNode2.Contoso.com
Server          : NCNode2.contoso.com
FaultDomain     : fd:/ NCNode2.Contoso.com
RestInterface   : Ethernet
NodeCertificate :
Status          : Up

Name            : NCNode3.Contoso.com
Server          : NCNode3.Contoso.com
FaultDomain     : fd:/ NCNode3.Contoso.com
RestInterface   : Ethernet
NodeCertificate :
Status          : Up

示例:使用 update-networkcontroller cmdlet

在此示例中,你会看到用于强制更新网络控制器的 update-networkcontroller cmdlet 的输出。

重要

没有其他要安装的更新时,请运行此 cmdlet。

PS C:\> update-networkcontroller
NetworkControllerClusterVersion NetworkControllerVersion
------------------------------- ------------------------
10.1.1                          10.1.15

备份 SDN 基础结构

定期备份网络控制器数据库可以在发生灾难或数据丢失时确保业务连续性。 仅备份网络控制器 VM 是不够的,因为这样无法确保会话在多个网络控制器节点之间继续。

要求

  • 一个 SMB 共享,以及对该共享和文件系统拥有读/写权限的凭据。
  • 如果网络控制器也是使用 组托管服务帐户 (GMSA) 安装的,则你可以选择使用 GMSA。

过程:

  1. 使用你选择的 VM 备份方法,或使用 Hyper-V 导出每个网络控制器 VM 的副本。

    备份网络控制器 VM 可确保存在用于解密数据库的必要证书。

  2. 如果使用 System Center Virtual Machine Manager (SCVMM),请停止 SCVMM 服务并通过 SQL Server 将其备份。

    此处的目的是确保在此期间不会对 SCVMM 进行任何更新,任何更新可能导致网络控制器备份和 SCVMM 之间不一致。

    重要

    在网络控制器备份完成之前不要重启 SCVMM 服务。

  3. 使用 new-networkcontrollerbackup cmdlet 备份网络控制器数据库。

  4. 使用 get-networkcontrollerbackup cmdlet 检查备份是否完成且成功。

  5. 如果使用 SCVMM,请启动 SCVMM 服务。

示例:备份网络控制器数据库

$URI = "https://NC.contoso.com"
$Credential = Get-Credential

# Get or Create Credential object for File share user

$ShareUserResourceId = "BackupUser"

$ShareCredential = Get-NetworkControllerCredential -ConnectionURI $URI -Credential $Credential | Where {$_.ResourceId -eq $ShareUserResourceId }
If ($ShareCredential -eq $null) {
    $CredentialProperties = New-Object Microsoft.Windows.NetworkController.CredentialProperties
    $CredentialProperties.Type = "usernamePassword"
    $CredentialProperties.UserName = "contoso\alyoung"
    $CredentialProperties.Value = "<Password>"

    $ShareCredential = New-NetworkControllerCredential -ConnectionURI $URI -Credential $Credential -Properties $CredentialProperties -ResourceId $ShareUserResourceId -Force
}

# Create backup

$BackupTime = (get-date).ToString("s").Replace(":", "_")

$BackupProperties = New-Object Microsoft.Windows.NetworkController.NetworkControllerBackupProperties
$BackupProperties.BackupPath = "\\fileshare\backups\NetworkController\$BackupTime"
$BackupProperties.Credential = $ShareCredential

$Backup = New-NetworkControllerBackup -ConnectionURI $URI -Credential $Credential -Properties $BackupProperties -ResourceId $BackupTime -Force

示例:检查网络控制器备份操作状态

PS C:\ > Get-NetworkControllerBackup -ConnectionUri $URI -Credential $Credential -ResourceId $Backup.ResourceId
| ConvertTo-JSON -Depth 10
{
    "Tags":  null,
    "ResourceRef":  "/networkControllerBackup/2017-04-25T16_53_13",
    "InstanceId":  "c3ea75ae-2892-4e10-b26c-a2243b755dc8",
    "Etag":  "W/\"0dafea6c-39db-401b-bda5-d2885ded470e\"",
    "ResourceMetadata":  null,
    "ResourceId":  "2017-04-25T16_53_13",
    "Properties":  {
                    "BackupPath":  "\\\\fileshare\backups\NetworkController\\2017-04-25T16_53_13",
                    "ErrorMessage":  "",
                    "FailedResourcesList":  [

                                            ],
                    "SuccessfulResourcesList":  [
                                                    "/networking/v1/credentials/11ebfc10-438c-4a96-a1ee-8a048ce675be",
                                                    "/networking/v1/credentials/41229069-85d4-4352-be85-034d0c5f4658",
                                                    "/networking/v1/credentials/b2a82c93-2583-4a1f-91f8-232b801e11bb",
                                                    "/networking/v1/credentials/BackupUser",
                                                    "/networking/v1/credentials/fd5b1b96-b302-4395-b6cd-ed9703435dd1",
                                                    "/networking/v1/virtualNetworkManager/configuration",
                                                    "/networking/v1/virtualSwitchManager/configuration",
                                                    "/networking/v1/accessControlLists/f8b97a4c-4419-481d-b757-a58483512640",
                                                    "/networking/v1/logicalnetworks/24fa1af9-88d6-4cdc-aba0-66e38c1a7bb8",
                                                    "/networking/v1/logicalnetworks/48610528-f40b-4718-938e-99c2be76f1e0",
                                                    "/networking/v1/logicalnetworks/89035b49-1ee3-438a-8d7a-f93cbae40619",
                                                    "/networking/v1/logicalnetworks/a9c8eaa0-519c-4988-acd6-11723e9efae5",
                                                    "/networking/v1/logicalnetworks/d4ea002c-c926-4c57-a178-461d5768c31f",
                                                    "/networking/v1/macPools/11111111-1111-1111-1111-111111111111",
                                                    "/networking/v1/loadBalancerManager/config",
                                                    "/networking/v1/publicIPAddresses/2c502b2d-b39a-4be1-a85a-55ef6a3a9a1d",
                                                    "/networking/v1/GatewayPools/Default",
                                                    "/networking/v1/servers/4c4c4544-0058-5810-8056-b4c04f395931",
                                                    "/networking/v1/servers/4c4c4544-0058-5810-8057-b4c04f395931",
                                                    "/networking/v1/servers/4c4c4544-0058-5910-8056-b4c04f395931",
                                                    "/networking/v1/networkInterfaces/058430d3-af43-4328-a440-56540f41da50",
                                                    "/networking/v1/networkInterfaces/08756090-6d55-4dec-98d5-80c4c5a47db8",
                                                    "/networking/v1/networkInterfaces/2175d74a-aacd-44e2-80d3-03f39ea3bc5d",
                                                    "/networking/v1/networkInterfaces/2400c2c3-2291-4b0b-929c-9bb8da55851a",
                                                    "/networking/v1/networkInterfaces/4c695570-6faa-4e4d-a552-0b36ed3e0962",
                                                    "/networking/v1/networkInterfaces/7e317638-2914-42a8-a2dd-3a6d966028d6",
                                                    "/networking/v1/networkInterfaces/834e3937-f43b-4d3c-88be-d79b04e63bce",
                                                    "/networking/v1/networkInterfaces/9d668fe6-b1c6-48fc-b8b1-b3f98f47d508",
                                                    "/networking/v1/networkInterfaces/ac4650ac-c3ef-4366-96e7-d9488fb661ba",
                                                    "/networking/v1/networkInterfaces/b9f23e35-d79e-495f-a1c9-fa626b85ae13",
                                                    "/networking/v1/networkInterfaces/fdd929f1-f64f-4463-949a-77b67fe6d048",
                                                    "/networking/v1/virtualServers/15a891ee-7509-4e1d-878d-de0cb4fa35fd",
                                                    "/networking/v1/virtualServers/57416993-b410-44fd-9675-727cd4e98930",
                                                    "/networking/v1/virtualServers/5f8aebdc-ee5b-488f-ac44-dd6b57bd316a",
                                                    "/networking/v1/virtualServers/6c812217-5931-43dc-92a8-1da3238da893",
                                                    "/networking/v1/virtualServers/d78b7fa3-812d-4011-9997-aeb5ded2b431",
                                                    "/networking/v1/virtualServers/d90820a5-635b-4016-9d6f-bf3f1e18971d",
                                                    "/networking/v1/loadBalancerMuxes/5f8aebdc-ee5b-488f-ac44-dd6b57bd316a_suffix",
                                                    "/networking/v1/loadBalancerMuxes/d78b7fa3-812d-4011-9997-aeb5ded2b431_suffix",
                                                    "/networking/v1/loadBalancerMuxes/d90820a5-635b-4016-9d6f-bf3f1e18971d_suffix",
                                                    "/networking/v1/Gateways/15a891ee-7509-4e1d-878d-de0cb4fa35fd_suffix",
                                                    "/networking/v1/Gateways/57416993-b410-44fd-9675-727cd4e98930_suffix",
                                                    "/networking/v1/Gateways/6c812217-5931-43dc-92a8-1da3238da893_suffix",
                                                    "/networking/v1/virtualNetworks/b3dbafb9-2655-433d-b47d-a0e0bbac867a",
                                                    "/networking/v1/virtualNetworks/d705968e-2dc2-48f2-a263-76c7892fb143",
                                                    "/networking/v1/loadBalancers/24fa1af9-88d6-4cdc-aba0-66e38c1a7bb8_10.127.132.2",
                                                    "/networking/v1/loadBalancers/24fa1af9-88d6-4cdc-aba0-66e38c1a7bb8_10.127.132.3",
                                                    "/networking/v1/loadBalancers/24fa1af9-88d6-4cdc-aba0-66e38c1a7bb8_10.127.132.4"
                                                ],
                    "InProgressResourcesList":  [

                                                ],
                    "ProvisioningState":  "Succeeded",
                    "Credential":  {
                                        "Tags":  null,
                                        "ResourceRef":  "/credentials/BackupUser",
                                        "InstanceId":  "00000000-0000-0000-0000-000000000000",
                                        "Etag":  null,
                                        "ResourceMetadata":  null,
                                        "ResourceId":  null,
                                        "Properties":  null
                                    }
                }
}

从备份还原 SDN 基础结构

从备份还原所有所需的组件后,SDN 环境将恢复正常运行状态。

重要

这些步骤因还原的组件数量而异。

  1. 如有必要,请重新部署 Hyper-V 主机和所需的存储。

  2. 如有必要,请从备份还原网络控制器 VM、RAS 网关 VM 和多路复用器 VM。

  3. 在所有 Hyper-V 主机上停止 NC 主机代理和 SLB 主机代理:

    stop-service slbhostagent
    
    stop-service nchostagent
    
  4. 停止 RAS 网关 VM。

  5. 停止 SLB 多路复用器 VM。

  6. 使用 new-networkcontrollerrestore cmdlet 还原网络控制器。

  7. 检查还原操作的 ProvisioningState,以了解还原何时成功完成

  8. 如果使用 SCVMM,请使用在备份网络控制器的同时创建的备份来还原 SCVMM 数据库。

  9. 如果你要从备份还原工作负载 VM,现在请执行还原。

  10. 使用 debug-networkcontrollerconfigurationstate cmdlet 检查系统的运行状况。

$cred = Get-Credential
Debug-NetworkControllerConfigurationState -NetworkController "https://NC.contoso.com" -Credential $cred

Fetching ResourceType:     accessControlLists
Fetching ResourceType:     servers
Fetching ResourceType:     virtualNetworks
Fetching ResourceType:     networkInterfaces
Fetching ResourceType:     virtualGateways
Fetching ResourceType:     loadbalancerMuxes
Fetching ResourceType:     Gateways

示例:还原网络控制器数据库

$URI = "https://NC.contoso.com"
$Credential = Get-Credential

$ShareUserResourceId = "BackupUser"
$ShareCredential = Get-NetworkControllerCredential -ConnectionURI $URI -Credential $Credential | Where {$_.ResourceId -eq $ShareUserResourceId }

$RestoreProperties = New-Object Microsoft.Windows.NetworkController.NetworkControllerRestoreProperties
$RestoreProperties.RestorePath = "\\fileshare\backups\NetworkController\2017-04-25T16_53_13"
$RestoreProperties.Credential = $ShareCredential

$RestoreTime = (Get-Date).ToString("s").Replace(":", "_")
New-NetworkControllerRestore -ConnectionURI $URI -Credential $Credential -Properties $RestoreProperties -ResourceId $RestoreTime -Force

示例:检查网络控制器数据库还原状态

PS C:\ > get-networkcontrollerrestore -connectionuri $uri -credential $cred -ResourceId $restoreTime | convertto-json -depth 10
{
    "Tags":  null,
    "ResourceRef":  "/networkControllerRestore/2017-04-26T15_04_44",
    "InstanceId":  "22edecc8-a613-48ce-a74f-0418789f04f6",
    "Etag":  "W/\"f14f6b84-80a7-4b73-93b5-59a9c4b5d98e\"",
    "ResourceMetadata":  null,
    "ResourceId":  "2017-04-26T15_04_44",
    "Properties":  {
                    "RestorePath":  "\\\\sa18fs\\sa18n22\\NetworkController\\2017-04-25T16_53_13",
                    "ErrorMessage":  null,
                    "FailedResourcesList":  null,
                    "SuccessfulResourcesList":  null,
                    "ProvisioningState":  "Succeeded",
                    "Credential":  null
                }
}

有关可能出现的配置状态消息的信息,请参阅排查 Windows Server 2016 软件定义的网络堆栈问题