本节介绍如何将一组代理连接成一个群集,如何在现有群集中添加新代理,以及如何从群集中删除代理。
将代理连接成群集一般有两种方法:一种方法是通过命令行(使用 -cluster 选项)来实现,一种方法是通过在群集配置文件中设置 imq.cluster.brokerlist 属性来实现。无论采用哪种方法,启动的每个代理都每隔五秒钟就尝试与其他代理连接;在主代理(如果已配置)启动后,连接就会成功。如果群集中的某个代理在主代理之前启动,它将保持暂停状态,并拒绝客户端连接,直到主代理启动为止;之后,暂停的代理将自动进入正常运行状态。
要通过命令行配置代理群集,请在启动群集中的每个代理时使用 imqbrokerd 命令的 -cluster 选项指定群集中代理的完整列表。例如,以下命令启动一个新代理,并将它连接到在 host1 默认端口 (7676) 上运行的代理、在 host2 端口 5000 上运行的代理以及在默认主机 (localhost) 端口 9876 上运行的代理:
imqbrokerd -cluster host1,host2:5000,:9876
有一种更适用于生产系统的替代方法,即创建一个群集配置文件,它使用 imq.cluster.brokerlist 属性来指定要连接的代理的列表。然后群集中的每个代理必须将其自身的 imq.cluster.url 属性设置为指向该群集配置文件。
无论使用哪种方法,必须确保给群集中任何代理分配的地址都不会解析到网络回送 IP 地址 (127.0.0.1)。任何配置了这个地址的代理将不能连接到群集中的其他代理。
某些 Linux 安装程序自动将 localhost 条目设置为网络回送地址。在这些系统上,您必须修改系统 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 的连接服务。然后,将每个代理的 imq.cluster.transport 属性设置为 ssl。可以在群集配置文件中进行此设置,也可以为每个代理单独进行此设置。
对群集中的任一代理执行以下命令:
imqcmd reload cls |
该命令强制每个代理重新加载群集配置,从而确保群集中代理的所有持久性信息都是最新的。注意,不必对群集中的每个代理都执行此命令;对任一代理执行此命令都会使所有代理重新加载群集配置。
(可选)在代理的 config.properties 文件中将 imq.cluster.url 属性的值设置为指向群集配置文件。
启动新代理。
如果未执行在群集中添加代理,请使用 imqbrokerd 命令行中的 -D 选项设置 imq.cluster.url 的值。
通过编辑 config.properties 文件或者使用 imqbrokerd 命令行中的 -D 选项设置以下属性的值:
从群集中删除代理的方法取决于群集最初是通过命令行创建的,还是通过中央群集配置文件来创建的。
如果群集是通过在命令行中使用 imqbrokerd 命令由代理连接而成的,则必须停止每个代理,然后通过在命令行中指定一组新的群集成员来重新启动它们。过程如下所述:
使用 imqcmd 命令停止群集中的每个代理。
重新启动仍然保留在群集中的代理(使用 imqbrokerd 命令的 -cluster 选项,并仅仅指定那些要保留的代理)。
例如,假设最初创建的群集包括代理 A、B、C,而且这三个代理是通过以下命令启动的:
imqbrokerd -cluster A,B, C |
要从群集中删除代理 A,请使用以下命令重新启动代理 B 和 C:
imqbrokerd -cluster B,C |
如果群集最初是通过在中央群集配置文件中使用 imq.cluster.brokerlist 属性指定其成员代理来创建的,则不必停止这些代理即可删除其中的某个代理。只需编辑配置文件来排除要删除的代理,强制群集中的其他代理成员重新加载群集配置,并重新配置被排除的代理,使它不再指向原来的群集配置文件。过程如下: