维护 Spanner Omni 部署

本文档介绍了如何维护 Spanner Omni 部署。维护 Spanner Omni 部署包括执行常规健康检查、停用不健康的元素,以及更换服务器节点或故障磁盘,以确保集群稳定性和一致性。管理数据库健康状况可保护数据库免受意外中断的影响,并保持底层 Paxos 共识组的冗余。

执行维护有助于您:

  • 确保高可用性:重新配置运行状况不佳的虚拟机 (VM) 或 pod,以保持数据库服务器冗余。这有助于在硬件发生故障时保持应用运行。

  • 保护数据安全性和完整性:退役存在故障磁盘的节点,以防止存储故障蔓延到数据库的其他部分。这还可以确保断开连接的服务器不会记录冲突的更新。

准备工作

在对 Kubernetes 部署执行维护之前,您必须执行以下操作:

替换服务器

您可能需要更换部署中的服务器,以解决系统或存储故障。

替换根服务器

如需替换根服务器,请选择您的环境对应的标签页:

Kubernetes

如需替换 Kubernetes 部署中的根服务器,请执行以下步骤。虽然不支持向现有 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 列出命名空间中的 PVC。
    • 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 作为可用区。

虚拟机

如需替换虚拟机部署中的根服务器,请执行以下步骤:

  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. 按照在虚拟机上为 Spanner Omni 创建部署中的说明,使用干净的存储空间重新预配服务器:

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

    替换以下内容:

    • HOSTNAME:新虚拟机的可解析 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 作为可用区。

替换非根服务器

如需替换非根服务器,请选择您的环境对应的标签页:

Kubernetes

如需替换 Kubernetes 部署中的非 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 列出命名空间中的 PVC。
    • NAMESPACE:部署的命名空间,例如 spanner-ns
  3. 删除 Pod:

    kubectl delete pod POD_NAME -n NAMESPACE
    

    POD_NAME 替换为要删除的服务器 pod 的名称,例如 spanner-a-4

    Kubernetes 会自动在新替换 Pod 中启动新服务器,并附加新的 PVC。Spanner Omni 会自动将新的非根服务器注册到部署中。

虚拟机

如需替换虚拟机部署中的非根服务器,请执行以下步骤:

  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. 按照添加非根服务器中所述,使用干净的存储空间重新配置非根服务器。 服务器会自动添加到部署中。

后续步骤