第 8 章 在 Microsoft Azure 中使用 JBoss EAP 高可用性
Microsoft Azure 不支持基于 UDP 多播的 JGroups 发现协议。虽然您可以使用其他 JGroups 发现协议(如静态配置(TCPPING)、共享数据库(JDBC_PING)、基于文件系统的 ping(FILE_PING)或 TCPGOSSIP),但我们强烈建议您使用专门为 Azure 开发的共享文件发现协议: AZURE_PING。
8.1. 为 JBoss EAP 高可用性配置 AZURE_PING 复制链接链接已复制到粘贴板!
本节介绍将您的 JBoss EAP 群集配置为使用 AZURE_PING JGroups 发现协议。确保您满足 创建虚拟机时的先决条件。
AZURE_PING 在 Microsoft Azure 存储帐户中使用一个通用的 Blob 容器。如果您还没有 AZURE_PING 可使用的 blob 容器,请创建一个虚拟机可以访问的容器。
创建 blob 容器后,您需要以下信息来配置 AZURE_PING:
-
storage_account_name:包含 blob 容器的 Microsoft Azure 存储帐户的名称。 -
storage_access_key:存储帐户的 secret 访问密钥。 -
Container:用于PING数据的 blob 容器的名称。
若要将 JBoss EAP 配置为使用 AZURE_PING 作为 JGroups 发现协议,您可以使用 预配置的示例 JBoss EAP 配置文件 或 修改现有配置。
以下说明使用 UDP JGroups 堆栈配置 AZURE_PING:如果要在 Azure 中配置 JBoss EAP 消息传递高可用性, 您必须改为在 TCP JGroups 堆栈中配置 AZURE_PING。
8.1.1. 使用配置文件示例 复制链接链接已复制到粘贴板!
JBoss EAP 包含用于在 Microsoft Azure 中配置单机服务器集群的示例配置文件。这些文件位于 EAP_HOME/docs/ 中,examples/configs/ 和 standalone-azure-ha.xml 和 standalone-azure-full-ha.xml。
有关服务器配置文件 区别的说明,请参阅 JBoss EAP 配置指南。
这些示例配置文件预配置为在 Microsoft Azure 中使用集群,所需的一切是指定 Azure 存储帐户和 blob 容器的值。
将您所需的示例配置文件复制到 EAP_HOME/standalone/configuration/。
8.1.2. 修改现有配置 复制链接链接已复制到粘贴板!
如果要修改现有的 JBoss EAP 高可用性配置,需要对 jgroups 子系统进行下列更改:
启动管理 CLI 并嵌入服务器,以对所选的配置文件进行离线更改。例如:
$ EAP_HOME/bin/jboss-cli.sh [disconnected /] embed-server --server-config=standalone-ha.xml默认情况下,JGroups 使用 UDP 堆栈。如果您使用的是另一个堆栈,请改回到使用 UDP 堆栈:
[standalone@embedded /] /subsystem=jgroups/channel=ee:write-attribute(name=stack,value=udp)执行以下批量命令以删除现有的 UDP 堆栈,并插入为 Microsoft Azure 配置的新 UDP 堆栈:
batch /subsystem=jgroups/stack=udp:remove /subsystem=jgroups/stack=udp:add() /subsystem=jgroups/stack=udp/transport=UDP:add(socket-binding=jgroups-udp,properties={ip_mcast=false}) /subsystem=jgroups/stack=udp/protocol=azure.AZURE_PING:add(properties={storage_account_name="${jboss.jgroups.azure_ping.storage_account_name}", storage_access_key="${jboss.jgroups.azure_ping.storage_access_key}", container="${jboss.jgroups.azure_ping.container}"}) /subsystem=jgroups/stack=udp/protocol=MERGE3:add /subsystem=jgroups/stack=udp/protocol=FD_SOCK:add(socket-binding=jgroups-udp-fd) /subsystem=jgroups/stack=udp/protocol=FD:add /subsystem=jgroups/stack=udp/protocol=VERIFY_SUSPECT:add /subsystem=jgroups/stack=udp/protocol=pbcast.NAKACK2:add(properties={use_mcast_xmit=false,use_mcast_xmit_req=false}) /subsystem=jgroups/stack=udp/protocol=UNICAST3:add /subsystem=jgroups/stack=udp/protocol=pbcast.STABLE:add /subsystem=jgroups/stack=udp/protocol=pbcast.GMS:add /subsystem=jgroups/stack=udp/protocol=UFC:add /subsystem=jgroups/stack=udp/protocol=FRAG2:add run-batch注意如果要将 Microsoft Azure 存储帐户和 blob 容器的值存储在配置文件中,请将上述配置中的系统属性引用替换为 Azure 环境中的值。在以下命令中,使用了启动 JBoss EAP 的示例,即系统属性:
配置文件中的堆栈 XML 应该类似如下:
<stack name="udp"> <transport type="UDP" socket-binding="jgroups-udp"> <property name="ip_mcast"> false </property> </transport> <protocol type="azure.AZURE_PING"> <property name="storage_account_name"> ${jboss.jgroups.azure_ping.storage_account_name} </property> <property name="storage_access_key"> ${jboss.jgroups.azure_ping.storage_access_key} </property> <property name="container"> ${jboss.jgroups.azure_ping.container} </property> </protocol> <protocol type="MERGE3"/> <protocol type="FD_SOCK" socket-binding="jgroups-udp-fd"/> <protocol type="FD"/> <protocol type="VERIFY_SUSPECT"/> <protocol type="pbcast.NAKACK2"> <property name="use_mcast_xmit"> false </property> <property name="use_mcast_xmit_req"> false </property> </protocol> <protocol type="UNICAST3"/> <protocol type="pbcast.STABLE"/> <protocol type="pbcast.GMS"/> <protocol type="UFC"/> <protocol type="FRAG2"/> </stack>停止嵌入的服务器并退出管理 CLI:
[standalone@embedded /] stop-embedded-server [disconnected /] exit