Spanner Omni デプロイを維持する

このドキュメントでは、Spanner Omni デプロイを維持する方法について説明します。Spanner Omni デプロイのメンテナンスには、クラスタの安定性と整合性を確保するための定期的なヘルスチェック、異常な要素の廃止、サーバーノードまたは障害のあるディスクの交換が含まれます。データベースの健全性を管理することで、データベースを計画外の停止から保護し、基盤となる Paxos コンセンサス グループの冗長性を維持します。

メンテナンスを行うと、次のことが可能になります。

  • 高可用性を確保する: 異常な仮想マシン(VM)または Pod を再プロビジョニングして、データベース サーバーの冗長性を維持します。これにより、ハードウェアに障害が発生した場合でもアプリケーションを稼働させることができます。

  • データの安全性と整合性を保護する: 障害のあるディスクを含むノードを廃止して、ストレージ障害がデータベースの他の部分に広がるのを防ぎます。これにより、切断されたサーバーが競合する更新を記録しないようにもなります。

始める前に

Kubernetes デプロイでメンテナンスを行う前に、次の操作を行う必要があります。

サーバーを交換する

システムまたはストレージの障害を解決するために、デプロイ内のサーバーを交換する必要がある場合があります。

ルートサーバーを置き換える

ルートサーバーを置き換えるには、お使いの環境のタブを選択します。

Kubernetes

Kubernetes Deployment でルートサーバーを置き換えるには、次の操作を行います。既存の Kubernetes デプロイにルートサーバーを追加することはできませんが、既存のルートサーバーを置き換えて、発生した回復不能なエラーを解決できます。

  1. 置き換えるサーバーを削除します。

    spanner deployment servers delete SERVER_ENDPOINT --zone=ZONE
    

    次のように置き換えます。

    • SERVER_ENDPOINT: 削除するサーバー Pod エンドポイント。SERVER.pod.NAMESPACE:PORT 形式で指定します(例: spanner-a-1.pod.spanner-ns:15000)。デプロイ内のサーバー エンドポイントを見つけるには、spanner deployment servers list --zone=ZONE を実行してデプロイ サーバーを一覧表示します。
    • ZONE: サーバーを含むゾーン(例: us-central1-a)。

    このステップは、サーバー上のデータの量によっては数分かかることがあります。Spanner Omni は、このサーバーからデプロイ内の他のサーバーにデータを再配置します。次のステップに進む前に、サーバーの削除が完了していることを確認してください。

    削除の進行状況を追跡するには、サーバーのステータスを確認します。

    spanner deployment servers describe SERVER_ENDPOINT --zone=ZONE
    

    コマンドが NOT_FOUND エラーを返すか、サーバーが登録されていないことを示すまで待ちます。

  2. サーバーをホストする Pod の永続ボリューム クレーム(PVC)を削除します。

    kubectl delete pvc DATA_VOLUME_NAME -n NAMESPACE
    

    次のように置き換えます。

    • DATA_VOLUME_NAME: データ ボリューム名(例: data-volume-spanner-a-1)。データ ボリューム名を確認するには、kubectl get pvc -n NAMESPACE を実行して Namespace の PVC を一覧表示します。
    • NAMESPACE: デプロイの Namespace(例: spanner-ns)。
  3. Pod を削除します。

    kubectl delete pod POD_NAME -n NAMESPACE
    

    POD_NAME は、削除するサーバー Pod の名前に置き換えます(例: spanner-a-1)。

    Kubernetes は、置換 Pod で新しいサーバーを自動的に起動し、新しい PVC を接続します。

  4. 新しいサーバーをデプロイに追加します。

    spanner deployment servers create SERVER_ENDPOINT --zone=ZONE
    

    引数が新しい Pod エンドポイントとゾーンに一致することを確認します(たとえば、エンドポイントとして spanner-a-1.pod.spanner-ns:15000 を使用し、ゾーンとして us-central1-a を使用します)。

VM

