![如何处理网络启动时的竞争条件](https://linux22.com/image/716277/%E5%A6%82%E4%BD%95%E5%A4%84%E7%90%86%E7%BD%91%E7%BB%9C%E5%90%AF%E5%8A%A8%E6%97%B6%E7%9A%84%E7%AB%9E%E4%BA%89%E6%9D%A1%E4%BB%B6.png)
我有一个远程容器,其中装有多个连接到现场 tftp/dhcp 服务器的 PXE 启动的计算机。
如果发生断电,服务器机器需要很长时间才能启动,而 PXE 启动的机器将超时并跳回 BIOS 并且永远无法启动。这很糟糕,因为我无法物理访问这些机器。
我对解决这个问题有一些想法:
- 找到一种方法来延长客户端机器的启动时间(还没有弄清楚如何做到这一点)
- 增加客户端机器的网络启动超时时间(还没弄清楚如何做到这一点)
- 从 DHCP 租约文件中获取 MAC 地址,并在服务器准备就绪后向其发送 LAN 唤醒多播请求(这似乎是最不脆弱的,但却不必要地复杂)
- 将服务器机器替换为启动速度更快的机器 (...)
我知道一定有一个我还没有考虑过的简单解决方案。
我应该怎么办?
答案1
或者,
- 为服务器机器配备 UPS。
- 使用 PDU 延迟启动 PXE 客户端。
- 将 PXE 客户端设置为仅使用 PXE 并无限期重试(如果可能)。
- 优化服务器,使其启动更快(SSD,更多 RAM,...)。
编辑:
- 如果 3. 不起作用,请将一个 USB 棒插入每台计算机上,上面只有一个 PXE 客户端或一个重启设置。
- 在服务器启动时关闭计算机,并在启动后通过 WoL 唤醒它们。 [...] 看到下面的脚本做了完全相同的事情。 ;-)
答案2
我使用了一个快速而简单的 Golang 脚本,在 crontab 中运行,并将 PXE 启动的机器设置为在通电时不开机。
如果你有类似的问题,可以参考以下脚本 https://gist.github.com/mraaroncruz/f103b8af4d81f59a54a5f2af6dc238b6