由通过USB连接的APC UPS触发的VMware ESXiclosures

我正在向一些远程办公室发送一堆ESXi 5.1服务器,他们将通过APC UPS供电。

我想让UPS触发连接服务器的closures – 然后我将依靠ESXiconfiguration来closures托pipe在其上的虚拟机的closures/挂起。

我可以看到APC 使用PowerChute Network Shutdownlogging了一个解决scheme,但是这需要在每个办公室设置一个额外的服务器,并且在每个UPS上都需要网卡。 我们通常使用不带网卡的UPS(例如Back-UPS Pro) – 它们带有USB连接器,在我们的办公室所在地可以随时使用。

如何通过USB将UPS连接到ESXi主机,然后让ESXi检测到停电并据此采取行动? 有没有人设法做到这一点。

根据APC,这是不可能的,你需要Powerchutenetworkingclosures。 我们用USB试了很多次,发现没有解决办法。

VMWare有关使用APC批准的解决scheme的信息。

也会认为SmartUPS将是一个更好的select,你可以适应网卡。 自然更多的钱,但如果你的服务器是非常重要的,这个成本应该是值得的。 还可以为您提供更多的监控和警报,这在远程站点可能有用。 您还需要确保有足够的运行时间让所有虚拟机彻底closures,然后closures主机

是的,这是可能的。 这里是我的类似设置的细节。

硬件configuration:通过USB连接到ESXi 5.1主机的APC Smart-UPS 1500。 在此ESXi主机上运行的Linux虚拟机。 UPS使用ESXi USB传递选项连接到此VM。

软件configuration:在VM中运行的NUT(networkingUPS工具)主服务器以及在ESXi主机上运行的本机ESXi NUT从服务器。

关机逻辑: VM正在运行UPS驱动程序usbhid-ups ,负责通过USB与UPS进行通信。 升级过程通过usbhid-ups驱动程序连接到UPS并监视UPS状态。 运行在同一台机器上的升级主进程连接到upsd并启动关机。 ESXi主机正在运行第二个upsmon的实例,它也通过内部networking连接到相同的虚拟机upsd

发生电源故障时,将执行以下步骤:

  1. UPS通过usbhid ups报告upsd关于电源故障。
  2. (可选,如果您想在几分钟内closures电源而不是电池电量不足),虚拟机上的启动会启动升级 5分钟的定时器。 如果电源恢复,计时器将中止。
  3. 当计时器发生火灾或UPS报告电池电量不足时,upsmon会使FSD(强制关机)标志上升。
  4. 在独立的NUTconfiguration中,FSD标志将closures机器。 但是在这里,shutdown命令被简单的日志logging所替代,例如“我现在应该closures,但是我正在等待主机”。 而什么都不做。
  5. FSI标志也由ESXi的启动ESXi主机closures的upsmon读取。
  6. ESXi主机逐个closures所有虚拟机。 重要的是运行upsd的虚拟机应该最后closures(使用ESXi启动/closures序列configuration)。
  7. 重要提示:该虚拟机必须安装有vmware工具。 当它从主机接收到guest shutdown命令时,正在启动vmware-toolsclosures脚本。 该脚本检查/ etc / killpower标志。 如果没有标志,它什么都不做(这意味着用户激活的linux关机,而不是UPS事件)。 但是如果标志存在(FSD激活),那么这个脚本会向UPS发送延时关机命令(比如3分钟)。
  8. 运行vmware-tools脚本后,guest虚拟机closures。
  9. ESXi会看到最后一个虚拟机关机状态并自行closures(大约需要1分钟,因为现在没有其他机器正在运行)。
  10. 在剩余的2分钟内,UPS切断电源。
  11. 当电源恢复时,ESXi启动并启动所有VM。 UPS监控机器必须先启动(与关机命令configuration相同)。

下载:

Linux的NUT可以从软件包安装。

ESXi服务器的本地NUT客户端可以使用此页面上的最后一个链接进行下载: http : //www.networkupstools.org/download.html

一些我的脚本和conf文件在这里(只显示更改的行): http : //pastebin.com/KkEeanK1

笔记:

当然,还有更多的细节,我花了一些时间才能做到这一点。 但现在它performance非常好。 这个系统解释了刚刚从内部closures监控虚拟机的情况(vmware-tools脚本未运行),或者是ESXi主机启动的虚拟机closures(没有/ etc / killpower标志,因此没有UPS卸载),或者如果是ESXi关机(相同)。 唯一重要的是让这个虚拟机在主机启动后尽快运行,并最后closures它(所以主机停机时间是可以预测的 – 就像上面说的那样,对我来说大概是1分钟,我保留2分钟以防万一)。

我的UPS监控Linux VM也是用于备份存储的Samba / NFS共享服务器,用于虚拟机的NAT / DHCP服务器以及其他一些轻量级服务。 在闲置时,大约需要22MHz的ESXi CPU份额和大约10MB的活动RAM。 由于使用NUT,您可以根据需要为同一UPS上的更多设备供电,并且可以正常closures所有设备。 不需要PowerChute和/或昂贵的networking监视器卡。

