apcupsd 从属客户端不断丢失和恢复与 UPS 主设备的通信

apcupsd 从属客户端不断丢失和恢复与 UPS 主设备的通信

在 VMWare ESXI 5.0.0(vSphere Hypervisor - 免费版本)上,我有三个服务器映像。全部运行 CentOS 6 - Linux。全部配置为运行 apcupsd(http://www.apcupsd.org/) 用于控制 APC upses 的守护进程。

其中一台服务器(主服务器)使用 USB 电缆连接到 APC CS 350 UPS。apcupsd 配置为在端口 3551 上提供网络服务器。

另外两台(也是虚拟化的)服务器已将 apcupsd 配置为从主服务器检索 UPS 状态。

它能工作,但我看到两个从属服务器上的 apcupsd 发出大量警告。在终端窗口中,我看到条目说

来自 root@slavehostname 的广播消息(2012 年 11 月 1 日星期四 19:55:10):

警告 UPS 主主机名通信丢失

来自 root@slavehostname 的广播消息(2012 年 11 月 1 日星期四 19:55:47):

与 UPS masterhostname 的通信已恢复

同一天,我看到大约 200 组丢失/恢复的消息。白天出现的频率比晚上高得多。

我没有收到任何关于主人的警告。

这些服务器有大量的内存和 CPU 可用。实际上没有发生交换。我不认为它们资源匮乏。而且它们通常不做太多的工作。

这是主配置设置(忽略 EPROM 设置):

UPSCABLE usb
UPSTYPE usb
DEVICE
POLLTIME 10
LOCKFILE /var/lock
SCRIPTDIR /etc/apcupsd
PWRFAILDIR /etc/apcupsd
NOLOGINDIR /etc
ONBATTERYDELAY 6
BATTERYLEVEL 5
MINUTES 3
TIMEOUT 0
ANNOY 300
ANNOYDELAY 60
NOLOGON disable
KILLDELAY 0
NETSERVER on
NISIP 0.0.0.0
NISPORT 3551
EVENTSFILE /var/log/apcupsd.events
EVENTSFILEMAX 10
UPSCLASS standalone
UPSMODE disable
STATTIME 0
STATFILE /var/log/apcupsd.status
LOGSTATS off
DATATIME 0

这是从属设置:

UPSCABLE ether
UPSTYPE net       
DEVICE 192.168.0.59:3551
POLLTIME 10
LOCKFILE /var/lock
SCRIPTDIR /etc/apcupsd
PWRFAILDIR /etc/apcupsd
NOLOGINDIR /etc
ONBATTERYDELAY 12
BATTERYLEVEL 10
MINUTES 7
TIMEOUT 0
ANNOY 300
ANNOYDELAY 60
NOLOGON disable
KILLDELAY 0
NETSERVER on
NISIP 0.0.0.0
NISPORT 3551
EVENTSFILE /var/log/apcupsd.events
EVENTSFILEMAX 10
UPSCLASS standalone
UPSMODE disable
STATTIME 20
STATFILE /var/log/apcupsd.status
LOGSTATS off
DATATIME 0

我想寻求帮助,了解如何继续前进。我该如何调试?关于我可能如何配置服务器以导致这种情况的任何建议。

答案1

这并不能解决根本问题,但它有助于稍微清理控制台:

输出这些消息的脚本名为apccontrol,在我的 Ubuntu 12.04.02 LTS 中它位于/etc/apcupsd。它用于wall所有消息。

但它也会调用该目录中的其他脚本(如果它们存在)来执行辅助处理,例如每次发生通信故障时向 root 发送电子邮件。您可以通过移动或更改脚本来关闭此功能。

另外:如果其他脚本以状态代码 99 退出,则apccontrol不会调用默认操作,并且您的墙上不会出现垃圾邮件。

我刚刚用它将所有通信丢失警报推送到 syslog 而不是 wall,现在它不会弄乱我尝试使用的所有终端。我可以将轮询时间重新设置为默认值 60,这样我的从属盒仍会注意到 UPS 是否启动。

答案2

我在从机上也遇到了类似的问题,因为从机与主机的网络连接不良。因此我们收到了很多“与 UPS 的通信丢失/恢复”的电子邮件。

由于在我们的案例中底层网络问题无法快速修复,我修改了发送电子邮件的脚本,这样如果中断时间足够短以至于可以忽略,它们就不会发送电子邮件。

我更改的两个脚本是/etc/apcupsd/commfailure/etc/apcupsd/commok

这是/etc/apcupsd/commfailure

#!/bin/sh
#
# This shell script if placed in /etc/apcupsd
# will be called by /etc/apcupsd/apccontrol when apcupsd
# loses contact with the UPS (i.e. the serial connection is not responding).
# We send an email message to root to notify him.
#

HOSTNAME=`hostname`
MSG="$HOSTNAME Communications with UPS $1 lost"

wait=12

# Wait $wait seconds, and only send email
# if still not online
sleep $wait
status=$(/sbin/apcaccess status)

if echo "$status" | grep -q '^STATUS.*COMMLOST' ; then
    logger -t apcupsd "commfailure for over $wait seconds. Sending mail"
    (
        echo "$MSG for over $wait seconds"
        echo "$status"
    ) | $APCUPSD_MAIL -s "$MSG" $SYSADMIN
    # ensure mail will also be sent on restore
    rm -f /run/apcupsd.nomail
else
    touch /run/apcupsd.nomail
    logger -t apcupsd "commfailure for less than $wait seconds. Created nomail file, and not sending any email."
fi

exit 0

这是/etc/apcupsd/commok

#!/bin/sh
#
# This shell script if placed in /etc/apcupsd
# will be called by /etc/apcupsd/apccontrol when apcupsd
# restores contact with the UPS (i.e. the serial connection is restored).
# We send an email message to root to notify him.
#

# wait at least as long as the wait defined in commfailure
# so that we know if we need to send mail or not

wait=13

sleep $wait

if [ -f /run/apcupsd.nomail ]; then
    logger -t apcupsd "Skip sending mail on restore (found nomail set by commfailure)"
    exit
fi

HOSTNAME=`hostname`
MSG="$HOSTNAME Communications with UPS $1 restored"
#
(
   echo "$MSG"
   echo " "
   /sbin/apcaccess status
) | $APCUPSD_MAIL -s "$MSG" $SYSADMIN
exit 0

答案3

我知道这是一篇老帖子,但我的经验可能会有用......

我最初通过 APC BackUPS 650CS 为服务器供电。这一直很有效。

我升级到了 APC BX1100CI-MS。这种设置带来了很多问题 - 从属机器上出现“通信丢失”消息,apcaccess 通常需要五秒钟或更长时间才能产生输出。另一个奇怪的现象是,当电源断电时,apcupsd 每秒报告“断电/恢复供电”状态大约三次,持续几秒钟。最糟糕的是,这种设置要求每两到三个月更换一次电池。APC 更换​​了整个装置三次,然后才投降,并给了我一台 BackUPS Pro BR1200 作为交换。

这种新设置没有产生任何“通信丢失”消息,只生成一条“电源丢失”消息,而 apcaccess 产生即时输出。我等着看电池的续航能力如何。

我怀疑后来的 APC 型号稍微改变了控制协议,而 apcupsd 无法应对。

答案4

在连接到 UPS 的服务器的配置文件中

“UPSCLASS 独立版”

应该可能是

“UPSCLASS 网络管理员”

相关内容