练习 - 高可用性和灾难恢复 - 已启用 Azure Arc 的 SQL 托管实例

已完成 100 XP

重要

此学习路径中的模块是循序渐进的。 若要完成本练习,需要首先完成此路径中前面的模块

练习 1 - 配置可读辅助数据库

在本练习中,将配置和使用可读辅助数据库,以便利用只读工作负载的辅助副本。

  1. 打开 Azure Data Studio。

  2. 展开“连接”选项卡

  3. 展开“Azure Arc 控制器”。

  4. 展开“数据控制器”。

  5. 为业务关键层已启用 Arc 的 SQL 托管实例设置以下详细信息:

    PowerShell
    $Env:SQLMIName = 'enter Business Critical Tier SQL Managed Instance Name here'
    $Env:MyNamespace = 'enter data controller namespace here'
    $Env:MyReadableSecondaries = 2
    
  6. 执行以下命令,以查看当前已启用 Arc 的 SQL 托管实例配置。 搜索副本以查看当前配置:

    PowerShell
    az sql mi-arc show -n $Env:SQLMIName `
        --k8s-namespace $Env:MyNamespace `
        --use-k8s
    
    输出
     "replicas": [
        {
          "availabilityMode": "SYNCHRONOUS_COMMIT",
          "connectedState": "CONNECTED",
          "replicaName": "ae-msl-sqlmi2-0",
          "role": "PRIMARY",
          "secondaryRoleAllowConnections": "ALL",
          "synchronizationState": "HEALTHY"
        },
        {
          "availabilityMode": "SYNCHRONOUS_COMMIT",
          "connectedState": "CONNECTED",
          "replicaName": "ae-msl-sqlmi2-1",
          "role": "SECONDARY",
          "secondaryRoleAllowConnections": "ALL",
          "synchronizationState": "HEALTHY"
        },
        {
          "availabilityMode": "SYNCHRONOUS_COMMIT",
          "connectedState": "CONNECTED",
          "replicaName": "ae-msl-sqlmi2-2",
          "role": "SECONDARY",
          "secondaryRoleAllowConnections": "NO",
          "synchronizationState": "HEALTHY"
        }
      ]
    
  7. 执行以下命令以配置两个可读辅助数据库:

    PowerShell
    az sql mi-arc update --name $Env:SQLMIName `
        --readable-secondaries $Env:MyReadableSecondaries `
        --k8s-namespace $Env:MyNamespace `
        --use-k8s
    

    配置可读辅助数据库的屏幕截图。

  8. 重新执行步骤 6 以查看新配置。 现已将 ae-msl-sqlmi2-1ae-msl-sqlmi2-2 配置为可读辅助数据库。

    输出
    "replicas": [
        {
          "availabilityMode": "SYNCHRONOUS_COMMIT",
          "connectedState": "CONNECTED",
          "replicaName": "ae-msl-sqlmi2-0",
          "role": "PRIMARY",
          "secondaryRoleAllowConnections": "ALL",
          "synchronizationState": "HEALTHY"
        },
        {
          "availabilityMode": "SYNCHRONOUS_COMMIT",
          "connectedState": "CONNECTED",
          "replicaName": "ae-msl-sqlmi2-1",
          "role": "SECONDARY",
          "secondaryRoleAllowConnections": "ALL",
          "synchronizationState": "HEALTHY"
        },
        {
          "availabilityMode": "SYNCHRONOUS_COMMIT",
          "connectedState": "CONNECTED",
          "replicaName": "ae-msl-sqlmi2-2",
          "role": "SECONDARY",
          "secondaryRoleAllowConnections": "ALL",
          "synchronizationState": "HEALTHY"
        }
      ]
    
  9. 在步骤 8 中执行的 CLI 命令中搜索结果。 搜索终结点。 检索辅助终结点值。

  10. 在“连接”选项卡中,选择“新建连接”。 输入辅助终结点的连接详细信息。

  11. 选择“连接” 。

  12. 打开新的辅助终结点连接的新查询窗口,并执行以下命令。 服务器名称不应为当前主要副本:

    SQL
    Select @@ServerName;
    
    Use AdventureWorks2019
    GO
    
    Select *
    From HumanResources.Employee;
    

练习 2 - 发现已启用 Azure Arc 的 SQL 托管实例常规用途层

在本练习中,将模拟 Kubernetes Pod 托管失败或丢失,并运行常规用途层已启用 Arc 的 SQL 托管实例容器。

  1. 打开 Azure Data Studio。

  2. 展开“连接”选项卡。

  3. 右键单击常规用途层 SQL 托管实例并选择“新建查询”

  4. 执行以下查询,以显示对 SQL Server 实例和 AdventureWorks2019 数据库的访问:

    SQL
    Select @@ServerName;
    
    Use AdventureWorks2019
    GO
    
    Select *
    From HumanResources.Employee;
    
  5. 打开终端窗口。

  6. 执行以下命令以查看 Kubernetes Pod:

    PowerShell
    $Env:MyNamespace = 'enter your data controller namespace here'
    kubectl get pods -n $Env:MyNamespace
    

    此命名空间的 SQL 托管实例常规用途层高可用性 Pod kubectl 结果的屏幕截图。

  7. 通过执行以下命令模拟 Pod 故障:

    PowerShell
    $Env:MyGPPod = 'enter SQL Managed Instance Name here-0'
    kubectl delete pod $Env:MyGPPod -n $Env:MyNamespace 
    

    SQL 托管实例常规用途层 HA Pod 2 的屏幕截图。

  8. 执行以下命令以查看 Pod 的状态:

    PowerShell
    kubectl get pods -n $Env:MyNamespace
    

    SQL 托管实例常规用途层 HA Pod 3 的屏幕截图。

  9. 重新执行步骤 8 以监视 Pod 的重新部署。 Pod 恢复运行状态后,可以执行标准检查,以确保 SQL Server 实例可用并根据需要正常运行。

    SQL 托管实例常规用途层高可用性 Pod 4 的屏幕截图。

  10. 重新执行步骤 4 以查看实例是否再次可用。 这证明实例再次可用且可访问。

练习 3 - 发现已启用 Arc 的 SQL 托管实例业务关键层高可用性

在本练习中,将模拟 Kubernetes Pod 托管失败或丢失,并运行业务关键层已启用 Arc 的 SQL 托管实例容器。

  1. 打开 Azure Data Studio。

  2. 展开“连接”选项卡。

  3. 右键单击业务关键层 SQL 托管实例并选择“新建查询”

  4. 执行以下查询,以显示对 SQL Server 实例和 AdventureWorks2019 数据库的访问:

    SQL
    Select @@ServerName;
    
    Use AdventureWorks2019
    GO
    
    Select *
    From HumanResources.Employee;
    
  5. 打开终端窗口。

  6. 执行以下命令以查看 Kubernetes Pod:

    PowerShell
    $Env:MyNamespace = 'enter your data controller namespace here'
    kubectl get pods -n $Env:MyNamespace
    

    SQL 托管实例业务关键层高可用性 Pod 1 的屏幕截图。

  7. 通过执行以下命令模拟 Pod 故障:

    PowerShell
    $Env:MyBCPod = 'enter SQL Managed Instance Name here-0'
    kubectl delete pod $Env:MyBCPod -n $Env:MyNamespace 
    

    删除 Pod 命令的屏幕截图。

  8. 执行以下命令以查看 Pod 的状态:

    PowerShell
    kubectl get pods -n $Env:MyNamespace
    

    Pod 的屏幕截图,其中显示了新启动的 Pod。

  9. 重新执行步骤 4,确定实例是否可用并在 SQLMI-1 上运行。 服务中断应尽量减少,应用程序需要重新连接功能。

  10. 执行以下命令以查看包含的可用性组的状态:

    PowerShell
    $Env:MyResource-group = 'enter your resource group name here'
    az sql mi-arc list --k8s-namespace $Env:MyNamespace --use-k8s
    
  11. 使用以下命令检查包含的可用性组中所有副本的状态。 在输出中搜索 highAvailability

    PowerShell
    $Env:SQLMIName = 'enter your SQLMI name here'
    az sql mi-arc show --name $Env:SQLMIName --resource-group $Env:MyresourceGroup
    
    输出
    "highAvailability": {
            "healthState": "Healthy",
            "lastUpdateTime": "2022-06-07T00:39:38.927189Z",
            "mirroringCertificate": "-----BEGIN CERTIFICATE-----\n \n-----END CERTIFICATE-----\n",
            "replicas": [
              {
                "availabilityMode": "SYNCHRONOUS_COMMIT",
                "connectedState": "CONNECTED",
                "replicaName": "ae-msl-sqlmi2-0",
                "role": "SECONDARY",
                "secondaryRoleAllowConnections": "ALL",
                "synchronizationState": "HEALTHY"
              },
              {
                "availabilityMode": "SYNCHRONOUS_COMMIT",
                "connectedState": "CONNECTED",
                "replicaName": "ae-msl-sqlmi2-1",
                "role": "PRIMARY",
                 "secondaryRoleAllowConnections": "ALL",
                "synchronizationState": "HEALTHY"
              },
              {
                "availabilityMode": "SYNCHRONOUS_COMMIT",
                 "connectedState": "CONNECTED",
                "replicaName": "ae-msl-sqlmi2-2",
                "role": "SECONDARY",
                "secondaryRoleAllowConnections": "ALL",
                "synchronizationState": "HEALTHY"
              }
            ]
          }
    
  12. 准备从现有主副本 ('your sqlmi name-1') 手动故障转移回原始主副本 ('your sqlmi name-0')。 在“终端”窗口中,执行以下命令来设置首选的主副本:

    PowerShell
    $Env:MyPreferredPrimaryReplica = 'your sqlmi name-1'
    az sql mi-arc update --name $Env:SQLMIName `
      --k8s-namespace $Env:MyNamespace `
      --use-k8s `
      --preferred-primary-replica $Env:MyPreferredPrimaryReplica
    

    SQL 托管实例业务关键层高可用性手动故障转移的屏幕截图。

  13. 再次运行步骤 12 中的 az sql mi-arc update CLI 命令以执行实际故障转移。

  14. 再次运行步骤 11 以确认更改的主要副本角色。

    输出
    "highAvailability": {
            "healthState": "Healthy",
            "lastUpdateTime": "2022-06-07T00:39:38.927189Z",
            "mirroringCertificate": "-----BEGIN CERTIFICATE-----\n \n-----END CERTIFICATE-----\n",
            "replicas": [
              {
                "availabilityMode": "SYNCHRONOUS_COMMIT",
                "connectedState": "CONNECTED",
                "replicaName": "ae-msl-sqlmi2-0",
                "role": "PRIMARY",
                "secondaryRoleAllowConnections": "ALL",
                "synchronizationState": "HEALTHY"
              },
              {
                "availabilityMode": "SYNCHRONOUS_COMMIT",
                "connectedState": "CONNECTED",
                "replicaName": "ae-msl-sqlmi2-1",
                "role": "SECONDARY",
                "secondaryRoleAllowConnections": "ALL",
                "synchronizationState": "HEALTHY"
              },
              {
                "availabilityMode": "SYNCHRONOUS_COMMIT",
                "connectedState": "CONNECTED",
                "replicaName": "ae-msl-sqlmi2-2",
                "role": "SECONDARY",
                "secondaryRoleAllowConnections": "ALL",
                "synchronizationState": "HEALTHY"
              }
            ]
          }
    

