MQ 企业版支持多个互连代理实例(称为代理群集)。使用代理群集的情况下,客户机连接将分布在群集的所有代理中。群集可以提供水平可伸缩性并提高可用性。
本节介绍了如何配置 Application Server 以使用高可用性 Sun Java System Message Queue 群集。还介绍了如何启动和配置 Message Queue 群集。
有关 Application Server 和 MQ 部署拓扑的更多信息,请参见《Sun Java System Application Server 9.1 部署规划指南》中的“Planning Message Queue Broker Deployment”。
Sun Java System Message Queue 4.1 通过新的“高可用性”群集类型提供了高可用性消息传送服务。在此类型的 MQ 群集中,所有的代理实例都将共享对等关系并共享公共的持久性数据存储,从而提供“数据可用性”。实例将自动地能够检测某个实例是否出现故障,并通过接管选举动态执行故障代理的持久性消息的接管。这样,在 Application Server 中部署的应用程序组件可以利用这些可用性功能。
使用此群集类型,队列或持久主题订阅不会丢失任何已处理的持久性消息。客户机运行时环境所连接到的代理不可用时,很可能会丢失非持久性消息或非持久订阅者的持久性消息。
启动 HADB。
创建一个 Application Server 域并启动它。要创建一个域并启动它,请分别使用 asadmin 命令 create-domain 和 start-domain。有关这些命令的更多信息,请参见 create-domain(1) 和 start-domain(1)。
创建一个节点代理并启动它。要创建一个节点代理并启动它,请分别使用 asadmin 命令 create-node-agent 和 start-node-agent。有关这些命令的更多信息,请参见 create-node-agent(1) 和 start-node-agent(1)。
创建群集。可以使用 asadmin 命令 create-cluster 或使用管理控制台创建群集。有关 create-cluster 命令的更多信息,请参见 create-cluster(1)。有关如何使用管理控制台创建群集的信息,请参见管理控制台联机帮助。
在群集中创建实例。在创建实例时,请指定远程代理所用的 JMS 提供者端口号。如果您不指定一个端口号,将使用默认的 JMS 提供者端口号。可以使用管理控制台或 asadmin 命令 create-instance 创建实例。有关如何使用管理控制台创建实例的信息,请参见管理控制台联机帮助。有关 create-instance 命令的信息,请参见 create-instance(1)。
启动群集。可以通过管理控制台或使用 asadmin 命令 start-cluster 启动群集。有关如何使用管理控制台启动群集的信息,请参阅管理控制台联机帮助。有关 start-cluster 命令的信息,请参见 start-cluster(1)。
使用 asadmin 命令 configure-ha-cluster 配置 HA 群集。有关该命令的更多信息,请参见 configure-ha-cluster(1)。
启动 HADB。
创建数据库表。
如果要创建高可用性代理群集,请复制 HA 驱动程序。
cp $AS_HOME/hadb/4.4.3-6/lib/hadbjdbc4.jar $S1AS_HOME/imq/lib/ext
创建一个域并启动它。为此,请使用 asadmin 命令 create-domain 和 start-domain。有关这些命令的更多信息,请参见 create-domain(1) 和 start-domain(1)。
创建一个节点代理并启动它。为此,请使用 asadmin 命令 create-node-agent 和 start-node-agent。有关这些命令的更多信息,请参见 create-node-agent(1) 和 start-node-agent(1)。
创建群集。可以使用 asadmin 命令 create-cluster 或使用管理控制台创建群集。有关更多信息,请参见 create-cluster(1)。有关如何使用管理控制台创建群集的信息,请参见管理控制台联机帮助。
在群集中创建实例。在创建实例时,请指定远程代理所用的 JMS 提供者端口号。如果您不指定一个端口号,将使用默认的 JMS 提供者端口号。
删除默认的 JMS 主机,并创建实例可以连接到的 JMS 主机。务必将每个代理作为单独的 JMS 主机进行添加。有关 JMS 主机的更多信息,请参见JMS 主机列表。
将 JMS 类型设置为 Remote。为此,可以使用 asadmin 命令 set 或管理控制台中的“JMS 服务”页面。
如果要配置高可用性代理,请将 JMS 可用性设置为 true。为此,可以使用 asadmin 命令 set 或管理控制台中的“JMS 可用性”页面。
启动代理实例。
启动群集。有关更多信息,请参见 start-cluster(1)。
直到现在,管理员必须单独建立“非高可用性”MQ 群集(具有主代理的 MQ 群集),如本节后面的过程中所述。在此发行版中,除了设置 MQ 群集的手动过程(类型为 REMOTE)外,Application Server 还提供了“自动建立群集功能”,这意味着在用户创建 Application Server 群集时将自动创建共存的非 HA 群集(类型为 LOCAL)。这将是创建 MQ 群集的默认模式。例如,在管理员创建具有三个 Application Server 实例的 Application Server 群集时,会将每个 Application Server 实例配置为与共存代理一起工作,因此将使三个 MQ 代理实例透明地形成一个 MQ 群集。第一个 Application Server 实例的 MQ 代理将被设置为主代理。但是,自动建立群集也有缺点。如果管理员将一个实例添加到群集,自动创建的 MQ 代理实例将无法参与群集。如果将一个实例从群集中删除,也会出现此行为。
如果群集类型为 REMOTE,请执行以下步骤。如果群集类型为 LOCAL,则步骤 1 到 4 不适用。
如果尚不存在 Application Server 群集,请先创建一个。
有关创建群集的信息,请参见创建群集。
创建 MQ 代理群集。
首先,删除涉及由域管理服务器启动的代理的默认 JMS 主机,然后创建三个将位于 MQ 代理群集中的外部代理(JMS 主机)。
使用管理控制台或 asadmin 命令行实用程序创建 JMS 主机。
要使用 asadmin,请参见以下命令示例:
asadmin delete-jms-host --target cluster1 default_JMS_host asadmin create-jms-host --target cluster1 --mqhost myhost1 --mqport 6769 --mquser admin --mqpassword admin broker1 asadmin create-jms-host --target cluster1 --mqhost myhost2 --mqport 6770 --mquser admin --mqpassword admin broker2 asadmin create-jms-host --target cluster1 --mqhost myhost3 --mqport 6771 --mquser admin --mqpassword admin broker3 |
要使用管理控制台创建主机,请执行以下操作:
启动 MQ 主代理和其他 MQ 代理。
除了 JMS 主机上启动的三个外部代理外,请在任一计算机上启动一个主代理。此主代理不需要是代理群集的一部分。例如:
/usr/bin/imqbrokerd -tty -name brokerm -port 6772 -cluster myhost1:6769,myhost2:6770,myhost2:6772,myhost3:6771 -D"imq.cluster.masterbroker=myhost2:6772" |
启动群集中的 Application Server 实例。
在群集上创建 JMS 资源:
创建 JMS 物理目的地。
例如,使用 asadmin:
asadmin create-jmsdest --desttype queue --target cluster1 MyQueue asadmin create-jmsdest --desttype queue --target cluster1 MyQueue1 |
要使用管理控制台,请执行以下操作:
创建 JMS 连接工厂。
例如,使用 asadmin:
asadmin create-jms-resource --target cluster1 --restype javax.jms.QueueConnectionFactory jms/MyQcf asadmin create-jms-resource --target cluster1 --restype javax.jms.QueueConnectionFactory jms/MyQcf1 |
要使用管理控制台,请执行以下操作:
创建 JMS 目标资源。
例如,使用 asadmin:
asadmin create-jms-resource --target cluster1 --restype javax.jms.Queue --property imqDestinationName=MyQueue jms/MyQueue asadmin create-jms-resource --target cluster1 --restype javax.jms.Queue --property imqDestinationName=MyQueue1 jms/MyQueue1 |
要使用管理控制台,请执行以下操作:
使用 –retrieve 选项为应用程序客户机部署应用程序。例如:
asadmin deploy --target cluster1 --retrieve /opt/work/MQapp/mdb-simple3.ear |
访问应用程序并进行测试以确保其按预期运行。
如果要将 Application Server 返回到其默认 JMS 配置,请删除您创建的 JMS 主机并重新创建默认值。例如:
asadmin delete-jms-host --target cluster1 broker1 asadmin delete-jms-host --target cluster1 broker2 asadmin delete-jms-host --target cluster1 broker3 asadmin create-jms-host --target cluster1 --mqhost myhost1 --mqport 7676 --mquser admin --mqpassword admin default_JMS_host |
您还可以使用管理控制台执行等效操作。
如果出现问题,请考虑以下操作:
查看位于 as-install-dir/nodeagents/node-agent-name/instance-name/logs/server.log 的 Application Server 日志文件。如果在日志文件中看到 MQ 代理没有响应消息,则停止该代理,然后重新启动它。
查看位于 as-install-dir /nodeagents/node-agent-name/instance-name/imq/imq-instance-name/log/log.txt 的代理日志。
JMS 类型为 Remote 时,务必始终先启动 MQ 代理,然后再启动 Application Server 实例。
所有 MQ 代理都关闭时,关闭或打开 Application Server 需要花费 30 分钟,并具有 Java 消息服务中的默认值。调整 Java 消息服务值以获取此超时的可接受值。例如:
asadmin set --user admin --password administrator cluster1.jms-service.reconnect-interval-in-seconds=5