上一章 目录 索引 下一章 |
Sun Java System Message Queue 3.5 SP1 管理指南

> ## 第 5 章
> 启动与配置代理

> 安装 Sun Java System Message Queue 以后，可以使用 imqbrokerd 命令来启动代理。代理实例的配置由一组配置文件和使用 imqbrokerd 命令传送的选项共同控制，这些选项会覆盖配置文件中相应的属性。

> 本章说明了 imqbrokerd 命令的语法，以及如何使用命令行选项和配置文件来配置代理实例。此外，本章还介绍了如何执行以下操作：

> - 编辑代理实例配置文件
> - 使用代理群集
> - 控制代理的日志记录

> 关于如何启动代理并将其用作 Windows 服务的说明，请参见“使用代理作为 Windows 服务”。

> ##

> 配置文件

> 已安装代理的配置文件模板用于配置代理，这些模板所在目录随操作系统的不同而有所不同，如附录 A“Message Queue 数据的位置”所示。

> 该目录存储以下文件：

> - 启动时装入的默认配置文件。文件名是 default.properties。该文件不可编辑。您可能需要读取该文件来确定默认设置以及查找要更改的属性的确切名称。
> - 安装配置文件，其中包含安装 Message Queue 时指定的所有属性。文件名是 install.properties。安装完成后该文件不可编辑。

> ### 实例配置文件

> 首次运行一个代理时，系统将创建一个实例配置文件，用于指定该代理的实例的配置属性。实例配置文件存储在一个目录中，该目录用与此配置文件相关联的代理实例的名称 (instanceName) 标识（请参见附录 A“Message Queue 数据的位置”）：

> …/instances/instanceName/props/config.properties

> 注意 | …/instances/instanceName 目录（和实例配置文件）由相应代理实例的创建人拥有。代理实例的所有后续启动操作必须由同一用户执行。

> 实例配置文件由代理实例维护。使用管理工具更改配置时，此文件也将被修改。您还可以手动编辑实例配置文件来更改配置（请参见“编辑实例配置文件”）。要完成此操作，您必须是 …/instances/instanceName 目录的拥有者，或者以超级用户身份登录以便更改目录权限。

> 如果连接群集中的代理实例（请参见“多代理群集（企业版）”），那么可能还需要使用群集配置文件来指定群集配置信息。有关详细信息，请参见“群集配置属性”。

> ### 合并属性值

> 启动时，系统会合并不同配置文件中的属性值。它将使用在安装配置文件和实例配置文件中设置的值来覆盖默认配置文件中指定的值。您可以用 imqbrokerd 命令选项来覆盖得到的值。图 5-1 所示为以上说明的图解。

> 图 5-1 代理配置文件

> ### 属性命名语法

> 配置文件中的所有 Message Queue 属性定义均使用以下命名语法：

> propertyName=value[[,value1]]

> 例如，下面的条目指定：在拒绝其他消息前，代理可以在内存和持久性存储器中最多保留 50,000 条消息：

> imq.system.max_count=50000

> 下面的条目指定：将每天（86400 秒）创建一个新日志文件：

> imq.log.file.rolloversecs=86400

> 表 5-1 按字母顺序列出了代理配置属性及其默认值。

> ### 编辑实例配置文件

> 首次运行代理实例时，系统将自动创建一个 config.properties 文件。您可以编辑该实例配置文件，以自定义相应代理实例的行为和资源使用。

> 代理实例仅在启动时读取 config.properties 文件。要永久更改 config.properties 文件，您可以：

> - 使用管理工具。关于可以使用 imqcmd 设置的属性的信息，请参见表 6-4。
> - 在代理实例关闭时编辑 config.properties 文件，然后重新启动实例。（在 Solaris 和 Linux 平台中，只有第一个启动代理实例的用户具有编辑 config.properties 文件的权限。）

> 表 5-1 按字母顺序列出了代理配置属性及其默认值。关于各个属性的含义和用法的更多信息，请参考指定的交叉参考的小节。

> 表 5-1 代理实例配置属性

