レプリカの再プロビジョニング - Azure Arc 対応 SQL Managed Instance
この記事では、Azure Arc 対応 SQL Managed Instance の既存のレプリカを置き換えるために新しいレプリカをプロビジョニングする方法について説明します。
レプリカを再プロビジョニングするときは、Azure Arc 対応 SQL Managed Instance のデプロイ用に新しいマネージド インスタンス レプリカを再構築します。 このタスクを使用して、同期に失敗しているレプリカを置き換えます。たとえば、そのインスタンスの永続ボリューム (PV) 上のデータが破損しているか、SQL の問題が繰り返し発生している場合などです。
az
CLI を使用するか、kubectl
を使用してレプリカを再プロビジョニングできます。 Azure portal からレプリカを再プロビジョニングすることはできません。
前提条件
レプリカの再プロビジョニングは、マルチレプリカ インスタンスでのみ行うことができます。
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 を使用して 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
を使用してタスクを削除する必要があります。
再プロビジョニング タスクのシリアル化の詳細: 1 つのインスタンスでレプリカを再プロビジョニングする複数の要求がある場合は、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
は、完了したエントリ sql-reprov-replica-c-sql-kkncursza-1-1664217002.376132
が削除されるまで Creating
状態を維持します。