Sun Java System Messaging Server 6.3 管理指南

A.3 为 Solaris 10 操作系统配置 SNMP 支持

默认情况下,SNMP 监视在 Messaging Server 中是禁用的。试图最小化默认 Messaging Server 配置表示的服务数时选择默认设置。不要将此默认设置理解为使用 SNMP 监视会引起性能损耗。实际上,Messaging Server 的 SNMP 支持消耗非常少的资源,对 Messaging Server 的影响很小。当然,必须要注意的一点是,使用 Messaging Server 的 SNMP 支持之前需要一次性配置步骤。此外,平台 Net-SNMP 主代理的默认配置(snmpd)通常需要更改,以便运行子代理,如 Messaging Server。 该更改是下一节讨论的主题。

A.3.1 Net-SNMP 配置

Messaging Server 基于 Net-SNMP 的 SNMP 子代理使用 AgentX 协议与平台 SNMP 主代理进行通信 (RFC 2741)。Net-SNMP 主代理 snmpd 必须配置为允许使用 AgentX 协议。要完成此操作,请确保平台的 snmpd.conf 文件包含下行


master agentx

如果该行不存在,则添加该行并重新启动 snmpd 守护程序。请注意,将 SIGHUP 信号发送给守护程序是不够的。重新启动了 snmpd 守护程序之后,请查找 UNIX 域套接字,该套接字是 snmpd 为 AgentX 通信创建的。在 Solaris 和 Linux 系统中,该套接字默认情况下显示为特殊文件 /var/agentx/master;但是,其位置和名称可能会通过 snmpd.con 文件进行更改。

Solaris 10 操作系统 snmpd 配置如下所示:


%cp /etc/sma/snmp/snmpd.conf /etc/sma/snmp/snmpd.conf.save
% cat >> /etc/sma/snmp/snmpd.conf
# Messaging Server's subagent requires the AgentX protocol
master agentx
^D
% cat >> /etc/sma/snmp/snmpd.conf
% ls -al /var/agentx/
srwxrwxrwx 1 root root 0 Aug 9 13:58 /var/agentx/master

此外,在 Red Hat Enterprise Linux AS 3 系统中,默认 snmpd.conf 文件限制“公用”SNMP 社区可能会查看的信息。因此有必要删除该限制,或者将其扩展为包含 Messaging Server 子代理实现的 MIB。考虑到初始测试,建议采用后者。实现这一点的方式是,包含名为 "systemview" 的视图中的 OID 子树 mib-2.27 和 mib-2.28(如下所示)。对于实际部署,每个站点必须考虑其总体安全策略。请注意,SNMP 子代理提供的信息是“只读”的。


% cp /etc/snmp/snmpd.conf /etc/snmp/snmpd.conf.save
% cat >>/etc/snmp/snmpd.conf
# Messaging Server's subagent requires the AgentX protocol
master agentx
# Messaging Server's subagent exports mib-2.27 and .28
# Add the mib-2.27 and .28 OID subtrees to the systemview
view systemview included .1.3.6.1.2.1.27
view systemview included .1.3.6.1.2.1.28
^D
% /sbin/service snmpd restart
% ls -al /var/agentx/master
srwxr-xr-x 1 root root 0 Aug 8 21:20 /var/agentx/master

如果您将使用 SNMP v3 上下文名称来区分同时运行在同一主机上的不同 Messaging Server 实例的 MIB,则至少还需要配置一个 SNMP v3 以及用于 SNMP v3 查询的用户名和密码。

A.3.2 Messaging Server 子代理配置

至于 Messaging Server 的 SNMP 子代理的基本操作,您只需启用它并发出一个一次性手动启动命令。之后,无论何时启动或停止 Messaging Server,子代理将同样被启动或停止。在 Solaris 和 Linux 上实现此配置所需的命令如下:


% configutil -o local.snmp.enable -v 1
% start-msg snmp

