重建 Placement 数据库

问题

您可能以某种方式更改了 nova cell 数据库,并且 compute_nodes 表中的条目现在向 placement 服务报告不同的 UUID,但 placement 已经有了与这些计算节点同名的 resource_providers 表条目,因此 placement 中的资源提供者和 nova 数据库中的计算节点不同步。这可能是由于从备份恢复 nova cell 数据库导致的,其中计算主机没有更改,但它们正在使用不同的 UUID。

Nova 使用 compute_nodes 表中的 hypervisor_hostname 和 UUID 将计算节点清单报告给 placement,从而更新 placement 的 resource_providers 表,该表对名称(在本例中为主机名)和 UUID 具有唯一约束。尝试使用新的 UUID 创建新的资源提供者,但与现有提供者的名称相同,会导致 placement 返回 409 错误,例如在 bug 1817833 中所述。

解决方案

警告

这可能是一种最后的手段,当所有计算节点和资源提供者不同步时,直接从 nova 的当前状态重建 placement 数据库可能更简单。但是,如果使用 placement 进行更高级的功能,例如 具有最小带宽保证的端口加速器 时,这可能无法正常工作。显然,首先在预生产环境中进行测试是理想的。

以下是高级步骤

  1. 备份现有的 placement 数据库,以防这些步骤失败,您需要重新开始。

  2. 重新创建 placement 数据库并运行模式迁移以初始化 placement 数据库。

  3. 重新启动或等待 update_resources_intervalnova-compute 服务上,以将资源提供者及其清单报告给 placement。

  4. 运行 nova-manage placement heal_allocations 命令,以向 placement 报告现有 nova 实例的分配情况。

  5. 运行 nova-manage placement sync_aggregates 命令,以将 nova 主机聚合同步到 placement 资源提供者聚合。

完成后,像往常一样测试您的部署,例如运行 Tempest 集成和/或 Rally 测试,创建、迁移和删除服务器等。