重建 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 进行更高级的功能,例如 具有最小带宽保证的端口 或 加速器 时,这可能无法正常工作。显然,首先在预生产环境中进行测试是理想的。
以下是高级步骤
备份现有的 placement 数据库,以防这些步骤失败,您需要重新开始。
重新创建 placement 数据库并运行模式迁移以初始化 placement 数据库。
重新启动或等待
update_resources_interval在nova-compute服务上,以将资源提供者及其清单报告给 placement。运行 nova-manage placement heal_allocations 命令,以向 placement 报告现有 nova 实例的分配情况。
运行 nova-manage placement sync_aggregates 命令,以将 nova 主机聚合同步到 placement 资源提供者聚合。
完成后,像往常一样测试您的部署,例如运行 Tempest 集成和/或 Rally 测试,创建、迁移和删除服务器等。