> 属性名称 | 类型 | 默认值 | 参考
> --- | --- | --- | ---
> imq.accesscontrol.enabled | 布尔值 | true | 表 2-6
> imq.accesscontrol.file. filename | 字符串 | accesscontrol.properties | 表 2-6
> imq.authentication.basic. user_repository | 字符串 | file | 表 2-6
> imq.authentication.client. response.timeout | 整数（秒） | 180 | 表 2-6
> imq.authentication.type | 字符串 | digest | 表 2-6
> imq.autocreate.destination. isLocalOnly | 布尔值 | false | 表 2-10
> imq.autocreate.destination. limitBehavior | 字符串 | REJECT_NEWEST | 表 2-10
> imq.autocreate.destination. maxBytesPerMsg | 字节字符串 1 | 10k | 表 2-10
> imq.autocreate.destination. maxNumMsgs | 整数 | 100,000 | 表 2-10
> imq.autocreate.destination. maxNumProducers | 整数 | 100 | 表 2-10
> imq.autocreate.destination. maxTotalMsgBytes | 字节字符串 1 | 10m | 表 2-10
> imq.autocreate.queue | 布尔值 | true | 表 2-10
> imq.autocreate.queue. consumerFlowLimit | 整数 | 1000 | 表 2-10
> imq.autocreate.queue. localDeliveryPreferred | 布尔值 | false | 表 2-10
> imq.autocreate.queue. maxNumActiveConsumers | 整数 | 1 | 表 2-10
> imq.autocreate.queue. maxNumBackupConsumers | 整数 | 0 | 表 2-10
> imq.autocreate.topic | 布尔值 | true | 表 2-10
> imq.autocreate.topic. consumerFlowLimit | 整数 | 1,000 | 表 2-10
> imq.cluster.property_name |  |  | 表 5-3
> imq.hostname | 字符串 | 所有可用的 IP 地址 | 表 2-3
> imq.httpjms.http.property_name |  |  | 表 C-1
> imq.httpsjms.https.property_name |  |  | 表 C-3
> imq.keystore.property_name |  |  | 表 8-8
> imq.log.console.output | 字符串 | ERROR|WARNING | 表 2-9
> imq.log.console.stream | 字符串 | ERR | 表 2-9
> imq.log.file.dirpath | 字符串 | 请参见附录 A“Message Queue 数据的位置” | 表 2-9
> imq.log.file.filename | 字符串 | log.txt | 表 2-9
> imq.log.file.output | 字符串 | ALL | 表 2-9
> imq.log.file.rolloverbytes | 整数（字节） | -1（不转移） | 表 2-9
> imq.log.file.rolloversecs | 整数（秒） | 604800 | 表 2-9
> imq.log.level | 字符串 | INFO | 表 2-9
> imq.log.syslog.facility | 字符串 | LOG_DAEMON | 表 2-9
> imq.log.syslog.identity | 字符串 | imqbrokerd_${imq.instanceName} | 表 2-9
> imq.log.syslog.logconsole | 布尔值 | false | 表 2-9
> imq.log.syslog.logpid | 布尔值 | true | 表 2-9
> imq.log.syslog.output | 字符串 | ERROR | 表 2-9
> imq.log.timezone | 字符串 | 当地时区 | 表 2-9
> imq.message.expiration.interval | 整数（秒） | 60 | 表 2-4
> imq.message.max_size | 字节字符串 1 | 70m | 表 2-4
> imq.metrics.enabled | 布尔值 | true | 表 2-9
> imq.metrics.interval | 整数（秒） | -1（从不） | 表 2-9
> imq.metrics.topic.enabled | 布尔值 | true | 表 2-9
> imq.metrics.topic.interval | 整数（秒） | 60 | 表 2-9
> imq.metrics.topic.persist | 布尔值 | false | 表 2-9
> imq.metrics.topic.timetolive | 整数（秒） | 300 | 表 2-9
> imq.passfile.dirpath | 字符串 | 请参见附录 A“Message Queue 数据的位置” | 表 2-6
> imq.passfile.enabled | 布尔值 | false | 表 2-6
> imq.passfile.name | 字符串 | 密码文件 | 表 2-6
> imq.persist.file.destination. message.filepool.limit | 整数 | 100 | 表 2-5
> imq.persist.file.message.cleanup | 布尔值 | false | 表 2-5
> imq.persist.file.message. filepool.cleanratio | 整数 | 0 | 表 2-5
> imq.persist.file.message. max_record_size | 字节字符串 1 | 1m | 表 2-5
> imq.persist.file.sync.enabled | 布尔值 | false | 表 2-5
> imq.persist.jdbc.property_name |  |  | 表 B-1
> imq.persist.store | 字符串 | file | 表 2-5
> imq.ping.interval | 整数 | 120 | 表 2-3
> imq.portmapper.backlog | 整数 | 50 | 表 2-3
> imq.portmapper.hostname | 字符串 | 从 imq.hostname 继承 | 表 2-3
> imq.portmapper.port | 整数 | 7676 | 表 2-3
> imq.resource_state.count | 整数（百分比） | 5000 (green)500 (yellow)50(orange)0 (red) | 表 2-4
> imq.resource_state.threshold | 整数（百分比） | 0 (green)80 (yellow)90(orange)98 (red) | 表 2-4
> imq.service.activelist | 列表 | jms、admin | 表 2-3
> imq.service_name. accesscontrol.enabled | 布尔值 | 从系统范围属性继承值 | 表 2-6
> imq.service_name. accesscontrol.file.filename | 字符串 | 从系统范围属性继承值 | 表 2-6
> imq.service_name. authentication.type | 字符串 | 从系统范围属性继承值 | 表 2-6
> imq.service_name.max_threads | 整数 | 1000 (jms)500 (ssljms)500 (httpjms)500 (httpsjms)10 (admin)10 (ssladmin) | 表 2-3
> imq.service_name. min_threads | 整数 | 10 (jms)10 (ssljms)10 (httpjms)10 (httpsjms)4 (admin)4 (ssladmin) | 表 2-3
> imq.service_name. protocol_type.hostname | 字符串 | 从 imq.hostname 继承 | 表 2-3
> imq.service_name. protocol_type.port | 整数 | 0（动态分配） | 表 2-3
> imq.service_name. threadpool_model | 字符串 | dedicated (jms)dedicated (ssljms)dedicated (httpjms)dedicated (httpsjms)dedicated (admin)dedicated (ssladmin) | 表 2-3
> imq.shared.connectionMonitor_limit | 整数 | 512 （Solaris 和 Linux）64 (Windows) | 表 2-3
> imq.system.max_count | 整数、0（没有限制） | -1 | 表 2-4
> imq.system.max_size | 字节字符串 1、0（没有限制） | -1 | 表 2-4
> imq.transaction.autorollback | 布尔值 | false | 表 2-4
> imq.user_repository.ldap.property_name |  |  | 表 8-5
> 1 键入为字节字符串的值，可以使用字节、千字节和兆字节的形式来表示：例如：1000 表示 1000 字节；7500b 表示 7500 字节；77k 表示 77 千字节（77 x 1024 = 78848 字节）；17m 表示 17 兆字节（17 x 1024 x 1024 = 17825792 字节）

