Réplica de reprovisionamento - Instância gerenciada do SQL habilitada pelo Azure Arc

Este artigo descreve como provisionar uma nova réplica para substituir uma réplica existente na Instância Gerenciada do SQL habilitada pelo Azure Arc.

Ao reprovisionar uma réplica, você recria uma nova réplica de instância gerenciada para uma Instância Gerenciada SQL habilitada pela implantação do Azure Arc. Realize essa tarefa para substituir uma réplica com falha na sincronização, por exemplo, devido à corrupção dos dados no PV (volume persistente) dessa instância ou a algum problema recorrente de SQL.

É possível reprovisionar uma réplica por meio da CLI az ou por meio do kubectl. Não é possível reprovisionar uma réplica por meio do portal do Azure.

Pré-requisitos

Só é possível reprovisionar uma réplica em uma instância com diversas réplicas.

Por meio da CLI do az

O grupo de comandos az sql mi-arc da CLI do Azure inclui reprovision-replica. Para reprovisionar uma réplica, atualize o exemplo a seguir. Substitua <instance_name-replica_number> pelo nome da instância e pelo número da réplica que você deseja substituir. Substituir <namespace>.

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

Por exemplo, para reprovisionar a réplica 2 da instância mySqlInstance no namespace arc, use:

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

O comando é executado até a conclusão, quando o console retorna o nome da tarefa do Kubernetes:

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

Nesse momento, é possível examinar a tarefa ou excluí-la.

Examinar a tarefa

O exemplo a seguir retorna informações sobre o estado da tarefa do Kubernetes:

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

Importante

Após o reprovisionamento de uma réplica, é necessário excluir a tarefa antes de realizar outro reprovisionamento na mesma instância. Para obter mais informações, confira Limitações.

Excluir a tarefa

O exemplo a seguir exclui a tarefa do Kubernetes:

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

Parâmetro opcional: --no-wait

Há um parâmetro --no-wait opcional para o comando. Se você enviar a solicitação com --no-wait, a saída incluirá o nome da tarefa a ser monitorada. Por exemplo:

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.

Por meio de kubectl

Para o reprovisionamento com kubectl, crie um recurso personalizado. Se você quiser criar um recurso personalizado para o reprovisionamento, crie um arquivo .yaml com a seguinte estrutura:

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

Para usar o mesmo exemplo acima, réplica 2 mySqlinstance, a carga útil será:

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

Monitorar ou excluir a tarefa

Depois da aplicação do yaml por meio de kubectl apply, é possível monitorar ou excluir a tarefa por meio do 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

Importante

Após o reprovisionamento de uma réplica, é necessário excluir a tarefa antes de realizar outro reprovisionamento na mesma instância. Para obter mais informações, confira Limitações.

Limitações

  • A tarefa rejeita tentativas de reprovisionamento da réplica primária atual. Se a réplica primária atual estiver corrompida e precisar de reprovisionamento, faça o failover para uma réplica diferente e solicite-o.

  • O reprovisionamento de diversas réplicas na mesma instância é executado em série. As tarefas são enfileiradas e mantidas no estado Creating até que a tarefa atualmente ativa seja concluída e excluída. Não há limpeza automática de uma tarefa concluída, portanto, essa serialização afetará você mesmo que você execute o comando az sql mi-arc reprovision-replica de maneira síncrona e aguarde a conclusão antes de solicitar outro reprovisionamento. Em todos os casos, você precisa remover a tarefa por meio de kubectl antes que outro reprovisionamento possa ser executado na mesma instância.

Mais detalhes sobre a serialização de tarefas de reprovisionamento: se você tiver várias solicitações de reprovisionamento de uma réplica em uma instância, a saída de um kubectl get SqlManagedInstanceReprovisionReplicaTask será parecida com o seguinte:

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

Essa última entrada para a réplica c-sql-kkncursza-1, sql-reprov-replica-c-sql-kkncursza-1-1664217434.531035, permanecerá no status Creating até que o sql-reprov-replica-c-sql-kkncursza-1-1664217002.376132 concluído seja removido.