本文档介绍了如何维护 Spanner Omni 部署。维护 Spanner Omni 部署包括执行常规健康检查、停用不健康的元素,以及更换服务器节点或故障磁盘,以确保集群稳定性和一致性。管理数据库健康状况可保护数据库免受意外中断的影响,并保持底层 Paxos 共识组的冗余。
执行维护有助于您:
确保高可用性:重新配置运行状况不佳的虚拟机 (VM) 或 pod,以保持数据库服务器冗余。这有助于在硬件发生故障时保持应用运行。
保护数据安全性和完整性:退役存在故障磁盘的节点,以防止存储故障蔓延到数据库的其他部分。这还可以确保断开连接的服务器不会记录冲突的更新。
准备工作
在对 Kubernetes 部署执行维护之前,您必须执行以下操作:
创建 Spanner Omni 部署。如需了解详情,请参阅在 Kubernetes 上创建部署或在虚拟机上创建部署。
下载并安装 Spanner Omni CLI。
替换服务器
您可能需要更换部署中的服务器,以解决系统或存储故障。
替换根服务器
如需替换根服务器,请选择您的环境对应的标签页:
Kubernetes
如需替换 Kubernetes 部署中的根服务器,请执行以下步骤。虽然不支持向现有 Kubernetes 部署添加更多根服务器,但您可以替换现有根服务器,以解决遇到的任何无法恢复的错误。
删除要替换的服务器:
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错误或指示服务器不再注册。删除托管服务器的 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。
删除 Pod:
kubectl delete pod POD_NAME -n NAMESPACE将
POD_NAME替换为要删除的服务器 pod 的名称,例如spanner-a-1。Kubernetes 会自动在替代 Pod 中启动新服务器,并附加新的 PVC。
将新服务器添加到部署中:
spanner deployment servers create SERVER_ENDPOINT --zone=ZONE验证实参是否与新的 pod 端点和可用区匹配,例如,使用
spanner-a-1.pod.spanner-ns:15000作为端点,并使用us-central1-a作为可用区。
虚拟机
如需替换虚拟机部署中的根服务器,请执行以下步骤:
删除要替换的服务器:
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错误或指示服务器不再注册。按照在虚拟机上为 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。
将新服务器添加到部署中:
spanner deployment servers create SERVER_ENDPOINT --zone=ZONE验证实参是否与新服务器的形参匹配,例如使用
spanner-vm-1.example.com:15000作为端点,并使用us-central1-a作为可用区。
替换非根服务器
如需替换非根服务器,请选择您的环境对应的标签页:
Kubernetes
如需替换 Kubernetes 部署中的非 root 服务器,请执行以下步骤:
删除要替换的服务器:
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错误或指示服务器不再注册。删除托管服务器的 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。
删除 Pod:
kubectl delete pod POD_NAME -n NAMESPACE将
POD_NAME替换为要删除的服务器 pod 的名称,例如spanner-a-4。Kubernetes 会自动在新替换 Pod 中启动新服务器,并附加新的 PVC。Spanner Omni 会自动将新的非根服务器注册到部署中。
虚拟机
如需替换虚拟机部署中的非根服务器,请执行以下步骤:
删除要替换的服务器:
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错误或指示服务器不再注册。按照添加非根服务器中所述,使用干净的存储空间重新配置非根服务器。 服务器会自动添加到部署中。