> ##

> 启动代理

> 要启动代理实例，请使用 imqbrokerd 命令。

> 注意 | 使用管理控制台 (imqadmin) 或命令行实用程序(imqcmd) 无法启动代理实例。这两个 Message Queue 管理工具只有代理实例已在运行时才能使用。

> 要覆盖一个或多个属性值，请指定有效的 imqbrokerd 命令行选项。命令行选项覆盖代理配置文件中的值，但仅对当前代理会话有效：命令行选项不会被写入到实例配置文件中。

> ### imqbrokerd 命令的语法

> imqbrokerd 命令的语法如下所示（选项与变量之间以一个空格分隔）：

> imqbrokerd [[ -Dproperty=value]]
> [ -backup fileName]
> [ -cluster ["broker1] [[,broker2]...]"
> [ -dbuser userName] [ -dbpassword password]
> [ -force]
> [ -h|-help]
> [ -javahome path]
> [ -ldappassword password]
> [ -license licenseName]
> [ -loglevel level]
> [ -metrics interval]
> [ -name instanceName]
> [ -password keypassword] [ -passfile fileName]
> [ -port number]
> [ -remove instance]
> [ -reset data]
> [ -restore fileName]
> [ -shared]
> [ -silent|-s] [ -tty]
> [ -upgrade-store-nobackup]
> [ -version]
> [ -vmargs arg1 [[arg2]]

> 注意 | 在 Solaris 中，可以将代理配置为异常退出后自动重新启动，方法是把 /etc/imq/imqborkerd.conf 配置文件中的 RESTART 属性设置为 YES。

> 注意 | 在 Solaris 和 Linux 平台中，对包含配置信息和持久性数据的目录的权限取决于第一次启动代理实例的用户的 umask。因此，为了让代理实例正常运行，就只能由原用户启动该实例。

> ### 启动示例

> 下面的示例说明如何使用 imqbrokerd 命令。有关 imqbrokerd 命令行选项的更多详细信息，请参见表 5-2。

> ##### 启动使用默认代理名称和配置的代理实例

> 使用以下命令：

> imqbrokerd

> 该命令启动一个位于本地计算机上的代理（名为 imqbroker）的默认实例，且其端口映射器的端口号是 7676。

> ##### 启动具有企业版试用许可证的代理实例

> 如果您具有平台版许可证，但希望试用企业版功能 90 天，那么您可以使用 -license 命令行选项并将 try 作为要使用的许可证进行传送，即可启用企业版试用许可证：

> imqbrokerd -license try

> 每次启动代理实例时都必须使用此选项，否则默认情况下将回退到基本的平台版许可证。

> ##### 启动具有插入持久性的已命名代理实例

> 要启动使用插入数据存储（请参见 附录 B“设置插入的持久性”）的名为 myBroker 的代理，并且此代理要求用户名和密码，请使用以下命令：

> imqbrokerd -name myBroker -dbuser myName -dbpassword myPassword

> ### imqbrokerd 选项概述

> 表 5-2 说明了 imqbrokerd 命令的选项以及受到各个选项影响的配置属性（如果存在）。

> 表 5-2 imqbrokerd 选项

> 选项 | 所影响的属性 | 说明
> --- | --- | ---
> -backup fileName | 不影响任何属性。 | 仅适用于代理群集。将主管代理的配置更改记录备份到指定的文件。请参见备份配置更改记录。
> -cluster[broker1][[,broker2]] 其中 broker 可以是 host[:port] [host]:port | 将 imq.cluster.brokerlist 设置为要连接的代理的列表。 | 仅适用于代理群集。连接至指定的主机和端口上的所有代理。该列表将与 imq.cluster.brokerlist 属性中的列表合并。如果没有指定 host 的值，将使用 localhost。如果没有指定 port 的值，将使用值 7676。关于如何使用该选项连接多个代理的详细信息，请参见“使用群集（企业版）”。
> -dbpassword password | 将 imq.persist.jdbc.password 设置为指定密码 | 指定插入的 JDBC 兼容数据存储的密码。请参见附录 B“设置插入的持久性”.
> -dbuser userName | 将 imq.persist.jdbc.user 设置为指定的用户名 | 指定插入的 JDBC 兼容数据存储的用户名。请参见附录 B“设置插入的持久性”.
> -Dproperty=value | 设置系统属性。覆盖实例配置文件中的相关属性值。 | 将指定属性设置为指定值。关于代理配置属性，请参见表 5-1。 注意：请仔细检查使用 D 选项设置的属性的拼写和格式。如果传送了不正确的值，系统不会向您发出警告，Message Queue 将无法对这些属性进行设置。
> -force | 不影响任何属性。 | 执行操作，而无需用户确认。此选项仅用于-remove instance 和 -upgrade-store-nobackup 选项，通常要求确认。
> -h|-help | 不影响任何属性。 | 显示帮助。不执行命令行上的其他选项。
> -javahome path | 不影响任何属性。 | 指定替代 Java 2 兼容 JDK 的路径。默认使用捆绑的运行时。
> -ldappasswordpassword | 将 imq.user_repository.ldap.password 设置为指定的密码 | 指定访问 LDAP 用户信息库的密码。请参见“使用 LDAP 服务器管理用户信息库”。
> -license [licenseName] | 不影响任何属性。 | 指定装入一个与 Message Queue 产品版本的默认许可证不同的许可证。如果不指定许可证名称，该选项将列出系统中安装的所有许可证。根据所安装的 Message Queue 版本的不同，licenseName 的取值也不同：pe（平台版，只具有基本功能）、try（平台版的 90 天试用企业功能）和 unl（企业版）。请参见“产品版本”。
> -loglevel level | 将 imq.broker.log.level 设置为指定级别。 | 将日志记录级别指定为下列四项之一：NONE、ERROR、WARNING 或 INFO。默认值是 INFO。有关详细信息，请参见“日志记录器”。
> -metrics interval | 将 imq.metrics.interval 设置为指定秒数。 | 指定代理度量依据写入日志记录器的时间间隔（以秒为单位）。
> -name instanceName | 将 imq.instancename 设置为指定名称。 | 指定该代理的实例名称，并使用相应的实例配置文件。如果不指定代理名称，实例名将设置为 imqbroker。注：如果在同一台主机上运行了多个代理实例，每个实例必须具有唯一的名称。
> -passfile fileName | 将 imq.passfile.enabled 设置为 true。将 jmq.passfile.dirpath 设置为包含文件的路径。将 imq.passfile.name 设置为该文件名。 | 指定文件名，从该文件中可以读取 SSL 密钥存储、LDAP 用户信息库或 JDBC 兼容数据库的密码。有关详细信息，请参见“使用密码文件”。
> -password keypassword | 将 imq.keystore.password 设置为指定密码。 | 指定 SSL 证书密钥存储的密码。有关详细信息，请参见“安全性管理器”。
> -port number | 将 imq.portmapper.port 设置为指定端口号。 | 指定代理的端口映射器的端口号。默认情况下，该端口号设置为 7676。要在同一台服务器上运行两个代理实例，每个代理的端口映射器必须拥有不同的端口号。Message Queue 客户机使用此端口号连接到代理实例。
> -remove instance | 不影响任何属性。 | 导致代理实例被删除：删除与实例相关联的实例配置文件、日志文件、持久性存储库与其他文件和目录。除非指定 -force 选项，否则需要用户确认。
> -reset store| messages|durables|props | 不影响任何属性。 | 根据给定变量，重置代理实例的数据存储（或数据存储的子集）或配置属性。 重置数据存储将清除所有的持久性数据，包括持久性消息、长期订阅和事务信息。这使您可以启动一个完全清空的代理实例。也可以仅清除所有的持久性消息或仅清除所有的长期订阅。（如果不希望下次重新启动代理实例时重置持久性存储库，请勿使用 -reset 选项重新启动代理实例。）有关详细信息，请参见“持久性管理器”。 重置代理的属性，用一个空文件代替现有的实例配置文件 (config.properties)：所有的属性将使用默认值。
> -restore fileName | 不影响任何属性。 | 仅适用于代理群集。用指定的备份文件替换主管代理的配置更改记录。该文件必须是原来用 -backup 选项创建的那个备份文件。请参见恢复配置更改记录。
> -shared | 将 imq.jms.threadpool_model 设置为 shared。 | 指定使用共享线程池模型来实现 jms 连接服务。在该模型中，连接之间共享线程，以增加代理实例支持的连接数量。有关详细信息，请参见“连接服务”。
> -silent|-s | 将 imq.log.console.output 设置为 NONE。 | 停止向控制台记录日志信息。
> -tty | 将 imq.log.console.output 设置为 ALL | 指定在控制台上显示所有消息。默认情况下，只显示 WARNING 和 ERROR 级别的消息。
> -upgrade-store-nobackup | 不影响任何属性。 | 指定从不兼容版本升级到 Message Queue 3.5 或 Message Queue 3.5 SPx 将自动删除原有的数据存储。有关其他详细信息，请参见《Message Queue 安装指南》。
> -version | 不影响任何属性。 | 显示所安装产品的版本号。
> -vmargs arg1 [[arg2]] | 不影响任何属性。 | 指定传送到 Java VM 的变量。变量之间用空格分隔。如要传送多个变量，或是变量内包含空格，请使用闭合的引号。例如：imqbrokerd -tty -vmargs -Xmx128m -Xincgc

> ##

> 使用群集（企业版）

> 本节介绍用于配置多代理群集的属性，并介绍了连接代理的两种方法，并说明如何管理群集。关于群集的介绍，请参见“多代理群集（企业版）”。

> 使用群集时，请确保同一个群集中所有代理的主机时钟处于同步状态（请参见“系统时钟设置”）。

> ### 群集配置属性

> 将代理连接到群集时，所有连接的代理必须指定为群集配置属性集。这些属性说明了群集中代理的合作。表 5-3 概述了与群集相关的配置属性。对于群集中的所有代理，标有星号 (*) 的属性必须具有相同值。

> 表 5-3 群集配置属性

> 属性名称 | 说明
> --- | ---
> imq.cluster.brokerlist* | 指定群集中的所有代理。由 host:port 条目的列表（用逗号分隔各条目）组成，其中 host 是每个代理的主机名，port 是其端口映射器的端口号。例如： host1:3000, host2:8000, ctrhost
> imq.cluster.masterbroker* | 指定群集中哪个代理为记录状态更改的主管代理（如果存在）。该属性由 host:port 组成，其中 host 是主管代理的主机名，port 是其端口映射器的端口号。对生产环境设置该属性。例如，ctrhost:7676
> imq.cluster.url* | 指定代理配置文件的位置。此属性的适用情况：多个代理引用一个中心配置文件，而不是分别配置每个代理。由 URL 字符串组成：如果是在 Web 服务器上，可以使用标准的 http:URL 来访问。如果是在共享的驱动器上，可以使用 file:URL 来访问。 例如：http://webserver/imq/cluster.propertiesfile:/net/mfsserver/imq/cluster.properties
> imq.cluster.port | 用于为群集中的每个代理指定 cluster 连接服务的端口号。cluster 连接服务用于群集中代理之间的内部通信。 默认值：0（动态分配端口）
> imq.cluster.hostname | 对于群集中的每个代理，如果有多个主机可用（例如，一台计算机中安装了多个网络接口卡），cluster 连接服务将绑定到该属性指定的主机（主机名或 IP 地址）。cluster 连接服务用于群集中代理之间的内部通信。默认值：继承 imq.hostname 的值（请参见表 2-3）
> imq.cluster.transport* | 指定 cluster 连接服务要在群集中的代理之间进行内部通信所使用的网络传输。为了在代理之间传送安全、加密的消息，请将群集中所有代理的此属性设置为 ssl。默认值：tcp

> 可以使用以下两种方法之一来设置群集属性：

> - 可以在每个代理的实例配置文件中（或启动各个代理的命令行中）设置与群集相关的配置属性。例如，要连接代理 A（位于 host1、7676 端口）、代理 B（位于 host2、5000 端口）和代理 C（位于 ctrlhost、7676 端口），则代理 A、B 和 C 的实例配置文件需要设置如下属性。

> imq.cluster.brokerlist=host1, host2:5000, ctrlhost

> 如果决定更改群集配置，此方法要求更新所有代理中与群集相关的属性。

> - 在一个中心群集配置文件中设置群集配置属性。这些属性可能包括要连接代理的列表 (imq.cluster.brokerlist)、群集连接服务使用的网络传输 (imq.cluster.transport) 以及主管代理 (imq.cluster.masterbroker) 的地址（可选）。

> 如果使用该方法，还必须将群集中的每个代理的 imq.cluster.url 属性设置为指向群集配置文件的位置。从易于维护的角度出发，建议使用这种方法来配置群集。

> 以下代码样例显示了群集配置文件的内容。host1 和 ctrlhost 都是在默认端口上运行。这些属性指定 host1、host2 和 ctrlhost 连接到一个群集中，并指定 ctrlhost 作为主管代理。

> imq.cluster.brokerlist=host1,host2:5000,ctrlhost imq.cluster.masterbroker=ctrlhost

> 连接到此群集中的每个代理的实例配置文件都必须包含群集配置文件的 URL，例如：

> imq.cluster.url=file:/home/cluster.properties

> ### 连接代理

> 本节介绍如何将代理连接至群集以及如何配置群集，以在群集中的代理之间传送安全、加密的消息。

> #### 连接方法

> 将代理连接到群集一般有两种方法：使用群集配置文件连接，或不使用群集配置文件连接。

> 无论使用哪种方法，启动的每个代理将每隔五秒钟就尝试一次连接到其他代理。主管代理启动后，该尝试就会成功。如果群集中的某个代理在主管代理之前启动，该代理将保持暂停状态，拒绝客户机连接。主管代理启动后，暂停的代理将自动进入正常运行状态。

> ##### 方法 1：不使用群集配置文件连接

> ##### 将代理连接到群集

> 1. 使用带有 -cluster 选项的 imqbrokerd 命令来启动代理，并将（要连接的）代理的完整列表指定为 -cluster 选项的变量。
> 2. 请在启动要连接到群集的每个代理时执行该操作。

> 例如，以下命令启动了一个新代理，并将其连接到运行于 host1 的默认端口上的代理、运行于 host2 的 7677 端口上的代理和运行于 localhost 的 7678 端口上的代理。

> imqbrokerd -cluster host1,host2:7677,:7678

> ##### 方法 2：使用群集配置文件连接

> 也可以创建一个群集配置文件，来指定要连接的代理列表（可选：指定主管代理的地址）。这种定义群集的方法更适合生产系统。如果使用此方法，必须将群集中的每个代理的 imq.cluster.url 属性值设置为指向群集配置文件。

> #### 安全的交叉代理连接

> 如果希望在群集的代理之间传送安全、加密的消息，您需要按照下面的步骤配置 cluster 连接服务，以使用基于 SSL 的传输协议。

> ##### 配置群集内安全连接

> 1. 对于群集中的各个代理，请设置基于 SSL 的连接服务。

> 请参见“设置通过 TCP/IP 的基于 SSL 的服务”中的说明。

> 2. 将 imq.cluster.transport 群集配置属性设置为 ssl。

> 如果未使用群集配置文件，您需要为群集中的各个代理设置此属性。

> ### 管理群集中的代理

> 设置代理群集后，可能需要添加新代理、重新启动群集中原有的代理，或者从群集中删除代理。

> #### 将代理添加到群集

> ##### 将新代理添加到现有群集

> - 如果使用群集配置文件，则
> 1. 将新代理添加到群集配置文件中的 imq.cluster.brokerlist 属性。
> 2. 对群集中的各个代理执行以下命令。

> imqcmd reload cls

> 该命令强制所有的代理重新装入 imq.cluster.brokerlist 属性，以保证群集中代理的所有持久性信息都是最新的。

> 3. 启动新代理时，使用命令行中的 -D 选项指定 imq.cluster.url 属性。

> 这会将代理指向群集配置文件。

> - 如果没有使用群集配置文件，那么启动新代理时，在命令行中使用 -D 选项指定 imq.cluster.brokerlist、imq.cluster.transport（如果使用安全群集连接服务）和imq.cluster.masterbroker 属性（如果必要）。

> #### 重新启动群集中的代理

> 如果群集中的代理因某种原因崩溃或关闭，您需要将其作为群集的成员重新启动。

> ##### 重新启动现有群集的现有代理

> - 如果不是使用群集配置文件定义群集，那么重新启动代理时，请在命令行中使用 -D 选项指定 imq.cluster.brokerlist 属性（如有必要，请一并指定 imq.cluster.masterbroker 属性）。如果群集中没有主管代理，可以在重新启动代理仅使用 -cluster 选项来指定群集中的代理列表。
> - 如果使用群集配置文件定义群集，请在用于启动代理的命令行中使用 -D 选项来指定 imq.cluster.url 属性。

> #### 从群集中删除代理

> ##### 从现有群集中删除代理

> - 如果代理 A、B 和 C 均是使用以下命令行启动，那么仅仅重新启动 A 将无法将其从群集中删除。

> imqbrokerd -cluster A,B,C

> 而是需要使用以下命令行重新启动所有的其他代理：

> imqbrokerd -cluster B,C

> 然后，需要启动代理 A，且不指定 -cluster 选项。

> - 如果代理列表是使用群集配置文件来指定，那么需要执行以下操作：
> 1. 从配置文件中删除该代理的相关内容。
> 2. 更改或删除要删除的代理的 imq.cluster.url 属性，这样代理就不会再使用该通用属性。
> 3. 使用 imqcmd reload cls 命令强制所有的代理重新装入它们的群集配置，从而重新配置群集。

> ### 管理主管代理的配置更改记录

> 每个群集都可以拥有一个主管代理，它将记录群集的持久性状态的所有更改。此状态包括长期订阅和管理员创建的物理目标等有关信息。所有的代理在启动时都会咨询主管代理（代理主管依次查询其配置更改记录），以同步关于这些持久性对象的信息。因此，主管代理的故障将使得类似同步变得不可能。其结果是，如果主管代理失败，那么您就无法创建或删除物理目标或长期订阅。

> 因为主管代理的配置更改记录包含着重要的信息，所以定期对其进行备份，并在出现故障时予以恢复，这一点非常重要。

> 以下几节介绍如何备份和恢复配置更改记录。

> #### 备份配置更改记录

> 使用 imqbrokerd 命令的 -backup 选项。例如，

> imqbrokerd -backup mybackuplog

> 请及时进行如上的备份操作，这很重要。恢复一个很旧的备份可能会导致丢失信息：最后一次完成备份后对物理目标或长期订阅的所有更改都将丢失。

> #### 恢复配置更改记录

> ##### 万一发生故障时恢复主管代理

> 1. 关闭群集中的所有代理。
> 2. 用以下命令恢复主管代理的配置更改记录：

> imqbrokerd -restore mybackuplog

> 3. 如果要给主管代理分配新名称或端口号，必须更新群集配置文件，指定主管代理是群集中的代理之一，并指定它的新名称（使用 imq.cluster.masterbroker 属性）。
> 4. 重新启动所有代理。

> 恢复代理将不可避免地导致某些过时的数据重新装入到代理的配置更改记录中。不过，只要经常进行前一小节所介绍的定期备份，可以将这个问题的影响减到最小。

> 因为主管代理记录对持久性对象的所有更改的历史记录，所以每过一段时间其数据库就会有显著的扩充。备份和恢复操作有利于压缩和优化该数据库。

> ##

> 日志记录

> 本节介绍了代理的默认日志记录配置，并说明了如何更改该配置，从而将日志信息重定向到替代输出通道以及如何更改日志文件转移标准。关于日志记录的介绍，请参见“日志记录器”。有关使用日志记录报告代理度量依据的信息，请参见“监视工具”。

> ### 默认日志记录配置

> 启动代理时，系统自动将其配置为将日志输出保存到位于特定目录中的一组滚动生成的日志文件中，该目录的名称由与此日志文件相关联的代理实例的名称 (instanceName) 标识（请参见附录 A“Message Queue 数据的位置”）：

> /instances/instanceName/log/

> 日志文件是纯文本文件。它们的名称如下（从最早生成到最近生成）：

> log.txtlog_1.txtlog_2.txtlog_9.txt

> 默认情况下，日志文件每星期转移一次；系统维护九个备份文件。

> - 要更改保存日志文件的目录，请将 imq.log.file.dirpath 属性设置为所需的路径。
> - 要将日志文件的根名称由 log 改为其他名称，请设置 imq.log.file.filename 属性。

> 代理支持三种日志种类：ERROR、WARNING 和 INFO（请参见表 2-7）。设置日志记录级别后，将收集所有高于和等于该级别的消息。默认日志级别是 INFO。这表示默认情况下将记录所有 ERROR、WARNING 和 INFO 消息。

> ### 日志消息格式

> 已记录的消息由时间戳（请参见表 2-9 了解如何更改时间戳时区）、消息代码和消息本身组成。信息的大小取决于所设置的日志级别。以下是一个 INFO 消息的示例。

> [13/Sep/2000:16:13:36 PDT] B1004 Starting the broker service using tcp [ 25374,100] with min threads 50 and max threads of 500

> ### 更改日志记录器配置

> 表 2-9 说明了所有的日志记录器属性。

> ##### 更改代理的日志记录器配置

> 1. 设置日志级别。
> 2. 设置一个和多个日志记录种类的输出通道（文件、控制台或两者）。
> 3. 如果将输出记录到文件中，请为该文件配置转移标准。

> 可以通过设置日志记录器属性完成上述步骤。可以使用以下两种方法之一来进行设置：

> - 启动代理之前，在该代理的 config.properties 文件中更改或添加日志记录器属性。
> - 在启动代理的 imqbrokerd 命令中指定日志记录器命令行选项。也可以使用代理选项 -D 来更改日志记录器属性（或任何代理属性）。

> 在命令行上传送的选项将覆盖代理实例配置文件中指定的属性。表 5-4 列出了影响日志记录的 imqbrokerd 选项。

> 表 5-4 imqbrokerd 日志记录器选项及相应的属性

> imqbrokerd 选项 | 说明
> --- | ---
> -metrics interval | 指定度量依据信息写入日志记录器的时间间隔（以秒为单位）。
> -loglevel level | 设置日志级别为以下三项之一：ERROR、WARNING 或 INFO。
> -silent | 停止向控制台记录日志信息。
> -tty | 将所有消息发送到控制台。默认情况下，只显示 WARNING 和 ERROR 级别的消息。

> 以下小节介绍了如何更改默认配置，以执行以下操作：

> - 更改输出通道（日志消息的目标）
> - 更改转移标准

> #### 更改输出通道

> 默认情况下，错误和警告消息除了记录到日志文件中以外，还会显示在终端上。（在 Solaris 中，错误消息还会写入到系统的 syslog 守护程序中。）

> 可以用以下方式更改日志消息的输出通道：

> - 要在屏幕上显示所有的日志种类（对于给定的级别）输出，请在 imqbrokerd 命令中使用 -tty 选项。
> - 要阻止在屏幕上显示日志输出，请在 imqbrokerd 命令中使用 -silent 选项。
> - 使用 imq.log.file.output 属性指定将哪些种类的日志记录信息写入到日志文件。例如，

> imq.log.file.output=ERROR

> - 使用 imq.log.console.output 属性指定将哪些种类的日志记录信息写入到控制台。例如，

> imq.log.console.output=INFO

> - 在 Solaris 中，使用 imq.log.syslog.output 属性指定将哪些种类的日志记录信息写入到 Solaris syslog 中。例如，

> imq.log.syslog.output=NONE

> 注意 | 在更改日志记录器输出通道前，必须确保日志记录级别已设置为支持映射到输出通道的信息。例如，如果将日志级别设置为 ERROR，然后将 imq.log.console.output 属性设置为 WARNING，那么将不会记录任何消息，因为没有启用对 WARNING 消息的记录。

> #### 更改日志文件转移标准

> 转移日志文件有两个标准：时间和大小。默认是使用时间标准，每七天转移一次文件。

> - 要更改时间间隔，需要更改 imq.log.file.rolloversecs 属性。例如，以下属性定义将时间间隔更改为十天：

> imq.log.file.rolloversecs=864000

> - 要将转移标准更改为取决于文件大小，需要设置 imq.log.file.rolloverbytes 属性。例如，以下定义将在文件达到 500,000 字节的限制时将代理定向到转移文件。

> imq.log.file.rolloverbytes=500000

> 如果同时设置与时间相关和与大小相关的转移属性，首先达到的限制将触发转移。如前所述，代理最多维护九个转移文件。

> 上一章 目录 索引 下一章

> 版权所有 2004 Sun Microsystems, Inc. 保留所有权利。