超级问题。 实际上可以做得很好 – 至less在一些设置上。 我在许多ESXi 5.5主机上尝试了以下配方。 基本上,解决scheme是这样的:

  1. 在ESXi主机上启用SSH访问
  2. 创build一个Linux VM – 我使用Ubuntu。 你只需要一个非常小的设置 – 没有GUI或任何东西。
  3. 通过USB将您的APC设备连接到ESXi主机,并将其传递到Linux VM。
    • 确保添加到VM中的USB控制器与APC设备所连接的实际物理USB控制器相匹配,即只有在物理设备是USB3设备时才添加XHCI控制器。 在Linux USB设备驱动程序中,不匹配似乎会造成奇怪的问题。
    • 如果事情没有解决,而且你在dmesg看到ctrl urb status -62这样的错误,则可能是物理控制器与虚拟机中的物理控制器不匹配。 如果他们匹配 – 那么这是一个问题。 我有一个这样的问题的设置,并没有真正的解决scheme。
  4. 在Linux VM上安装apcupsd – 在Ubuntu上,你可以用sudo apt-get install apcupsd安装最新版本。 NUT项目也很好,但我是一个传统主义者。
  5. 通过执行sudo apt-get install putty-tools plink sudo apt-get install putty-tools
  6. 通过执行plink root@<your ESXi host IP>连接到您的ESXI主机。 您可以立即closures连接。 我们的目标是保存主机密钥,以便在我们通过脚本运行时,plink不会再次提示
  7. 编辑/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 has ISCONFIGURED=yes
  8. 编辑/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" ;; 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" ;;
  9. 使用sudo service apcupsd restart重新启动apcupsd,并通过调用apcaccess查看是否正在工作。 如果没有,请检查日志和dmesg
  10. 确保在发生电源故障时需要closures的所有虚拟机都安装了VMWare Tools。 还要确保它们是VM启动/closures列表的一部分(在vSphere Web Client中,转至: vCenter -> <your host> -> Manage -> Settings -> VM Startup/Shutdown )。 确保closures操作是closures客户操作系统。

一旦你运行了这些东西,第8步中的doshutdown scriptlet就会在电源故障时被调用。 这轮将调用ESXi主机上的shutdown.sh脚本,该脚本通过主机上的每个虚拟机中的VMWare Tools软件包发出信号,通过guest虚拟机操作系统进行干净closures。 根据我的经验,它比APC的PowerChute软件更好。

如果您想监视虚拟机中的事情,可以在连接到主UPS控制Linux虚拟机的设备上设置从属apcupsd实例。 你的slave apcupsd.conf文件应该有这样的条目:
UPSTYPE net < your UPS control VM IP >:3551
在这种情况下, UPSCABLE等条目无关紧要。 这也适用于Windows版本的apcupsd ( 在这里可用)。 您可以使用附带的apctray.exe来检查事物的当前状态。

我想,这几乎涵盖了它。

您可以考虑将USB设备直通function用于运行PowerChute的客户端或者其他能够监控UPS运行状况并能够触发ESXi主机(例如apcupsd )closures的软件 。 ESXi 正式只支持非常有限数量的USB设备进行直通 ,但是人们已经连接并通过不同类别的设备已经有了不同的成功,但是APC UPS USB似乎能够根据本次Windows VM或者这个用于CentOS Linux VM 。

从这里查看vSphere Management Assistant(vMA)我们在我的办公室使用它来完成您正在尝试的操作,但Smart-UPS通过USB而不是Back-UPS连接。

虽然可能(可能/一般),我不认为电池电源自动关机是一个好主意。 如果你打算这么做的话,那么对于大多数实际的意图和目的,你可能应该为自己节省电池供电的UPS的钱,并让你的机器停电。 (当然,一个干净的关机总是比电源丢失更好,但是如果在丢失电源时自动closures所有的东西,你似乎错过了几分钟的电池时间。 )

我一直处理的方式是在电源closures时监视SA,以便SA可以使用它们的灰色事件来决定何时(或者甚至是否)closures服务器。 如果是短暂的中断,closures服务器可能不是一个好主意,或者您可能想让一些服务器尽可能长时间地运行起来,只有在电池即将耗尽之前closures服务器。 真的,在我看来,像一个更适合人类的决策任务,而不是一个简单的规则。

在过去的裸机安装中 ,APC PowerChute Plus是我安装过程中不可或缺的一部分。 使用简单的串行信号电缆和Red Hat专用的二进制文件 ,可以轻松地设置规则来pipe理本地连接的服务器。 UPC电池事件,线路电源事件和关机操作的基本电子邮件通知可用:

 POWERCHUTE MAIL MESSAGE Message from PowerChute@Bonanza: UPS on battery: Blackout 000.0 V. 

 POWERCHUTE MAIL MESSAGE Message from PowerChute@Bonanza: Normal power restored: UPS on line. 

要么

 POWERCHUTE MAIL MESSAGE Message from PowerChute@Bonanza: Shutdown started. 

加上一个合理的界面,看看发生了什么…

在这里输入图像描述

该软件最终成为商业(或被埋在APC网站上)。 有几种开源方法提供类似的东西。 但是,这一切都与单个VMWare ESXi主机变得复杂。

这似乎是VMWare应该已经整合到基础pipe理程序中的东西。 这是基本的,可以为用户提供体面的保护。 我现在看到的最常见的补救措施是USB通过专用虚拟机,networking守护进程或做我所做的事情; 不configuration任何自动或电池关机…

当然,我通常会使用可以支持一小时或更长时间的系统负载的UPS,但是会发生长时间的中断。 也许另外一个select是收集一些低成本或翻新的networking接口卡,并计划购买SmartUPS设备至less…

看看下面的链接 。 不是最优雅的解决scheme,而是一个非常实用,非常简单的解决scheme。 在安全性方面可能存在一些缺陷(取决于您的特定networkingdevise,主机上加载的客人以及访问用户对这些客人的访问权限,但是您可以拨打该电话。

我使用MrMajestyk解决scheme,只改变了通过使用rsa公钥ssh访问没有密码通过plink的ssh访问。 在apcupsd虚拟机中生成的rsa密钥必须包含在vmware主机的/ etc / ssh / keys-root / authorized_keys中。