练习 - 高可用性和灾难恢复 - 已启用 Azure Arc 的 SQL 托管实例
重要
此学习路径中的模块是循序渐进的。 若要完成本练习,需要首先完成此路径中前面的模块。
练习 1 - 配置可读辅助数据库
在本练习中,将配置和使用可读辅助数据库,以便利用只读工作负载的辅助副本。
打开 Azure Data Studio。
展开“连接”选项卡。
展开“Azure Arc 控制器”。
展开“数据控制器”。
为业务关键层已启用 Arc 的 SQL 托管实例设置以下详细信息:
PowerShell$Env:SQLMIName = 'enter Business Critical Tier SQL Managed Instance Name here' $Env:MyNamespace = 'enter data controller namespace here' $Env:MyReadableSecondaries = 2
执行以下命令,以查看当前已启用 Arc 的 SQL 托管实例配置。 搜索副本以查看当前配置:
PowerShellaz 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" } ]
执行以下命令以配置两个可读辅助数据库:
PowerShellaz sql mi-arc update --name $Env:SQLMIName ` --readable-secondaries $Env:MyReadableSecondaries ` --k8s-namespace $Env:MyNamespace ` --use-k8s
重新执行步骤 6 以查看新配置。 现已将
ae-msl-sqlmi2-1
和ae-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" } ]
在步骤 8 中执行的 CLI 命令中搜索结果。 搜索终结点。 检索辅助终结点值。
在“连接”选项卡中,选择“新建连接”。 输入辅助终结点的连接详细信息。
选择“连接” 。
打开新的辅助终结点连接的新查询窗口,并执行以下命令。 服务器名称不应为当前主要副本:
SQLSelect @@ServerName; Use AdventureWorks2019 GO Select * From HumanResources.Employee;
练习 2 - 发现已启用 Azure Arc 的 SQL 托管实例常规用途层
在本练习中,将模拟 Kubernetes Pod 托管失败或丢失,并运行常规用途层已启用 Arc 的 SQL 托管实例容器。
打开 Azure Data Studio。
展开“连接”选项卡。
右键单击常规用途层 SQL 托管实例并选择“新建查询”。
执行以下查询,以显示对 SQL Server 实例和 AdventureWorks2019 数据库的访问:
SQLSelect @@ServerName; Use AdventureWorks2019 GO Select * From HumanResources.Employee;
打开终端窗口。
执行以下命令以查看 Kubernetes Pod:
PowerShell$Env:MyNamespace = 'enter your data controller namespace here' kubectl get pods -n $Env:MyNamespace
通过执行以下命令模拟 Pod 故障:
PowerShell$Env:MyGPPod = 'enter SQL Managed Instance Name here-0' kubectl delete pod $Env:MyGPPod -n $Env:MyNamespace
执行以下命令以查看 Pod 的状态:
PowerShellkubectl get pods -n $Env:MyNamespace
重新执行步骤 8 以监视 Pod 的重新部署。 Pod 恢复运行状态后,可以执行标准检查,以确保 SQL Server 实例可用并根据需要正常运行。
重新执行步骤 4 以查看实例是否再次可用。 这证明实例再次可用且可访问。
练习 3 - 发现已启用 Arc 的 SQL 托管实例业务关键层高可用性
在本练习中,将模拟 Kubernetes Pod 托管失败或丢失,并运行业务关键层已启用 Arc 的 SQL 托管实例容器。
打开 Azure Data Studio。
展开“连接”选项卡。
右键单击业务关键层 SQL 托管实例并选择“新建查询”。
执行以下查询,以显示对 SQL Server 实例和 AdventureWorks2019 数据库的访问:
SQLSelect @@ServerName; Use AdventureWorks2019 GO Select * From HumanResources.Employee;
打开终端窗口。
执行以下命令以查看 Kubernetes Pod:
PowerShell$Env:MyNamespace = 'enter your data controller namespace here' kubectl get pods -n $Env:MyNamespace
通过执行以下命令模拟 Pod 故障:
PowerShell$Env:MyBCPod = 'enter SQL Managed Instance Name here-0' kubectl delete pod $Env:MyBCPod -n $Env:MyNamespace
执行以下命令以查看 Pod 的状态:
PowerShellkubectl get pods -n $Env:MyNamespace
重新执行步骤 4,确定实例是否可用并在
SQLMI-1
上运行。 服务中断应尽量减少,应用程序需要重新连接功能。执行以下命令以查看包含的可用性组的状态:
PowerShell$Env:MyResource-group = 'enter your resource group name here' az sql mi-arc list --k8s-namespace $Env:MyNamespace --use-k8s
使用以下命令检查包含的可用性组中所有副本的状态。 在输出中搜索
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" } ] }
准备从现有主副本 (
'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
再次运行步骤 12 中的
az sql mi-arc update
CLI 命令以执行实际故障转移。再次运行步骤 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 数据库创建的自动备份。
打开 Azure Data Studio。
展开“连接”选项卡。
展开“Azure Arc 控制器”。
展开“Arc 数据控制器”。
右键单击已启用 Arc 的 SQL 托管实例并选择“管理”。
选择“备份”。
查看 AdventureWorks2019 示例数据库的最早时间点和最晚时间点。
选择“还原”图标以启动时点恢复过程。
输入新还原的数据库的名称。
输入要还原到的时间点,此时间点应介于最早时间点和最晚时间点之间。
选择“还原”。
若要监视时点恢复的进度,请在 Azure Data Studio 终端窗口中执行以下命令:
PowerShellkubectl get sqlmirestoretask -n 'enter your data controller namespace here'
备注
执行此命令可能需要一段时间,具体取决于你为时点恢复选择的时间。
刷新“备份”选项卡上的数据库列表。
连接到 SQL Server 实例并确认数据库存在,你可以查询数据。
练习 5 - 部署已启用 Arc 的 SQL 托管实例 Azure 故障转移组
在此练习中,我们将使用已启用 Arc 的 SQL 托管实例业务关键环境。 该环境包括一个已启用 Arc 的 SQL 托管实例(位于主站点)和一个重复的已启用 Arc 的 SQL 托管实例(位于辅助站点)。
先决条件
在处理之前,请确保先完成以下任务:
- 有权访问主站点中受支持的 Kubernetes 群集。
- 有权访问辅助站点中受支持的 Kubernetes 群集。
- 确保将许可证类型设置为“灾难恢复”。
- 有权访问已启用 Azure Arc 的 SQL 托管实例可以访问的共享本地存储位置。
- 完成此学习路径中的以下模块:
- 模块 1,练习 - 部署 Azure Arc 数据控制器(针对主站点)。
- 模块 2,练习 - 部署已启用 Azure Arc 的 SQL 托管实例(针对主站点)。
- 模块 2,练习 - 将 AdventureWorks2019 还原到主站点已启用 Arc 的 SQL 托管实例。
- 模块 1,练习 - 部署 Azure Arc 数据控制器(针对辅助站点)。
- 模块 2,练习 - 部署已启用 Azure Arc 的 SQL 托管实例(针对辅助站点)。
部署已启用 Arc 的 SQL 托管实例故障转移组
在 Azure Data Studio 中,打开终端窗口。
确保已连接到 Azure 订阅。
准备已启用 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'
确保已连接到主站点 Kubernetes 群集:
PowerShellKubectl config use-context $Env:MyPrimaryCluster
检索主站点的镜像证书。 这需要两个站点都可以访问。 在此示例中,使用本地用户帐户主位置。 请确保为环境适当地设置此项。 可以确认在配置的本地位置创建
sqlprimary.pem
证书文件。PowerShellaz sql mi-arc get-mirroring-cert --subscription $Env:MySubcriptionID ` --name $Env:MyPrimaryInstance ` --cert-file "$Env:MyCertFullPath\$Env:MyPrimaryCertFile" ` --k8s-namespace $Env:MyPrimaryNamespace ` --use-k8s
检索主站点的 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"
准备已启用 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'
确保已连接到辅助站点 Kubernetes 群集:
PowerShellKubectl config use-context $Env:MySecondaryCluster
检索辅助站点的镜像证书。 这需要两个站点都可以访问。 在此示例中,我们使用本地用户帐户主页位置。 请确保为环境适当地设置此项。 可以确认在配置的本地位置创建
sqlsecondary.pem
证书文件。PowerShellaz sql mi-arc get-mirroring-cert --subscription $Env:MySubcriptionID ` --name $Env:MySecondaryInstance ` --cert-file "$Env:MyCertFullPath\$Env:MySecondaryCertFile" ` --k8s-namespace $Env:MySecondaryNamespace ` --use-k8s
检索辅助站点的 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"
确保已连接到主站点 Kubernetes 群集:
PowerShellKubectl config use-context $Env:MyPrimaryCluster
在主站点上创建 Azure 故障转移组主资源:
PowerShellaz 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"
确保已连接到辅助站点 Kubernetes 群集。
PowerShellKubectl config use-context $Env:MySecondaryCluster
在辅助站点上创建 Azure 故障转移组辅助资源。
PowerShellaz 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"
打开 SQL Server Management Studio (SSMS) 并连接到主站点实例的主外部终结点。 展开“Always On 高可用性”。 现在应会看到新创建的 Azure 故障转移组。
在 SSMS 中,连接到辅助站点实例的主外部终结点。 展开“Always On 高可用性”。 现在应会看到新创建的 Azure 故障转移组。
展开辅助站点实例上的数据库树。 应会看到以前还原到主站点实例的 AdventureWorks2019 数据库。
请注意,无需执行任何任务即可将主站点数据库连接到辅助站点实例。 创建 Azure 故障转移组(分布式可用性组)后,主实例上的所有数据库会自动将种子设定到辅助站点。 根据数据库的大小,主站点和辅助站点之间的网络带宽将决定数据库同步的时间。