电源同步¶
裸机电源同步¶
每个裸机 conductor 进程运行一个周期性任务,用于在数据库和实际硬件之间同步节点的电源状态。如果 conductor.force_power_state_during_sync 选项设置为 true,则数据库中的电源状态将被强制应用于硬件;如果设置为 false,则硬件状态将被强制应用于数据库。如果此周期性任务已启用,它将以由 conductor.sync_power_state_interval 配置选项定义的间隔运行,针对那些不在维护状态的节点。发送到基板管理控制器 (BMC) 的请求由 conductor.sync_power_state_workers 控制的并行度。并行发送请求到 BMC 的动机是为了处理行为不端的 BMC,否则它们可能会延迟甚至阻止同步。
注意
在具有大量节点且配置的 BMC 协议为 IPMI 的部署中,默认的 60 秒电源同步间隔和 8 个工作线程值可能会导致由于客户端 UDP 数据包丢失(通过 conductor 日志中的相应警告可见)而导致大量重试。虽然 Ironic 会自动重试以获取受影响节点的电源状态,但通过增加电源同步周期(例如,增加到 300 秒)和/或减少电源同步工作线程的数量(例如,减少到 2)可以降低故障率。但是,请记住,根据具体的设置,增加电源同步间隔可能会对依赖于最新电源状态的其他组件产生影响。
计算-裸机电源同步¶
计算服务中的每个 nova-compute 进程运行一个周期性任务,用于在数据库和计算驱动程序之间同步服务器的电源状态。如果启用,它将以由 sync_power_state_interval 配置选项在 nova-compute 进程上定义的间隔运行。如果计算驱动程序是裸机驱动程序,则此同步将在计算服务和裸机服务的数据库之间发生。由于同步发生在 nova-compute 进程上,因此在出现不一致时,计算数据库中的状态将被强制应用于裸机数据库。因此,通过计算服务 API 将节点置于关机状态后,无法通过裸机服务 API 将其启动,因为电源同步任务会将计算服务对电源状态的了解视为事实依据。为了规避计算-裸机电源同步的此缺点,裸机服务使用外部事件向计算服务发送电源状态更改回调。
向计算服务的电源状态更改回调¶
每当裸机服务更改节点的电源状态时,它可以向计算服务发出通知。计算服务将消耗此通知并更新数据库中实例的电源状态。通过将所有电源状态更改传达给计算服务,裸机服务成为事实依据,从而防止计算服务在计算-裸机电源同步期间强制错误的电源状态到物理实例。它还增加了即使通过计算服务 API 将物理实例置于关机/启动状态,也可以通过裸机服务 API 将其启动/关闭的可能性。
此更改需要定义 nova 部分以及必要的身份验证选项,例如 nova.auth_url,在裸机服务的配置文件中。如果未配置,裸机服务将无法向计算服务发送通知,并且将回退到计算服务在电源同步期间强制裸机服务状态的行为。有关可用配置选项的更多详细信息,请参阅 nova 组。
在没有正在运行的计算服务的裸机独立部署的情况下,应将 nova.send_power_notifications 配置选项设置为 False,以禁用向计算服务的电源状态更改回调。
注意
裸机服务仅在目标电源状态为 power on 或 power off 时才向计算服务发送通知。其他错误和 None 状态将被忽略。在电源状态更改最初来自计算服务的情况下,裸机服务仍将发送通知,并且在计算服务端将是一个空操作,并附带一条调试日志,说明节点已经在启动/关闭电源。
注意
虽然在向计算服务发送通知时使用独占锁,但如果计算-裸机电源同步恰好在裸机服务发送的电源状态更改事件发生之前几纳秒发生,仍然可能存在竞争条件,在这种情况下,计算服务数据库中的电源状态将被强制应用于节点。
电源故障和恢复¶
当 裸机电源同步 启用时,并且裸机服务失去对节点的访问权限(通常是因为无效凭据、BMC 问题或网络中断),则节点进入 maintenance 模式,并且其 fault 字段设置为 power failure。确切的原因存储在 maintenance_reason 字段中。
与维护模式一样,只有一部分操作才能对这些节点起作用,并且计算服务和 Ironic 的本机分配 API 都会拒绝选择它们。任何正在进行的操作将暂停或失败。
负责该节点的 conductor 将定期尝试恢复连接(由 conductor.power_failure_recovery_interval 选项配置的间隔)。如果电源同步成功,则 fault 字段将被取消设置,并且节点将退出维护模式。
注意
这仅适用于具有 fault 字段设置的自动维护模式。手动设置的维护模式绝不会自动退出。
或者,您可以在解决问题后禁用维护模式
baremetal node maintenance unset <IRONIC NODE>