我在JBoss EAP 7上validation了我的应用程序。我的应用程序在独立模式下工作,但是在集群模式下,我的应用程序被部署了,但是我无法login。 我又被重新路由到loginurl。 我使用mod_cluster设置了群集。
Load Balancer Server中没有错误日志logging在群集的单个节点上。 在我的testing环境中,我的负载平衡器和2个服务器节点在同一台机器上。 我给了JBoss节点不同的端口和实例ID来区分节点。 我正在共享我的mod_cluster.conf和JBoss standalone-ha.xml节点集群中的一个节点。 在此先感谢..请不要低估这个问题,请发表意见中的任何build议来重述这个问题。
以下是standalone-ha.xml文件中的代码片段:
Modcluster设置是:
<subsystem xmlns="urn:jboss:domain:modcluster:2.0"> <mod-cluster-config advertise-socket="modcluster" proxies="proxy1" balancer="testcluster" advertise="true" connector="ajp"> <dynamic-load-provider> <load-metric type="busyness"/> </dynamic-load-provider> </mod-cluster-config> </subsystem>
Undertow设置是:
<subsystem xmlns="urn:jboss:domain:undertow:3.1" instance-id="node1"> <buffer-cache name="default"/> <server name="default-server"> <ajp-listener name="ajp" socket-binding="ajp"/> <http-listener name="default" socket-binding="http" redirect-socket="https"/> <host name="default-host" alias="localhost"> <location name="/" handler="welcome-content"/> <filter-ref name="server-header"/> <filter-ref name="x-powered-by-header"/> </host> </server> <servlet-container name="default"> <jsp-config/> <websockets/> </servlet-container> <handlers> <file name="welcome-content" path="${jboss.home.dir}/welcome-content"/> </handlers> <filters> <response-header name="server-header" header-name="Server" header-value="JBoss-EAP/7"/> <response-header name="x-powered-by-header" header-name="X-Powered-By" header-value="Undertow/1"/> </filters> </subsystem>
Socket绑定组的内容是:
<socket-binding-group name="standard-sockets" default-interface="public" port-offset="${jboss.socket.binding.port-offset:0}"> <socket-binding name="management-http" interface="management" port="${jboss.management.http.port:9990}"/> <socket-binding name="management-https" interface="management" port="${jboss.management.https.port:9993}"/> <socket-binding name="ajp" port="${jboss.ajp.port:8009}"/> <socket-binding name="http" port="${jboss.http.port:8080}"/> <socket-binding name="https" port="${jboss.https.port:8443}"/> <socket-binding name="jgroups-mping" interface="private" port="0" multicast-address="${jboss.default.multicast.address:230.0.0.4}" multicast-port="45700"/> <socket-binding name="jgroups-tcp" interface="private" port="7600"/> <socket-binding name="jgroups-tcp-fd" interface="private" port="57600"/> <socket-binding name="jgroups-udp" interface="private" port="55200" multicast-address="${jboss.default.multicast.address:230.0.0.4}" multicast-port="45688"/> <socket-binding name="jgroups-udp-fd" interface="private" port="54200"/> <socket-binding name="modcluster" port="0" multicast-address="224.0.1.105" multicast-port="23364"/> <socket-binding name="txn-recovery-environment" port="4712"/> <socket-binding name="txn-status-manager" port="4713"/> <outbound-socket-binding name="mail-smtp"> <remote-destination host="localhost" port="25"/> </outbound-socket-binding> <outbound-socket-binding name="proxy1"> <!-- host and port number of the load-balancer. --> <remote-destination host="xxxx" port="81"/> </outbound-socket-binding> </socket-binding-group>
mod_cluster.conf的内容如下:
LoadModule proxy_cluster_module modules/mod_proxy_cluster.so LoadModule cluster_slotmem_module modules/mod_cluster_slotmem.so LoadModule manager_module modules/mod_manager.so LoadModule advertise_module modules/mod_advertise.so MemManagerFile "//httpd2.4.6Home/var/cache/mod_cluster" <IfModule manager_module> Listen 81 <VirtualHost *:81> <Directory /> Require all granted </Directory> <Location /> Require all granted </Location> <Location /mod_cluster_manager> SetHandler mod_cluster-manager Require all granted </Location> KeepAliveTimeout 60 MaxKeepAliveRequests 0 ManagerBalancerName testcluster AdvertiseFrequency 5 ServerAdvertise on EnableMCPMReceive </VirtualHost> </IfModule>
这看起来像会话粘性问题。
恕我直言,你的configuration似乎确定。 你可以在你的应用上执行curl调用吗? 或者只是一些JSP页面来validation您的configuration。
curl -b cookie.txt -c cookie.txt YOUR_BALANCER_ADDRESS/YOURAPP -v
你可以在你的应用上执行curl调用吗? 或者只是一些JSP页面来validation您的configuration。
curl -b cookie.txt -c cookie.txt YOUR_BALANCER_ADDRESS/YOURAPP -v
或者使用这个groovy脚本
final char CR = '\r' final char LF = '\n' String host = (args.size() >= 1) ? args[0] : '127.0.0.1' int port = (args.size() >= 2) ? Integer.parseInt(args[1]) : 8080 String path = (args.size() >= 3) ? args[2] : "/clusterbench/jvmroute" Socket socket OutputStreamWriter out InputStream ins BufferedReader reader try { socket = new Socket(host, port) def req = "GET ${path} HTTP/1.1" + CR + LF + "Host: ${host}:${port}" + CR + LF + 'Accept: */*' + CR + LF + 'Connection: close' + CR + LF + CR + LF println "Sending request \n" + req socket = new Socket(host, port) out = new OutputStreamWriter(socket.getOutputStream(), "UTF-8") out.write(req) out.flush() ins = socket.getInputStream() reader = new BufferedReader(new InputStreamReader(ins)) reader.readLines().each { line -> println line } } catch (Exception ex) { println "Exception: " + ex } finally { socket?.close() out?.close() reader?.close() }
用法是:
groovy test.groovy IP_ADDRESS PORT PATH_TO_APP
例:
groovy test.groovy 127.0.0.1 2080 "/clusterbench/jvmroute"
输出:发送请求GET / clusterbench / jvmroute HTTP / 1.1主机:192.168.122.206:2080接受: /连接:closures
HTTP/1.1 200 OK Date: Wed, 07 Jun 2017 08:18:03 GMT Server: JBoss-EAP/7 X-Powered-By: Undertow/1 Set-Cookie: JSESSIONID=TK454oHgFFX05Duw7LxTS3bO4JyyMLcqrqv5IWm_.jboss-eap-7.1-2; path=/clusterbench Content-Type: text/plain;charset=UTF-8 Content-Length: 15 Connection: close
我们正在寻找“Set-Cookie:”标题来validationworker节点是否正确设置了sessionId,它是jvm路由。
如果他这样做,那么问题将在别处
Mod-clusterpipe理器控制台输出也可能有帮助。
没有什么具体的东西在我脑海里
您在同一台计算机上运行2个EAP,而不指定名称,并且它们未被群集。 模块集群pipe理器控制台输出将显示。 EAP日志输出可能也有帮助
EAP节点不设置jvmRoute,并且它们不是集群的(curl,EAP日志可能有帮助)
您的应用程序不设置sessionID(随机JSP页面curl请求可能有帮助)
对不起,我不能更有帮助