3.2.8. 群集的修改
3.2.8.1. 修改应用程序以用于群集环境 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
过程 3.23.
启动启用了群集的 JBoss EAP 6
要在 JBoss EAP 5.x 里启用群集,你需要使用all配置集或其衍生配置集来启动服务器实例,如:$ EAP5_HOME/bin/run.sh -c all在 JBoss EAP 6 里,启用群集的方法取决于服务器是独立的还是运行在受管域里。为运行在受管域l里的服务器启用群集
要为使用域控制器启动的服务器的群集,请更新你的domain.xml并指定一个服务器组来使用ha配置集和ha-sockets套接字绑定组。例如:<server-groups> <server-group name="main-server-group" profile="ha"> <jvm name="default"> <heap size="64m" max-size="512m"/> </jvm> <socket-binding-group ref="ha-sockets"/> </server-group> </server-group>为独立服务器启用群集
要为独立服务器启用群集,用下列配置文件启动服务器$ EAP_HOME/bin/standalone.sh --server-config=standalone-ha.xml -Djboss.node.name=UNIQUE_NODE_NAME:
指定绑定地址
在 JBoss EAP 5.x 里,你通常要用-b命令行参数来指定用于群集的绑定地址:$ EAP_HOME/bin/run.sh -c all -b 192.168.0.2在 JBoss EAP 6 里,绑定地址是在 EAP 6 配置文件里的相关套接字绑定部分显性定义的。对于用域控制器启动的服务器,绑定地址是在domain/configuration/host.xml文件里定义的;而对于独立服务器, 绑定地址是在standalone-ha.xml文件里定义的:<interfaces> <interface name="management"> <inet-address value="192.168.0.2"/> </interface> <interface name="public"> <inet-address value="192.168.0.2"/> </interface> </interfaces>在上面的例子里,<socket-binding-groups> <socket-binding-group name="ha-sockets" default-interface="public"> <!-- ... --> </socket-binding-group> </socket-binding-groups>public接口被指定为ha-sockets套接字绑定组里的所有套接字的默认接口。配置
jvmRoute以支持 mod_jk 和 mod_proxy在 JBoss EAP 5 里,web 服务器jvmRoute是用server.xml文件里的一个属性进行配置的。在 JBoss EAP 6 里,jvmRoute属性使用instance-id属性在服务器配置文件的 web subsystem 部分进行配置。上面的 {JVM_ROUTE_SERVER} 应该用 jvmRoute 服务器 ID 替换。<subsystem xmlns="urn:jboss:domain:web:1.1" default-virtual-server="default-host" native="false" instance-id="{JVM_ROUTE_SERVER}">instance-id也可以用管理控制台来设置。指定多点传送地址和端口
在 JBoss EAP 5.x 里,你可以使用命令行参数-u和-m分别指定用于群集间通讯的多点传送地址和端口,如:$ EAP_HOME/bin/run.sh -c all -u 228.11.11.11 -m 45688在 JBoss EAP 6 里,用于群集间通讯的多点传送地址和端口是用相关的 JGroups 协议栈引用的 socket-binding 定义的。<subsystem xmlns="urn:jboss:domain:jgroups:1.0" default-stack="udp"> <stack name="udp"> <transport type="UDP" socket-binding="jgroups-udp"/> <!-- ... --> </stack> </subsystem>如果你想在命令行指定多点传送地址和端口,你可以将多点传送地址和端口定义为系统属性并在启动服务器时在命令行使用这些属性。在下面的例子里,<socket-binding-groups> <socket-binding-group name="ha-sockets" default-interface="public"> <!-- ... --> <socket-binding name="jgroups-udp" port="55200" multicast-address="228.11.11.11" multicast-port="45688"/> <!-- ... --> </socket-binding-group> </socket-binding-groups>jboss.mcast.addr是多点传送地址的变量名,而jboss.mcast.port是端口的变量名。你可以用下列命令行参数启动服务器:<socket-binding name="jgroups-udp" port="55200" multicast-address="${jboss.mcast.addr:230.0.0.4}" multicast-port="${jboss.mcast.port:45688}"/>$ EAP_HOME/bin/domain.sh -Djboss.mcast.addr=228.11.11.11 -Djboss.mcast.port=45688使用其他的协议栈
在 JBoss EAP 5.x 里,你可以使用jboss.default.jgroups.stack系统属性来操纵用于群集服务的默认协议栈。$ EAP_HOME/bin/run.sh -c all -Djboss.default.jgroups.stack=tcp在 JBoss EAP 6 里,默认的协议栈是由domain.xml或standalone-ha.xml里的 JGroups 子系统定义的:<subsystem xmlns="urn:jboss:domain:jgroups:1.0" default-stack="udp"> <stack name="udp"> <!-- ... --> </stack> </subsystem>替换 Buddy Replication
JBoss EAP 5.x 使用 JBoss Cache Buddy Replication 来抑制将数据复制到群集里的所有实例。它要求你在启动 JBoss 服务器时在命令行里传入参数-Djboss.cluster.buddyRepl。在 JBoss EAP 6 里,Buddy Replication 已被 Infinispan 的更高级的分布式缓存或 DIST 模式所替代。DIST 是一个强大的群集模式,它允许 Infinispan 在添加更多服务器到群集里时进行线性扩充。下面是配置服务器使用 DIST 缓存模式的例子。- 打开命令行窗口并用 HA 或 Full 配置集启动服务器,例如:
EAP_HOME/bin/standalone.sh -c standalone-ha.xml - 打开另外一个命令行窗口并连接至管理 CLI。
- 对于 Linux,输入下列命令:
$ EAP_HOME/bin/jboss-cli.sh --connect - 对于 Windows,输入下列命令:
C:\>EAP_HOME\bin\jboss-cli.bat --connect
你应该看到下面的结果:Connected to standalone controller at localhost:9999 - 运行下列命令:
/subsystem=infinispan/cache-container=web/:write-attribute(name=default-cache,value=dist) /subsystem=infinispan/cache-container=web/distributed-cache=dist/:write-attribute(name=owners,value=3) :reload你应该在每条命令后看到下面的结果:"outcome" => "success"这些命令在standalone-ha.xml文件的infinispan子系统里创建了下列配置:更多的信息请参考客户门户 https://access.redhat.com/site/documentation/JBoss_Enterprise_Application_Platform/ 上的《JBoss EAP 6 开发指南》里的《Web 应用程序里的群集》。<cache-container name="web" aliases="standard-session-cache" default-cache="dist" module="org.jboss.as.clustering.web.infinispan"> <transport lock-timeout="60000"/> <replicated-cache name="repl" mode="ASYNC" batching="true"> <file-store/> </replicated-cache> <replicated-cache name="sso" mode="SYNC" batching="true"/> <distributed-cache name="dist" owners="3" l1-lifespan="0" mode="ASYNC" batching="true"> <file-store/> </distributed-cache> </cache-container>