你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

重新预配副本 (replica) - 由 Azure Arc 启用SQL 托管实例

本文介绍如何预配新的副本 (replica)来替换 Azure Arc 启用的SQL 托管实例中的现有副本 (replica)。

重新预配副本 (replica)时,请为 Azure Arc 部署启用的SQL 托管实例重新生成新的托管实例副本 (replica)。 使用此任务可以替换同步失败的副本,例如,由于该实例的持久卷 (PV) 上的数据损坏,或由于某些重复出现的 SQL 问题。

可以通过 az CLI通过 kubectl 来重新预配副本。 无法从 Azure 门户重新预配副本。

先决条件

只能在多副本实例上重新预配副本。

通过 az CLI

Azure CLI az sql mi-arc 命令组包括 reprovision-replica。 要重新预配副本,请更新以下示例。 将 <instance_name-replica_number> 替换为要替换的副本的实例名称和副本编号。 替换 <namespace>

az sql mi-arc reprovision-replica -n <instance_name-replica_number> -k <namespace> --use-k8s

例如,要重新预配命名空间 arc 中实例 mySqlInstance 的副本 2,请使用:

az sql mi-arc reprovision-replica -n mySqlInstance-2 -k arc --use-k8s

命令一直运行到完成,此时控制台将返回 Kubernetes 任务的名称:

sql-reprov-replica-mySqlInstance-2-1664217002.376132 is Ready

此时,你可以检查任务,也可以将其删除。

检查任务

以下示例返回有关 Kubernetes 任务状态的信息:

kubectl describe SqlManagedInstanceReprovisionReplicaTask sql-reprov-replica-mySqlInstance-2-1664217002.376132 -n arc

重要

重新预配副本后,必须先删除该任务,然后才能在同一实例上运行另一个重新预配任务。 有关详细信息,请参阅限制

删除任务

以下示例删除 Kubernetes 任务:

kubectl delete SqlManagedInstanceReprovisionReplicaTask sql-reprov-replica-mySqlInstance-2-1664217002.376132 -n arc

选项参数:--no-wait

该命令有一个可选的 --no-wait 参数。 如果发送请求时包含 --no-wait,则输出将包括要监视的任务的名称。 例如:

az sql mi-arc reprovision-replica -n mySqlInstance-2 -k arc --use-k8s --no-wait
Reprovisioning replica mySqlInstance-2 in namespace `arc`. Please use
`kubectl get -n arc SqlManagedInstanceReprovisionReplicaTask sql-reprov-replica-mySqlInstance-2-1664217434.531035`
to check its status or
`kubectl get -n arc SqlManagedInstanceReprovisionReplicaTask`
to view all reprovision tasks.

通过 kubectl

要使用 kubectl 重新预配,请创建自定义资源。 若要创建要重新预配的自定义资源,可以使用以下结构创建 .yaml 文件:

apiVersion: tasks.sql.arcdata.microsoft.com/v1beta1
kind: SqlManagedInstanceReprovisionReplicaTask
metadata:
  name: <task name you make up>
  namespace: <namespace>
spec:
  replicaName: instance_name-replica_number

若要使用与上述 mySqlinstance 副本 2 相同的示例,有效负载为:

apiVersion: tasks.sql.arcdata.microsoft.com/v1beta1
kind: SqlManagedInstanceReprovisionReplicaTask
metadata:
  name: my-reprovision-task-mySqlInstance-2
  namespace: arc
spec:
  replicaName: mySqlInstance-2

监视或删除任务

通过 kubectl apply 应用 yaml 后,可以通过 kubectl 监视或删除任务:

kubectl get -n arc SqlManagedInstanceReprovisionReplicaTask my-reprovision-task-mySqlInstance-2
kubectl describe -n arc SqlManagedInstanceReprovisionReplicaTask my-reprovision-task-mySqlInstance-2
kubectl delete -n arc SqlManagedInstanceReprovisionReplicaTask my-reprovision-task-mySqlInstance-2

重要

重新预配副本后,必须先删除该任务,然后才能在同一实例上运行另一个重新预配任务。 有关详细信息,请参阅限制

限制

  • 任务拒绝了重新预配当前主副本的尝试。 如果当前主副本已损坏并需要重新预配,请故障切换到其他副本,然后请求重新预配。

  • 在同一实例中重新预配多个副本会串行运行。 任务排队并保持 Creating 状态,直到当前活动任务完成并且并被删除。 无法自动清理已完成的任务,因此,即使同步运行 az sql mi-arc reprovision-replica 命令并等待该命令完成,然后再请求另一个重新预配,此序列化也会影响你。 在所有情况下,必须首先通过 kubectl 删除任务,然后同一实例上的另一个重新预配才会运行。

有关重新预配任务的序列化的更多详细信息:如果有多个请求在一个实例中重新预配副本,则可能会在 kubectl get SqlManagedInstanceReprovisionReplicaTask 的输出中看到如下内容:

kubectl get SqlManagedInstanceReprovisionReplicaTask -n arc
NAME                                                     STATUS      AGE
sql-reprov-replica-c-sql-djlexlmty-1-1664217344.304601   Completed   13m
sql-reprov-replica-c-sql-kkncursza-1-1664217002.376132   Completed   19m
sql-reprov-replica-c-sql-kkncursza-1-1664217434.531035   Creating    12m

副本 c-sql-kkncursza-1 的最后一个条目 sql-reprov-replica-c-sql-kkncursza-1-1664217434.531035 将保持 Creating 状态,直到已完成的一个 sql-reprov-replica-c-sql-kkncursza-1-1664217002.376132 被删除。