Sun Java System Message Queue 3 2005Q4 管理指南 |
第 9 章
使用代理群集Message Queue Enterprise Edition 支持使用代理群集。代理群集是一组协同工作为客户端提供消息传送服务的代理。通过使用群集,消息服务器可以将客户端连接分布在多个代理上,从而根据消息流量相应地调整自己的操作。有关群集及其工作原理的概述,请参见 Message Queue 技术概述。
本章介绍如何管理代理群集,如何将代理连接到群集以及如何配置代理群集。本章包含以下各节:
群集配置属性可通过为群集中的每个成员代理指定群集配置属性来定义群集。可以为群集中的每个代理单独设置这些属性,但是,通常较为方便的一种做法是将这些属性收集到所有代理均引用的一个中心群集配置文件中。这样可防止设置出现不一致的情况,并确保群集中的所有代理都共享相同、一致的配置信息。
表 14-9 中详细介绍了群集配置属性。其中包括以下内容:
- imq.cluster.brokerlist 给出了属于群集的所有代理的主机名和端口号。
- imq.cluster.masterbroker 指定跟踪状态变化的主代理(如果有)。
- imq.cluster.url 指定群集配置文件(如果有)的位置。
- imq.cluster.hostname 给出 cluster 连接服务(用于群集中代理之间的内部通信)的主机名或 IP 地址。如果有多个主机可用,该设置会很有用:例如,如果一台计算机中安装了多个网络接口卡。
- imq.cluster.port 给出 cluster 连接服务的端口号。
- imq.cluster.transport 指定 cluster 连接服务所使用的传输协议,如 tcp 或 ssl。
可以为每个代理单独设置 hostname 和 port 属性,但群集中所有代理的 brokerlist、masterbroker、url 和 transport 值必须相同。
以下部分介绍了如何设置代理的群集配置属性。可以对群集中的每个代理单独进行设置,也可以使用群集配置文件来集中进行设置。
分别为各个代理设置群集属性
可以在代理的实例配置文件(或在启动代理时的命令行)中设置代理的群集配置属性。例如,要创建由 host1 端口 9876 上的代理、host2 端口 5000 上的代理以及 ctrlhost 默认端口 (7676) 上的代理组成的群集,应在这三个代理的实例配置文件中包含以下属性:
imq.cluster.brokerlist=host1:9876,host2:5000,ctrlhost
请注意,如果采用此方法,则当群集配置需要更改时,您必须更新群集中每个代理的实例配置文件。
使用群集配置文件
为保持一致性和易维护性,建议将所有共享群集配置属性收集到一个群集配置文件中,而不是分别为每个代理设置这些属性。采用此方法时,每个代理的实例配置文件必须将 imq.cluster.url 属性设置为指向该群集配置文件的位置:例如,
imq.cluster.url=file:/home/cluster.properties
然后群集配置文件定义群集中所有代理的共享配置属性,例如要连接的代理的列表 (imq.cluster.brokerlist)、用于 cluster 连接服务的传输协议 (imq.cluster.transport) 以及(可选)主代理的地址 (imq.cluster.masterbroker)。下面的代码定义了与前面的示例相同的群集,其中在 ctrlhost 上运行的代理充当主代理:
imq.cluster.brokerlist=host1:9876,host2:5000,ctrlhost
imq.cluster.masterbroker=ctrlhost
管理群集本节介绍如何将一组代理连接成一个群集,如何在现有群集中添加新代理,以及如何从群集中删除代理。
连接代理
将代理连接成群集一般有两种方法:一种方法是通过命令行(使用 cluster 选项)来实现,一种方法是通过在群集配置文件中设置 imq.cluster.brokerlist 属性来实现。无论采用哪种方法,启动的每个代理都每隔五秒钟就尝试与其他代理连接;在主代理(如果已配置)启动后,连接就会成功。如果群集中的某个代理在主代理之前启动,它将保持暂停状态,并拒绝客户端连接,直到主代理启动为止;之后,暂停的代理将自动进入正常运行状态。
要通过命令行配置代理群集,请在启动群集中的每个代理时使用 imqbrokerd 命令的 -cluster 选项指定群集中代理的完整列表。例如,以下命令启动一个新代理,并将它连接到在 host1 默认端口 (7676) 上运行的代理、在 host2 端口 5000 上运行的代理以及在默认主机 (localhost) 端口 9876 上运行的代理:
imqbrokerd -cluster host1,host2:5000,:9876
有一种更适用于生产系统的替代方法,即创建一个群集配置文件,它使用 imq.cluster.brokerlist 属性来指定要连接的代理的列表。然后群集中的每个代理必须将其自身的 imq.cluster.url 属性设置为指向该群集配置文件。
Linux 前提条件:设置 IP 地址
在 Linux 系统中,要将代理连接为群集,有一个特殊的前提条件。某些 Linux 安装程序自动将 localhost 条目设置为网络回送 IP 地址 (127.0.0.1)。您必须设置系统的 IP 地址,以便为群集中的所有代理设置正确的地址。
在设置群集的过程中,应针对加入群集的所有 Linux 系统检查 /etc/hosts 文件。如果系统使用静态 IP 地址,请编辑 /etc/hosts 文件以指定 localhost 的正确地址。如果地址已向域名服务 (Domain Name Service, DNS) 注册,请编辑 /etc/nsswitch.conf 文件以更改条目的顺序,使系统在查阅本地 hosts 文件前先执行 DNS 查找。/etc/nsswitch.conf 文件中的行应显示为如下顺序:
hosts:dns files
代理之间的安全连接
如果要在群集中的代理之间以安全加密的方式传送消息,请配置 cluster 连接服务以使用基于 SSL 的传输协议。请按照使用基于 SSL 的服务中的说明,为群集中的各个代理设置基于 SSL 的连接服务。然后,将每个代理的 imq.cluster.transport 属性设置为 ssl。可以在群集配置文件中进行此设置,也可以为每个代理单独进行此设置。
在群集中添加代理
在群集中添加新代理的步骤取决于该群集是否使用群集配置文件。
向使用群集配置文件的群集添加新代理
- 将新代理添加到群集配置文件中的 imq.cluster.brokerlist 属性。
- 对群集中的各个代理执行以下命令:
imqcmd reload cls
该命令强制每个代理重新加载群集配置,从而确保群集中代理的所有持久性信息都是最新的。
- (可选)在代理的 config.properties 文件中将 imq.cluster.url 属性的值设置为指向群集配置文件。
- 启动新代理。
如果未执行步骤 3,请使用 imqbrokerd 命令行中的 -D 选项设置 imq.cluster.url 的值。
向未使用群集配置文件的群集添加新代理
通过编辑 config.properties 文件或者使用 imqbrokerd 命令行中的 -D 选项设置以下属性的值:
从群集中删除代理
从群集中删除代理的方法取决于群集最初是通过命令行创建的,还是通过中央群集配置文件来创建的。
使用命令行删除代理
如果群集是通过在命令行使用 imqbrokerd 命令由代理连接而成的,则您必须停止每个代理,然后通过在命令行中指定一组新的群集成员来重新启动它们。过程如下所述:
使用命令行从群集中删除代理
使用群集配置文件删除代理
如果群集最初是通过在中央群集配置文件中使用 imq.cluster.brokerlist 属性指定其成员代理来创建的,则不必停止这些代理即可删除其中的某个代理。只需编辑配置文件来排除要删除的代理,强制群集中的其他代理成员重新加载群集配置,并重新配置被排除的代理,使它不再指向原来的群集配置文件。过程如下:
使用群集配置文件从群集中删除代理
主代理可以选择为群集指定一个主代理。主代理维护配置更改记录以跟踪群集的持久性状态所发生的任何变化。主代理是使用 imq.cluster.masterbroker 配置属性来标识的。该属性在群集配置文件中或在单个代理的实例配置文件中。
配置更改记录包含与群集关联的持久性实体(例如长期订阅和管理员创建的物理目标)的相关更改信息。群集中的所有代理在启动时都会咨询主代理,以更新与这些持久性实体有关的信息。如果主代理出现故障,就无法实现上述同步;有关更多信息,请参见当主代理不可用时。
管理配置更改记录
因为配置更改记录中包含的信息很重要,所以要定期备份配置更改记录,以便在发生故障的情况下能够恢复此记录。这一点非常重要。虽然从备份恢复的记录不包含群集持久性状态自备份以来发生的任何更改,但经常进行备份有助于将丢失的信息降到最少。备份和恢复操作还有利于压缩和优化配置更改记录中保留的更改历史,因为该记录会随时间的推移迅速膨胀。
备份配置更改记录
使用 imqbrokerd 命令的 -backup 选项,并指定备份文件的名称。例如:
imqbrokerd -backup mybackuplog
恢复配置更改记录
当主代理不可用时
因为群集中的所有代理都需要利用主代理来执行持久性操作,因此,当主代理不可用时,群集中任一代理的以下 imqcmd 子命令都将返回一条错误消息:
自动创建的物理目标和临时目标均不受影响。
在没有主代理时,任何尝试创建长期订户或取消长期订阅的客户端应用程序都会收到一条错误消息。但是,客户端可以成功地指定现有长期订阅,并与其进行交互。