我正在将一堆 ESXi 5.1 服务器运送到远程办公室,在那里它们将通过 APC UPS 供电。
我想让 UPS 触发连接服务器的关闭——然后我将依靠 ESXi 配置来处理托管在其上的虚拟机的关闭/暂停。
我可以看到 APC 有一个使用他们的 PowerChute Network Shutdown 记录的解决方案,但这涉及到为每个办公室设置一个额外的服务器,并且需要在每个 UPS 上安装网卡。我们通常使用不带网卡的 UPS(例如 Back-UPS Pro)- 它们带有 USB 连接器,并且在我们办公室所在的位置很容易买到。
如何通过 USB 将 UPS 连接到 ESXi 主机,然后让 ESXi 检测到断电并采取相应措施?有没有人设法做到这一点。
是的,这是可能的。这是我的类似设置的详细信息。
硬件配置: APC Smart-UPS 1500 通过 USB 连接到 ESXi 5.1 主机。在此 ESXi 主机上运行的 Linux 虚拟机。UPS 使用 ESXi USB 直通选项连接到此虚拟机。
软件配置: NUT (Network UPS Tools) master 运行在虚拟机中,原生 ESXi NUT slave 运行在 ESXi 主机上。
关机逻辑: VM 正在运行 UPS 驱动程序usbhid-ups,它负责通过 USB 与 UPS 进行通信。upsd进程通过usbhid -ups驱动连接UPS,监控UPS状态。在同一台机器上运行的upsmon主进程连接到upsd并启动关闭。ESXi 主机正在运行upsmon的第二个实例,它也通过内部网络连接到同一个虚拟机upsd 。
电源故障时会发生以下顺序:
下载:
适用于 Linux 的 NUT 可以从软件包中安装。
ESXi 服务器的本机 NUT 客户端可以使用此页面上的最后一个链接下载:http: //www.networkupstools.org/download.html
我的一些脚本和 conf 文件在这里(只显示更改的行): http: //pastebin.com/KkEeanK1
笔记:
当然还有更多细节,我花了一些时间才让它正常工作。但现在它表现得非常好。该系统考虑了以下情况:您只是从内部关闭监控 VM(未运行 vmware-tools 脚本),或者它是 ESXi 主机启动的 VM 关闭(没有 /etc/killpower 标志,因此没有 UPS 负载关闭),或者如果是 ESXi 关机(相同)。唯一重要的是让这个虚拟机在主机启动后尽快运行,并在最后关闭它(因此主机停机时间是可以预测的——如上所述,对我来说大约是 1 分钟,我还预留了 2 分钟以防万一)。
我的UPS监控Linux VM也是备份存储的Samba/NFS共享服务器,VM的NAT/DHCP服务器,以及其他一些轻量级服务。闲置时,它占用大约 22MHz 的 ESXi CPU 份额和大约 10MB 的活动 RAM。由于使用 NUT,如果需要,您可以从同一个 UPS 为更多设备供电,并且所有设备都可以正常关闭。不需要 PowerChute 和/或昂贵的网络监控卡。
超级问题。实际上可以很好地做到这一点——至少在某些设置上是这样。我在许多 ESXi 5.5 主机上尝试了以下方法。基本上,解决方案是这样的:
ctrl urb status -62
中的错误dmesg
,则物理控制器可能与您的 VM 中的控制器不匹配。如果它们确实匹配 - 那么这是一个问题。我有一个解决此类问题的设置,但没有真正的解决方案。apcupsd
- 在 Ubuntu 中,您可以sudo apt-get install apcupsd
安装最新版本。NUT 项目也不错,但我是一个传统主义者。sudo apt-get install putty-tools
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" ;;
sudo service apcupsd restart
并通过调用查看是否一切正常apcaccess
。如果没有,检查日志和 dmesgvCenter -> <your host> -> Manage -> Settings -> VM Startup/Shutdown
。确保关机操作是关闭客户操作系统。一旦您运行了这些东西,
doshutdown
第 8 步中的 scriptlet 就会在电源故障时被调用。这将依次调用 ESXi 主机上的 shutdown.sh 脚本,该脚本向主机上每个 VM 中的 VMWare Tools 包发出信号,以通过来宾操作系统进行干净关闭。根据我的经验,它比 APC 的 PowerChute 软件更好用。如果你喜欢从你的 VM 中监控事物,你可以在它们上设置从属 apcupsd 实例,这些实例连接到主 UPS 控制 Linux VM。您的从属 apcupsd.conf 文件应该有这样的条目:在这种情况下,诸如此类的
UPSTYPE net < your UPS control VM IP >:3551
条目
UPSCABLE
无关紧要。这也适用于 Windows 版本apcupsd
(可在此处获取)。您可以使用 includedapctray.exe
查看事物的当前状态。我认为这几乎涵盖了它。
据 APC 称,这是不可能的,您需要关闭 Powerchute Network。我们用 USB 尝试了很多次,但没有找到解决方案。
VMWare在此处提供有关使用 APC 批准的解决方案的信息。
也认为 SmartUPS 会是更好的选择,你可以配上网卡。自然要花更多的钱,但如果您的服务器非常重要,那么这笔费用应该是值得的。还为您提供更多监控和警报,这在远程站点可能很有用。您还需要确保所有虚拟机有足够的运行时间来干净地关闭然后关闭主机
您可能会考虑将USB 设备直通功能用于运行 PowerChute 或其他能够监控 UPS 运行状况并能够触发 ESXi 主机(例如apcupsd)关机的软件的来宾。ESXi官方仅支持数量非常有限的 USB 设备进行直通,但人们连接和直通不同类别的设备已有一段时间,但取得了不同程度的成功,但 APC UPS USB 似乎根据此演练适用于 Windows VM或者这一个用于 CentOS Linux VM。
从此处查看 vSphere Management Assistant (vMA) 我们在我的办公室使用它来执行您正在尝试的操作,但是通过 USB 而不是 Back-UPS 连接 Smart-UPS。
虽然可能(可能/通常),但我认为使用电池自动关闭计算机不是一个好主意。如果你打算这样做,那么出于最实际的意图和目的,你应该只为自己省下电池供电 UPS 的钱,让断电为你关闭你的机器。(诚然,完全关闭总是比断电更可取,但如果在断电时自动关闭所有东西,你似乎就错过了电池使用时间超过几分钟的机会。 )
我一直采用的处理方式是在断电时通过监控向 SA 发出警报,这样 SA 就可以使用他们的灰质来决定何时(甚至是否)关闭服务器。如果是短暂的中断,关闭服务器可能根本不是一个好主意,或者您可能希望让一些服务器尽可能长时间地运行,并且只在电池即将耗尽之前关闭它们。在我看来,这真的像是一项比简单规则更适合人类的决策任务。
在过去的裸机安装时代,APC PowerChute Plus 是我安装过程中不可或缺的一部分。使用简单的串行信号电缆和他们的Red Hat-only 二进制文件,很容易设置规则来管理本地连接的服务器。UPC 电池事件、线路电源事件和关机操作的基本电子邮件通知可用:
和
或者
加上一个合理的界面来查看发生了什么......
该软件最终商业化(或被埋在 APC 网站上)。有一些开源方法可以提供类似的东西。但是,对于单个 VMWare ESXi 主机,这一切都会变得复杂。
这似乎是 VMWare 应该合并到基本管理程序中的东西。它是基本的,可以为用户提供体面的保护。我现在看到的最常见的补救措施是 USB 直通到专用 VM、网络守护程序方法或做我做的事情;没有配置任何自动或电池关机...
诚然,我通常会使用可以支持系统负载一个小时或更长时间的 UPS,但确实会发生长时间停电。也许另一种选择是收集一些低成本或翻新的网络接口卡,并计划至少购买 SmartUPS 设备......
查看以下链接。不是最优雅的解决方案,而是一个非常实用、非常直接的解决方案。在安全方面可能存在缺陷(取决于您的特定网络设计、主机上加载的来宾以及用户对这些来宾的访问权限,但您可以进行调用。
我使用了 MrMajestyk 解决方案,仅通过 plink 更改了 ssh 访问,使用 rsa 公钥无需密码即可访问 ssh。apcupsd VM 中生成的 rsa 密钥必须包含在 vmware 主机的 /etc/ssh/keys-root/authorized_keys 中。