VM デプロイでルートサーバーを置き換えるには、次の操作を行います。

  1. 置き換えるサーバーを削除します。

    spanner deployment servers delete SERVER_ENDPOINT --zone=ZONE
    

    次のように置き換えます。

    • SERVER_ENDPOINT: サーバーの IP アドレスまたはホスト名とポート(例: spanner-vm-1.example.com:15000)。サーバー エンドポイントを見つけるには、spanner deployment servers list --zone=ZONE を実行してデプロイ サーバーを一覧表示します。
    • ZONE: サーバーを含むゾーン(例: us-central1-a)。

    このステップは、サーバー上のデータの量によっては数分かかることがあります。Spanner Omni は、このサーバーからデプロイ内の他のサーバーにデータを再配置します。次のステップに進む前に、サーバーの削除が完了していることを確認してください。

    削除の進行状況を追跡するには、サーバーのステータスを確認します。

    spanner deployment servers describe SERVER_ENDPOINT --zone=ZONE
    

    コマンドが NOT_FOUND エラーを返すか、サーバーが登録されていないことを示すまで待ちます。

  2. VM 上の Spanner Omni のデプロイを作成するで説明したように、クリーン ストレージを使用してサーバーを再プロビジョニングします。

    spanner start \
      --root \
      --server-address=HOSTNAME \
      --zone=ZONE \
      --base-dir=BASE_DIR
    

    次のように置き換えます。

    • HOSTNAME: 新しい VM の解決可能な FQDN またはホスト名(例: spanner-vm-1.example.com)。
    • ZONE: ターゲット ゾーン(例: us-central1-a)。
    • BASE_DIR: データが保存されるパス(./span-dir など)。
  3. 新しいサーバーをデプロイに追加します。

    spanner deployment servers create SERVER_ENDPOINT --zone=ZONE
    

    引数が新しいサーバーのパラメータと一致していることを確認します(たとえば、エンドポイントとして spanner-vm-1.example.com:15000 を使用し、ゾーンとして us-central1-a を使用します)。

root 以外のサーバーを置き換える

非 root サーバーを置き換えるには、環境のタブを選択します。

Kubernetes

Kubernetes Deployment で非 root サーバーを置き換えるには、次の操作を行います。

  1. 置き換えるサーバーを削除します。

    spanner deployment servers delete SERVER_ENDPOINT --zone=ZONE
    

    次のように置き換えます。

    • SERVER_ENDPOINT: 削除するサーバー Pod エンドポイント。SERVER.pod.NAMESPACE:PORT 形式で指定します(例: spanner-a-4.pod.spanner-ns:15000)。デプロイ内のサーバー エンドポイントを見つけるには、spanner deployment servers list --zone=ZONE を実行してデプロイ サーバーを一覧表示します。
    • ZONE: サーバーを含むゾーン(例: us-central1-a)。

    このステップは、サーバー上のデータの量によっては数分かかることがあります。Spanner Omni は、このサーバーからデプロイ内の他のサーバーにデータを再配置します。次のステップに進む前に、サーバーの削除が完了していることを確認してください。

    削除の進行状況を追跡するには、サーバーのステータスを確認します。

    spanner deployment servers describe SERVER_ENDPOINT --zone=ZONE
    

    コマンドが NOT_FOUND エラーを返すか、サーバーが登録されていないことを示すまで待ちます。

  2. サーバーをホストする Pod の永続ボリューム クレーム(PVC)を削除します。

    kubectl delete pvc DATA_VOLUME_NAME -n NAMESPACE
    

    次のように置き換えます。

    • DATA_VOLUME_NAME: データ ボリューム名(例: data-volume-spanner-a-4)。データ ボリューム名を確認するには、kubectl get pvc -n NAMESPACE を実行して Namespace の PVC を一覧表示します。
    • NAMESPACE: デプロイの Namespace(例: spanner-ns)。
  3. Pod を削除します。

    kubectl delete pod POD_NAME -n NAMESPACE
    

    POD_NAME は、削除するサーバー Pod の名前に置き換えます(例: spanner-a-4)。

    Kubernetes は、置換 Pod で新しいサーバーを自動的に起動し、新しい PVC を接続します。Spanner Omni は、新しい非 root サーバーをデプロイに自動的に登録します。

VM

VM デプロイで非ルート サーバーを置き換えるには、次の操作を行います。

  1. 置き換えるサーバーを削除します。

    spanner deployment servers delete SERVER_ENDPOINT --zone=ZONE
    

    次のように置き換えます。

    • SERVER_ENDPOINT: サーバーの IP アドレスまたはホスト名とポート(例: spanner-vm-4.example.com:15000)。サーバー エンドポイントを見つけるには、spanner deployment servers list --zone=ZONE を実行してデプロイ サーバーを一覧表示します。
    • ZONE: サーバーを含むゾーン(例: us-central1-a)。

    このステップは、サーバー上のデータの量によっては数分かかることがあります。Spanner Omni は、このサーバーからデプロイ内の他のサーバーにデータを再配置します。次のステップに進む前に、サーバーの削除が完了していることを確認してください。

    削除の進行状況を追跡するには、サーバーのステータスを確認します。

    spanner deployment servers describe SERVER_ENDPOINT --zone=ZONE
    

    コマンドが NOT_FOUND エラーを返すか、サーバーが登録されていないことを示すまで待ちます。

  2. 非 root サーバーを追加するで説明されているように、クリーン ストレージを使用して非 root サーバーを再プロビジョニングします。サーバーがデプロイに自動的に追加されます。

次のステップ