练习 4 - 时间点还原

在本练习中,将使用为以前还原到已启用 Arc 的 SQL 托管实例环境的 AdventureWorks2019 数据库创建的自动备份。

  1. 打开 Azure Data Studio。

  2. 展开“连接”选项卡

  3. 展开“Azure Arc 控制器”。

  4. 展开“Arc 数据控制器”。

  5. 右键单击已启用 Arc 的 SQL 托管实例并选择“管理”

  6. 选择“备份”。

  7. 查看 AdventureWorks2019 示例数据库的最早时间点和最晚时间点。

  8. 选择“还原”图标以启动时点恢复过程。

    已启用 Arc 的 SQL 托管实例时间点还原点的屏幕截图。

  9. 输入新还原的数据库的名称。

  10. 输入要还原到的时间点,此时间点应介于最早时间点和最晚时间点之间。

  11. 选择“还原”。

    如何为 Azure Data Studio 配置时点恢复的屏幕截图。

  12. 若要监视时点恢复的进度,请在 Azure Data Studio 终端窗口中执行以下命令:

    PowerShell
    kubectl get sqlmirestoretask -n 'enter your data controller namespace here'
    

    备注

    执行此命令可能需要一段时间,具体取决于你为时点恢复选择的时间。

  13. 刷新“备份”选项卡上的数据库列表。

    已启用 Arc 的 SQL 托管实例时间点还原 GUI 的屏幕截图。

  14. 连接到 SQL Server 实例并确认数据库存在,你可以查询数据。

