![通过 USB 连接的 APC UPS 触发 VMware ESXi 关闭](https://linux22.com/image/798129/%E9%80%9A%E8%BF%87%20USB%20%E8%BF%9E%E6%8E%A5%E7%9A%84%20APC%20UPS%20%E8%A7%A6%E5%8F%91%20VMware%20ESXi%20%E5%85%B3%E9%97%AD.png)
我正在将一批 ESXi 5.1 服务器运送到远程办公室,它们将通过 APC UPS 供电。
我希望 UPS 触发所连接服务器的关闭 - 然后我将依靠 ESXi 配置来处理托管在其上的虚拟机的关闭/暂停。
我看到 APC 有一个解决方案使用 PowerChute Network Shutdown 记录但这需要为每个办公室设置一个额外的服务器,并且每个 UPS 都需要网卡。我们通常使用不带网卡的 UPS(例如 Back-UPS Pro)- 它们配有 USB 连接器,在我们办公室所在地很容易找到。
如何通过 USB 将 UPS 连接到 ESXi 主机,然后让 ESXi 检测断电并采取相应措施?有人成功做到这一点吗?
答案1
根据 APC 的说法,这是不可能的,你需要关闭 Powerchute Network。我们用 USB 尝试了多次,但没有找到解决办法。
虚拟机此处有关于使用 APC 认可的解决方案的信息。
还认为 SmartUPS 是更好的选择,而且可以安装网卡。当然,这需要花费更多钱,但如果您的服务器非常重要,那么这笔费用是值得的。还可以为您提供更多监控和警报,这可能在远程站点很有用。您还需要确保所有虚拟机有足够的运行时间才能干净地关闭,然后关闭主机
答案2
是的,这是可能的。以下是我的类似设置的详细信息。
硬件配置: APC Smart-UPS 1500 通过 USB 连接到 ESXi 5.1 主机。此 ESXi 主机上运行着 Linux 虚拟机。UPS 使用 ESXi USB 直通选项连接到此 VM。
软件配置: NUT(网络 UPS 工具)主机在 VM 中运行,本机 ESXi NUT 从属机在 ESXi 主机上运行。
关机逻辑: VM 正在运行 UPS 驱动程序usbhid-ups负责通过 USB 与 UPS 进行通信。向上进程通过 usbhid-ups 驱动程序连接到 UPS,并监控 UPS 状态。厄普斯蒙在同一台机器上运行的主进程连接到向上并启动关机。ESXi 主机正在运行厄普斯蒙它也连接到同一个虚拟机向上通过内部网络。
断电时将发生以下顺序:
- UPS 通过 usbhid-ups 向 upsd 报告电源故障。
- (可选,如果你想在几分钟内关机而不是电池电量不足时关机,则很有用)VM 上的 upsmon 启动更新计划5 分钟计时器。如果电源恢复,计时器将中止。
- 当计时器启动或 UPS 报告电池电量低时,upsmon 会将 FSD(强制关机)标志提升到 upsd。
- 在独立 NUT 配置中,FSD 标志会关闭机器。但在这里,关机命令被简单的日志记录所取代,例如“我应该现在关机,但我正在等待主机”。并且什么也不做。
- ESXi upsmon 也会读取 FSD 标志,从而启动 ESXi 主机关闭。
- ESXi 主机逐个关闭所有虚拟机。重要的是,运行 upsd 的虚拟机应该最后关闭(使用 ESXi 启动/关闭顺序配置)。
- 重要的:此虚拟机必须安装 vmware tools。当它从主机收到客户机关机命令时,vmware-tools 关机脚本正在启动。此脚本检查/etc/killpower标志。如果没有标志,则不执行任何操作(这意味着用户激活了 Linux 关闭,而不是 UPS 事件)。但如果标志存在(FSD 处于活动状态),则此脚本会向 UPS 发送延迟断电命令(例如,3 分钟后)。
- 运行 vmware-tools 脚本后,客户虚拟机关闭。
- ESXi 看到最后的 VM 关闭状态并自行关闭(大约需要 1 分钟,因为现在没有其他机器在运行)。
- 剩余 2 分钟后,UPS 切断电源。
- 当电源恢复时,ESXi 启动并打开所有虚拟机。必须先启动 UPS 监控机(与关机顺序的配置相同)。
下载:
可以从包中安装适用于 Linux 的 NUT。
可以使用此页面上的最后一个链接下载 ESXi 服务器的本机 NUT 客户端:http://www.networkupstools.org/download.html
我的一些脚本和配置文件在这里(仅显示更改的行):http://pastebin.com/KkEeanK1
笔记:
当然还有更多细节,我花了一些时间才让它正常工作。但现在它表现得非常好。该系统考虑了以下情况:您只是从内部关闭监控虚拟机(vmware-tools 脚本未运行),或者 ESXi 主机启动的虚拟机关闭(没有 /etc/killpower 标志,因此没有 UPS 负载关闭),或者 ESXi 关闭(相同)。唯一重要的是让此虚拟机在主机启动后尽快运行,最后关闭它(因此主机停机时间是可预测的 - 如上所述,对我来说大约是 1 分钟,我预留了 2 分钟以防万一)。
我的 UPS 监控 Linux VM 也是用于备份存储的 Samba/NFS 共享服务器、用于 VM 的 NAT/DHCP 服务器以及一些其他轻量级服务。它在空闲时占用大约 22MHz 的 ESXi CPU 份额和大约 10MB 的活动 RAM。由于使用 NUT,您可以在需要时从同一 UPS 为更多设备供电,并且所有设备都可以正常关闭。无需 PowerChute 和/或昂贵的网络监控卡。
答案3
超级问题。实际上可以很好地做到这一点 - 至少在某些设置上。我在许多 ESXi 5.5 主机上尝试了以下方法。基本上,解决方案如下:
- 在 ESXi 主机上启用 SSH 访问
- 创建 Linux VM - 我使用 Ubuntu。您只需要进行极简设置 - 无需 GUI 或任何其他东西。
- 通过 USB 将您的 APC 设备连接到 ESXi 主机并将其传递到 Linux VM。
- 确保添加到 VM 的 USB 控制器与 APC 设备连接的实际物理 USB 控制器匹配,即,如果物理设备是 USB3 设备,则仅添加 XHCI 控制器。不匹配似乎会导致 Linux USB 设备驱动程序出现奇怪的问题。
- 如果一切不顺利,您看到类似 的错误
ctrl urb status -62
,dmesg
则可能是物理控制器与虚拟机中的控制器不匹配。如果它们匹配 - 那么就是有问题了。我有一个设置有这种问题,但没有真正的解决方案。
- 安装
apcupsd
在 Linux VM 上 - 在 Ubuntu 中,您可以sudo apt-get install apcupsd
安装最新版本。NUT 项目也不错,但我是一个传统主义者。 - 通过执行以下操作安装 plink 实用程序
sudo apt-get install putty-tools
- 通过执行以下操作连接到您的 ESXI 主机
plink root@<your ESXi host IP>
。您可以立即关闭连接。目的是保存主机密钥,以便当我们通过脚本运行它时,plink 不会再次提示输入该密钥 - 编辑
/etc/apcupsd/apcupsd.conf
并更改以下项目,使其匹配:UPSNAME < the name you'd like your UPS to have > UPSCABLE usb UPSTYPE usb # DEVICE DIRECTIVE should be blank for USB DEVICE
还要确保/etc/default/apcupsd
有ISCONFIGURED=yes
- 编辑
/etc/apcupsd/apccontrol
并滚动到doshutdown
案例。让它看起来像这样:doshutdown) echo "UPS ${2} initiated Shutdown Sequence" | ${WALL} # Shut down indirectly by triggering the ESXi host to do the # shutdown via VMWare tools /usr/bin/plink root@< your ESXi host IP > -pw < your root pw > "/sbin/shutdown.sh && /sbin/poweroff" ;;
- 使用 重启 apcupsd
sudo service apcupsd restart
并通过调用 查看是否正常运行apcaccess
。如果没有,请检查日志和 dmesg - 确保所有需要在断电时正常关闭的虚拟机都安装了 VMWare Tools。还要确保它们是虚拟机启动/关闭列表的一部分(在 vSphere Web Client 中,转到:)
vCenter -> <your host> -> Manage -> Settings -> VM Startup/Shutdown
。确保关机操作是关闭客户操作系统。
一旦运行了这些程序,doshutdown
第 8 步中的脚本就会在电源故障时被调用。这又会调用 ESXi 主机上的 shutdown.sh 脚本,该脚本会向主机上每个 VM 中的 VMWare Tools 包发出信号,让它们通过客户操作系统彻底关闭。根据我的经验,它比 APC 的 PowerChute 软件效果更好。
如果您喜欢从虚拟机监控事物,您可以在虚拟机上设置从属 apcupsd 实例,以连接到主 UPS 控制 Linux VM。您的从属 apcupsd.conf 文件应该有这样的条目:在这种情况下
UPSTYPE net < your UPS control VM IP >:3551
,类似和这样的条目UPSCABLE
无关紧要。这适用于 Windows 版本apcupsd
(可用这里) 也可以。您可以使用附带的apctray.exe
来检查事物的当前状态。
我想,这就基本涵盖了所有内容。
答案4
了解 vSphere Management Assistant (vMA)这里 我们在办公室使用它来做你正在尝试做的事情,但是通过 USB 连接 Smart-UPS 而不是 Back-UPS。