运行后,可以使用 snmpwalk 命令通过命令行测试子代理。请参见示例下面适用于 Solaris 和 Linux 的屏幕截图。请注意,文件 rfc2248.txtrfc2249.txt 是网络服务和 MTA MIB 的副本。在 Solaris 系统中,可以在 NETWORK-SERVICES-MIB.txtMTA-MIB.txt 下的 /etc/sma/snmp/mibs/ 目录中找到这些文件。没有必要将这些文件提供给 snmpwalk 工具,但是,这样做允许 snmpwalk 输出每个 MIB 变量的名称,而不是它们的数字对象标识符 (OID)。

在 Solaris 上的基本测试:


% D=/opt/SUNWmsgsr/examples/mibs /usr/sfw/bin/snmpwalk -v 1 -c public \
    -m +$D/rfc2248.txt:$D/rfc2249.txt 127.0.0.1 mib-2.27
NETWORK-SERVICES-MIB::applName.1 = STRING: /opt/SUNWmsgsr MTA on mail.siroe.com
...
% D=/opt/SUNWmsgsr/examples/mibs /usr/sfw/bin/snmpwalk -v 1 -c public \
     -m +$D/rfc2248.txt:$D/rfc2249.txt 127.0.0.1 mib-2.28
MTA-MIB::mtaReceivedMessages.1 = Counter32: 1452
MTA-MIB::mtaStoredMessages.1 = Gauge32: 21
...

在 Linux 上的基本测试:


% export D=/opt/sun/messaging/examples/mibs
% /usr/bin/snmpwalk -v 1 -c public \
     -m +$D/rfc2248.txt:$D/rfc2249.txt 127.0.0.1 mib-2.27
NETWORK-SERVICES-MIB::applName.1 = STRING: /opt/sun/messaging MTA on mail.siroe.com
...
% /usr/bin/snmpwalk -v 1 -c public \
     -m +$D/rfc2248.txt:$D/rfc2249.txt 127.0.0.1 mib-2.28
MTA-MIB::mtaReceivedMessages.1 = Counter32: 21278
MTA-MIB::mtaStoredMessages.1 = Gauge32: 7
...

A.3.3 作为独立的 SNMP 代理运行

在将 Messaging Server SNMP 子代理配置为独立的 SNMP 代理运行之前,您必须首先决定该代理侦听 SNMP 请求的以太网接口和 UDP 端口。在默认情况下,该代理将使用 UDP 端口 161 来侦听所有可用的以太网接口。在大多数情况下,您需要更改此端口号,以便不影响平台的 SNMP 主代理 snmpd。在某些情况下,例如 HA 故障转移,您还需要将所有可用接口中的以太网接口 (INADDR_ANY) 更改为由其 IP 地址标识的特定接口。以太网接口和 UDP 端口这两个概念由 local.snmp.listenaddrlocal.snmp.port 选项控制。

对以太网接口和 UDP 端口作出选择之后,应该将 local.snmp.standalone 选项的值设置为 1 并重新启动子代理。重新启动后,它将作为一个与 snmpd 和任何子代理无关的 SNMP 代理运行。

例如,要作为独立代理(侦听 IP 地址为 10.53.1.37 的以太网接口的 UDP 端口 9161)运行,请发出如下所示的命令。

配置为作为独立代理运行:


% configutil -o local.snmp.port -v 9161
% configutil -o local.snmp.listenaddr -v 10.53.1.37
% configutil -o local.snmp.standalone -v 1
% stop-msg snmp
% start-msg snmp
% snmpwalk -v 1 -c public 10.53.1.37:9161 .
SNMPv2-SMI::mib-2.27.1.1.2.1 = STRING: "/opt/SUNWmsgsr MTA on mail.siroe.com"
...

A.3.4 监视 Messaging Server 的多个实例

这里讨论了两种用于监视同一主机上运行的多个 Messaging Server 实例的技术。第一种技术,以独立模式运行子代理,这非常适于高可用性的故障转移 (HA) 配置,其中 Messaging Server 的单个实例可能会在主机之间动态地移动。第二种技术,使用 SNMP v3 上下文名称,其优点体现在 Messaging Server 的多个实例被限制在单个系统上的情况下,该技术需要限制由 SNMP 监视软件轮询的 IP 地址数(例如,当监视软件的许可具有基于 IP 地址的成本组件时)。后一种技术也可用于 HA 故障转移设置,但是需要轮询和独立模式技术一样多的 IP 地址。