练习 5 - 部署已启用 Arc 的 SQL 托管实例 Azure 故障转移组

在此练习中,我们将使用已启用 Arc 的 SQL 托管实例业务关键环境。 该环境包括一个已启用 Arc 的 SQL 托管实例(位于主站点)和一个重复的已启用 Arc 的 SQL 托管实例(位于辅助站点)。

先决条件

在处理之前,请确保先完成以下任务:

  1. 有权访问主站点中受支持的 Kubernetes 群集。
  2. 有权访问辅助站点中受支持的 Kubernetes 群集。
  3. 确保将许可证类型设置为“灾难恢复”。
  4. 有权访问已启用 Azure Arc 的 SQL 托管实例可以访问的共享本地存储位置。
  5. 完成此学习路径中的以下模块:
    1. 模块 1,练习 - 部署 Azure Arc 数据控制器(针对主站点)。
    2. 模块 2,练习 - 部署已启用 Azure Arc 的 SQL 托管实例(针对主站点)。
    3. 模块 2,练习 - 将 AdventureWorks2019 还原到主站点已启用 Arc 的 SQL 托管实例。
    4. 模块 1,练习 - 部署 Azure Arc 数据控制器(针对辅助站点)。
    5. 模块 2,练习 - 部署已启用 Azure Arc 的 SQL 托管实例(针对辅助站点)。

