MeterMaid 的配置存储在 msg.conf 中,并通过 configutil 维护。下面是 MeterMaid 当前支持的设置:括号中是默认值。有关 MeterMaid 参数的完整列表,请参见《Sun Java System Messaging Server 6.3 Administration Reference》中的“configutil Parameters”。
local.metermaid.enable 在运行 MeterMaid 守护进程的系统上,该设置必须设置为 yes,以便启动 Watcher 并对 MeterMaid 进行控制。
logfile.metermaid.* 它与 map、pop 和其他服务使用的设置相同。默认情况下,MeterMaid 将日志文件写入 msg-svr-base/data/log/metermaid。
metermaid.config.listenaddr (INADDR_ANY ) MeterMaid 应绑定的地址。在大多数系统中,不需要更改默认值,但对于多穴或 HA 系统,建议指定相应的地址。
metermaid.config.maxthreads (20) MeterMaid 服务器是多线程的,用于维护安排任务的线程池。该值设置了 MeterMaid 将使用的最大线程数。在有 4 个以上 CPU 的系统中,增加该值可能会增加总的吞吐量。
metermaid.config.port (63837) 这是 MeterMaid 侦听连接的端口,MeterMaid 客户端将连接到此端口。
metermaid.config.secret(无默认值,必须提供值) 为了验证外来连接, MeterMaid 使用一个共享机密,该机密在客户端连接到 MeterMaid 后立即发送。
metermaid.config.serverhost(无默认值,必须提供值) 这是客户端将要连接的主机名或 IP 地址。它可能与 metermaid.config.listenaddr 相同,但更可能具有一个特定值将客户端定向到一个系统,特别是 Messaging Server 环境下的系统。
以下设置供 check_metermaid 客户端使用:
metermaid.mtaclient.connectfrequency (15) 每 connectfrequency 秒尝试一次连接。当客户端需要连接到 MeterMaid 时,将使用此设置作为内部限制,以防止在 MeterMaid 不可用的情况下持续尝试连接。在客户端无法与 MeterMaid 通信期间,该设置将向 MTA 映射引擎返回 "fail" 状态,表示 MeterMaid 还没有阻塞该连接。
例如,如果 check_metermaid.so 尝试连接到 MeterMaid,但由于某种原因失败了,那么在接下来的 N 秒(由 metermaid.mtaclient.connectfrequency 指定)内将不再进行其他连接尝试。该设置将防止 check_metermaid.so 在 MeterMaid 无法工作的情况下过于频繁地尝试连接到 MeterMaid。
metermaid.mtaclient.connectwait (5) 当客户端等待 MeterMaid 的连接(初始连接或重用另一个已建立好的连接)时,该设置在返回 "fail" 状态并允许继续连接之前将等待 connectwait 秒。
metermaid.mtaclient.debug (no) 如果启用该选项,客户端中的调试信息将被输入到服务器或 SMTP 服务器的特定于线程的日志文件中。
metermaid.mtaclient.maxconns (3) 为了支持多线程的服务器,客户端将维护一个到 MeterMaid 的连接池。这样做可以增加通信期间的并发性。但是,由于 MeterMaid 执行的内部锁定,对特定表的访问被限制为一次一个请求,因此来自单个进程的多个连接可能会提供一些好处,但比较有限。
metermaid.mtaclient.readwait (10) 在与 MeterMaid 通信时,客户端在 "fail" 状态并允许继续连接之前将等待 readwait 秒。
最后,也会在 msg.conf 中定义限制表,如下所示。 每个配置参数中的 * 是被定义的特定表的名称。例如,对于名为 internal 的表,第一个参数应为 metermaid.table.internal.data_type.
metermaid.table.*.data_type(字符串) MeterMaid 在其表中支持两类数据:字符串和 ipv4。字符串数据被限制为每个条目 255 个字节,并可以使用区分大小写或不区分大小写功能进行比较(请参见下面列出的 metermaid.table.*.options)。
metermaid.table.*.max_entries (1000) MeterMaid 在初始化每个表时,将预分配此数量的条目。MeterMaid 自动回收旧条目,即使这些条目还没有过期。当收到新连接时,MeterMaid 将重新使用最近访问得最少的条目。站点应指定一个足够大的值以缓存 quota_time 期间接收到的连接。
metermaid.table.*.options 是一个以逗号分隔的关键字列表,用于定义表的行为或特征。有效的关键字有:
nocase — 在使用数据时,使用不区分大小写的比较功能来完成所有比较。(此选项仅对字符串数据有效。)
penalize — 在 quota_time 秒之后,限制通常会将连接数重置为 0,如果启用了 penalize 选项,限制将根据配额减少连接数(但不会小于 0),以便其他连接尝试减少以后的 quota_time 周期。例如,如果配额是 5,quota_time 为 60,在第一分钟内系统收到 12 次连接尝试,则头 5 次连接将被接受,而接下来的 7 次连接将被拒绝。过了 60 秒之后,根据特定地址计算的连接数将减少到 7,仍然将其保持在配额之上,并拒绝连接尝试。假定没有进行额外的连接尝试,又经过 60 秒的周期之后,连接数将进一步减为 2,MeterMaid 会重新允许连接尝试。
metermaid.table.*.quota (100) 当收到连接时,它将根据配额计数。如果 quota_time 秒内接收到的连接数超过了该值,MeterMaid 将拒绝连接。(对外来连接的实际影响是由映射表控制的,这可能会导致额外的检查、延迟或拒绝连接。)
metermaid.table.*.quota_time (60) 它指定了连接将根据 quota 进行计数的时间段(秒数)。经过这么多秒后,将根据该表的 type 减少基于外来地址所计算的连接数。
metermaid.table.*storage (hash) MeterMaid 可以使用两种不同的存储方法:hash 和 splay。建议使用默认的散列表,但在某些情况下,splay 树可能会提供更快的查找功能。
metermaid.table.*.type (throttle) 目前,MeterMaid 唯一支持的表类型为 throttle。该类型的表跟踪数据,通常是 IP 地址,并在 quota_time 秒的周期内将外来连接限制为 quota 连接。