A.3.5 将独立的代理用于高可用性故障转移

在需要 Messaging Server 的 SNMP 监视的高可用性故障转移中,建议将 Messaging Server 的 SNMP 子代理作为A.3.3 作为独立的 SNMP 代理运行中所描述的独立子代理运行。子代理运行在独立模式下时,Messaging Server 的每个 HA 实例都应该将其 local.snmp.listenaddr 选项设置为该实例的故障转移 IP 地址的值。要简化管理,每个实例应该使用相同的 UDP 端口,但该端口要与 snmpd 守护程序(运行在每个物理群集主机上)所使用的端口区别开。通常,这些守护程序将使用 UDP 端口 161,因此要使用 local.snmp.port 选项明确指定不同的端口号。

按给出的建议配置好 Messaging Server 的 SNMP 支持后,监视站可以通过其故障转移 IP 地址或主机名来监视每个 Messaging Server 实例,而不管实例运行在哪个物理群集主机上。而且,您可以确保 Messaging Server 的独立 SNMP 代理不会相互冲突,因为每个代理只侦听它自己的虚拟以太网接口,该接口由实例的唯一故障转移 IP 地址标识。(这些虚拟以太网接口由 HA 故障转移框架自动创建。)由于对 UDP 端口进行了仔细选择,因此代理不会与在群集中的系统上运行的 snmpd 守护程序冲突。

A.3.6 通过 SNMP v3 上下文名称区分多个实例

虽然使用A.3.3 作为独立的 SNMP 代理运行中所描述的以独立模式使用 Messaging Server 的 SNMP 支持没有什么不利,但一些站点还是希望使用更传统的子代理模式,同时仍具有监视同时运行在同一系统上的多个 Messaging Server 实例的功能。例如,许可模型限制轮询 IP 地址数的 SNMP 监视系统。要实现此目标,请继续运行 Messaging Server 的 SNMP 子代理,并将 local.snmp.standalone 设置为 0。此外,为 local.snmp.enablecontextname 选项指定一个非零值,从而将每个 Messaging Server 实例配置为使用不同的 SNMP v3 上下文名称。如果需要的上下文名称不同于 service.defaultdomain 的值,则使用 local.snmp.contextname 选项设置所需的名称。重新启动每个 Messaging Server 的 SNMP 子代理实例之后,就可以通过包含正确上下文名称的 SNMP v3 查询来监视这些实例。运行在同一系统上的两个 Messaging Server 实例的 MIB 通过实例的 SNMP v3 上下文名称来区分,因此不会出现 MIB 对象标识符 (OID) 冲突。

A.3.7 Messaging Server 的基于 Net-SNMP 的 SNMP 子代理选项

以下选项只适用于 Messaging Server 的基于 Net-SNMP 的 SNMP 子代理。该子代理在运行 Solaris 10 以及更高版本的 Solaris 平台上使用,也可以在 Linux 平台上使用。以下介绍的选项不适用于为运行 Solaris 9 及更低操作系统的 Solaris 平台而提供的传统 SNMP 子代理。

以下介绍的选项是 configutil 选项。因此,可通过以下形式的命令来查看这些选项的值:


% configutil -o option-name

其中 option-name 是要显示选项值的选项的名称。要设置或更改选项的值,请使用以下形式的命令


% configutil -o option-name -v option-value

其中 option-value 是要设置的值。需要重新启动才能使这些选项的更改生效:


% stop-msg snmp
% start-msg snmp

接下来给出每个选项的说明及其默认值。

表 A–1 SNMP 子代理选项

选项(默认值) 

说明 

local.snmp.启用 (0)

Messaging Server SNMP 子代理只在该选项值为 1true 时才运行,在这种情况下,Messaging Server 将自动停止或启动子代理,并将其作为正常启动和关闭过程的一部分。默认情况下,该选项设置为 0,这样会禁用子代理的操作。在启用子代理之前,请确保平台的主代理已按照A.3.3 作为独立的 SNMP 代理运行中所描述的方法正确配置。

local.snmp.standalone (0)