部署已启用 Arc 的 SQL 托管实例故障转移组

  1. 在 Azure Data Studio 中,打开终端窗口。

  2. 确保已连接到 Azure 订阅。

  3. 准备已启用 Arc 的 SQL 托管实例主站点参数值:

    Powershell
    ## Primary Site Arc-enabled SQL Managed Instance parameter details
    $Env:MySubscription = 'enter your subscription id here'
    $Env:MyPrimaryResourceGroup = 'enter your primary site resource group name'
    $Env:MyPrimaryNamespace = 'enter your primary site data controller namespace'
    $Env:MyPrimaryInstance = 'enter your primary site SQL Managed Instance name'
    $Env:MyCertFullPath = 'enter you local path/sqlcerts'
    $Env:MyPrimaryCertFile = 'sqlprimary.pem'  ## Use anyname you wish
    $Env:MyAFG = 'aemsldag' ## Use any name you wish
    $Env:MyPrimaryDAG = 'sqlprimary-dag'  ## Use anyname you wish
    $Env:MyPrimaryCluster = 'enter your primary site kubernetes cluster name here'
    

    已启用 Arc 的 SQL 托管实例 DR 主站点准备的屏幕截图。

  4. 确保已连接到主站点 Kubernetes 群集:

    PowerShell
    Kubectl config use-context $Env:MyPrimaryCluster
    

    已启用 Arc 的 SQL 托管实例主站点群集上下文的屏幕截图。

  5. 检索主站点的镜像证书。 这需要两个站点都可以访问。 在此示例中,使用本地用户帐户主位置。 请确保为环境适当地设置此项。 可以确认在配置的本地位置创建 sqlprimary.pem 证书文件。

    PowerShell
    az sql mi-arc get-mirroring-cert --subscription $Env:MySubcriptionID `
      --name $Env:MyPrimaryInstance  `
      --cert-file "$Env:MyCertFullPath\$Env:MyPrimaryCertFile" `
      --k8s-namespace $Env:MyPrimaryNamespace `
      --use-k8s
    
  6. 检索主站点的 SQL 托管实例镜像终结点 IP 地址:

    PowerShell
    $PrimaryMirroringEndpoint = $(
      az sql mi-arc show -n $Env:MyPrimaryInstance `
          --resource-group $Env:MyPrimaryResourceGroup `
          -o tsv `
          --query 'properties.k8SRaw.status.endpoints.mirroring'
    )
    
    $Env:MyPrimaryMirroringIP = "tcp://$PrimaryMirroringEndpoint"
    
  7. 准备已启用 Arc 的 SQL 托管实例辅助站点参数值:

    Powershell
    $Env:MySecondaryResourceGroup = 'enter your secondary site resource group name'
    $Env:MySecondaryNamespace = 'enter your secondary site data controller namespace'
    $Env:MySecondaryInstance = 'enter your secondary site SQL Managed Instance name'
    $Env:MySecondaryCertFile = 'sqlsecondary.pem'  ## Use anyname you wish
    $Env:MySecondaryDAG = 'sqlsecondary-dag'  ## Use anyname you wish
    $Env:MySecondaryCluster = 'enter your secondary site kubernetes cluster name here'
    

    已启用 Arc 的 SQL 托管实例 DR 辅助站点准备的屏幕截图。

  8. 确保已连接到辅助站点 Kubernetes 群集:

    PowerShell
    Kubectl config use-context $Env:MySecondaryCluster
    

    已启用 Arc 的 SQL 托管实例辅助站点群集上下文的屏幕截图。

  9. 检索辅助站点的镜像证书。 这需要两个站点都可以访问。 在此示例中,我们使用本地用户帐户主页位置。 请确保为环境适当地设置此项。 可以确认在配置的本地位置创建 sqlsecondary.pem 证书文件。

    PowerShell
    az sql mi-arc get-mirroring-cert --subscription $Env:MySubcriptionID `
      --name $Env:MySecondaryInstance `
      --cert-file "$Env:MyCertFullPath\$Env:MySecondaryCertFile" `
      --k8s-namespace $Env:MySecondaryNamespace `
      --use-k8s
    
  10. 检索辅助站点的 SQL 托管实例镜像终结点 IP 地址:

    PowerShell
    $SecondaryMirroringEndpoint = $(
      az sql mi-arc show -n $Env:MySecondaryInstance  `
          --resource-group $Env:MySecondaryResourceGroup `
          -o tsv `
          --query 'properties.k8SRaw.status.endpoints.mirroring'
    )
    
    $Env:MySecondaryMirroringIP = "tcp://$SecondaryMirroringEndpoint" 
    
  11. 确保已连接到主站点 Kubernetes 群集:

    PowerShell
    Kubectl config use-context $Env:MyPrimaryCluster
    
  12. 在主站点上创建 Azure 故障转移组主资源:

    PowerShell
    az sql instance-failover-group-arc create --shared-name $Env:MyAFG `
      --name $Env:MyPrimaryDAG  `
      --mi $Env:MyPrimaryInstance `
      --role primary `
      --partner-mi $Env:MySecondaryInstance  `
      --partner-mirroring-url $Env:MySecondaryMirroringIP `
      --partner-mirroring-cert-file "$Env:MyCertFullPath\$Env:MySecondaryCertFile" `
      --k8s-namespace $Env:MyPrimaryNamespace `
      --use-k8s
    
      ## The output should display: Deploying $Env:MyPrimaryDAG in namespace $Env:MyPrimaryNamespace
      ## $Env:MyPrimaryDAG is Ready
    
    ## Confirm primary resource has been created
    az sql instance-failover-group-arc show --subscription $Env:MySubcriptionID `
      --name $Env:MyPrimaryDAG `
      --k8s-namespace $Env:MyPrimaryNamespace `
      --use-k8s
    
    ## The output should be similar to this:
      "sharedName": "aemsldag",
      "sourceMI": "ae-msl-sqlmi2",
      "partnerMI": "ae-msl-sqlmi3",
      "partnerMirroringURL": "tcp://20.70.91.199:5022"
    
  13. 确保已连接到辅助站点 Kubernetes 群集。

    PowerShell
    Kubectl config use-context $Env:MySecondaryCluster
    
  14. 在辅助站点上创建 Azure 故障转移组辅助资源。

    PowerShell
    az sql instance-failover-group-arc create --shared-name $Env:MyAFG `
      --name $Env:MySecondaryDAG `
      --mi $Env:MySecondaryInstance `
      --role secondary `
      --partner-mi $Env:MyPrimaryInstance `
      --partner-mirroring-url $Env:MyPrimaryMirroringIP `
      --partner-mirroring-cert-file "$Env:MyCertFullPath\$Env:MyPrimaryCertFile" `
      --k8s-namespace $Env:MySecondaryNamespace `
      --use-k8s
    
      ## The output should display: Deploying $Env:MySecondaryDAG in namespace $Env:MySecondaryNamespace
      ## $Env:MySecondaryDAG is Ready
    
    ## Confirm secondary resource has been created
    az sql instance-failover-group-arc show --subscription $Env:MySubcriptionID `
      --name $Env:MySecondaryDAG `
      --k8s-namespace $Env:MySecondaryNamespace `
      --use-k8s 
    
    ## The output should be similar to this:
      "sharedName": "aemsldag",
      "sourceMI": "ae-msl-sqlmi3",
      "partnerMI": "ae-msl-sqlmi2",
      "partnerMirroringURL": "tcp://20.92.195.233:5022"
    
  15. 打开 SQL Server Management Studio (SSMS) 并连接到主站点实例的主外部终结点。 展开“Always On 高可用性”。 现在应会看到新创建的 Azure 故障转移组。

  16. 在 SSMS 中,连接到辅助站点实例的主外部终结点。 展开“Always On 高可用性”。 现在应会看到新创建的 Azure 故障转移组。

  17. 展开辅助站点实例上的数据库树。 应会看到以前还原到主站点实例的 AdventureWorks2019 数据库。

请注意,无需执行任何任务即可将主站点数据库连接到辅助站点实例。 创建 Azure 故障转移组(分布式可用性组)后,主实例上的所有数据库会自动将种子设定到辅助站点。 根据数据库的大小,主站点和辅助站点之间的网络带宽将决定数据库同步的时间。


下一单元: 知识检查

上一篇 下一步