Messaging Server 的 SNMP 支持通常作为 SNMP 子代理运行,并通过平台的 SNMP 主代理 snmpd 接收 SNMP 请求。该操作模式是默认设置,通过将该选项的值指定为 0 或 false 来选择此默认设置。但是,如A.3.3 作为独立的 SNMP 代理运行中所述,子代理可能会以“独立”模式运行,从而以独立于 snmpd 的 SNMP 代理运行。当以独立模式运行时,子代理(现在是 SNMP 代理)直接侦听以太网接口和 UDP 端口上的 SNMP 请求,以太网接口和 UDP 端口分别由 local.snmp.listenaddrlocal.snmp.port 选项指定。要在此独立模式下运行,请将该选项的值指定为 1 或 TRUE

以独立模式运行并不影响运行在同一系统上的其他 SNMP 主代理或子代理。 

local.snmp.listenaddr (INADDR_ANY)

以独立模式运行时侦听 SNMP 请求的主机名或以太网接口的 IP 地址。默认情况下,侦听所有可用的接口。这对应于指定值 INADDR_ANY。可以通过指定与接口关联的 IP 地址或主机名来选择特定接口。此接口可以是物理接口,也可以是虚拟接口。

local.snmp.standalone 设置为 0 或 FALSE 时忽略该选项。

local.snmp.cachettl (30)

缓存监视数据的生存时间 (TTL)(以秒为单位)。该选项控制在使用从 Messaging Server 获得的新信息刷新监视数据之前,子代理报告相同监视数据的时间。除邮件循环信息外,默认情况下,缓存数据的时间不超过 30 秒。循环信息(通过扫描 .HELD 文件确定)每 10 分钟才更新一次。这是因为扫描所有盘上邮件队列会消耗资源。

请注意,子代理并不持续更新其监视数据:只有在收到 SNMP 请求,并且高速缓存的数据过期时(即,超过其生存时间)才进行更新。如果将生存时间 (TTL) 设置为 30 秒,并且每 5 分钟发出一次 SNMP 请求,则每个 SNMP 请求将导致子代理从 Messaging Server 中获得刷新的数据。即,每 5 分钟就可从 Messaging Server 中获得一次数据。另一方面,如果每 10 秒发出一次 SNMP 请求,则子代理将使用已缓存了 29 秒的数据来响应其中一些请求;Messaging Server 则每 30 秒被轮询一次。 

local.snmp.servertimeout (5)

子代理通过实际打开到每个服务的 TCP 连接,以及进行协议转换来确定每个所监视服务的操作状态。该超时值(以秒为单位)控制子代理等待响应协议转换中每个步骤的时间。默认情况下,使用的超时值为 5 秒。 

local.snmp.directoryscan (1)

使用该选项控制子代理是否为 .HELD 邮件文件和最早的邮件文件执行盘上邮件队列扫描。该信息对应于 mtaGroupLoopsDetectedmtaGroupOldestMessageStoredmtaGroupOldestMessageId MIB 变量。当该选项的值为 1 或 true 时,将根据需要维护和更新此信息的缓存。具有大量排队邮件并且不需要这些特定 MIB 变量的站点应该考虑将该选项的值设置为 0 或 false

local.snmp.enablecontextname (0)

子代理可以在 SNMP v3 上下文名称 下注册其 MIB。完成此操作后,可以仅通过 SNMP v3 客户端请求 MIB,该客户端在其 SNMP 请求中指定上下文名称。使用上下文名称允许多个独立的子代理在同一 OID 树下(即,同一 SNMP 主代理下)注册网络服务和 MTA MIB。有关详细信息,请参见A.3.4 监视 Messaging Server 的多个实例

要启用 SNMP v3 上下文名称,请将该选项的值指定为 1 或 true。当完成此操作后,子代理将默认使用其上下文名称的 service.defaultdomain 选项的值。要对上下文名称使用别的值,请使用 local.snmp.contextname 选项。

local.snmp.contextname (service.defaultdomain)

使用 local.snmp.enablecontextname 启用 SNMP v3 上下文名称时,该选项可用来明确设置子代理用于其 MIB 的上下文名称。为该选项提供的值是字符串值,必须适合用作 SNMP v3 上下文名称。当 local.snmp.enablecontextname 的值为 0 或 false 时忽略该选项。