httpd 负载均衡
JBoss EAP 6.3提供了WebSocket的技术预览, WildFly已将其作为Java EE 7合规性的一部分进行了支持。
github.com/javaee-samples/javaee7-samples/tree/master/websocket提供了在WildFly上运行的大量Java EE 7示例。 如果您对JBoss EAP 6.3上的类似功能感兴趣,那么github.com/jboss-developer/jboss-eap-quickstarts/tree/6.4.x-develop/websocket-hello是一个快速入门。 另外,在github.com/arun-gupta/jboss-samples/tree/master/eap63上还有更多示例。
与WebSocket相关的常见问题之一是如何对它们进行负载平衡。 本技术提示将针对WildFly和JBoss EAP 6.3进行解释。
首先,主要成分是什么?
- 至少需要Apache HTTPD 2.4.5。 现在,HTTPD二进制文件不适用于Mac,幸运的是,编译提示在技术提示#45中有明确说明。
- mod_proxy_wstunnel是一个Apache模块,提供对Web Socket连接到后端Web Sockets服务器(例如WildFly或JBoss EAP)的隧道传输的支持。 它是mod_proxy的支持模块,它为许多流行的协议以及几种不同的负载平衡算法提供支持。 该连接自动升级为WebSocket连接。 并且所有模块已经包含在
modules
目录中。 - 需要mod_proxy_balancer模块为HTTP和其他协议提供负载平衡。
我们走吧!
- 下载并解压缩WildFly 8.1。
- 使用./bin/domain.sh在域模式下启动WildFly 8.1。
- 下载此聊天示例 ,将文件重命名为“ chat.war”,并以以下方式部署到“ main-server-group”:
~/tools/wildfly-8.1.0.Final/bin/jboss-cli.sh -c --command="deploy chat.war --server-groups=main-server-group"
与原始Java EE 7 WebSocket聊天示例的唯一区别是添加了
System.getProperty("jboss.node.name")
来显示为应用程序提供服务的WildFly实例的名称。 源代码可在github.com/arun-gupta/wildfly-samples/tree/master/websocket-loadbalance中找到 。 - 在
/usr/local/apache2/conf/httpd.conf
取消注释以下行:LoadModule lbmethod_byrequests_module modules/mod_lbmethod_byrequests.so LoadModule proxy_module modules/mod_proxy.so LoadModule proxy_wstunnel_module modules/mod_proxy_wstunnel.so LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
这将启用所有必需的模块。
- 在“ httpd.conf”的末尾添加以下代码片段:
<Proxy balancer://mycluster> BalancerMember ws://localhost:8080 BalancerMember ws://localhost:8230 </Proxy> ProxyPass /chat balancer://mycluster/chat
代理是代理资源的容器,在这种情况下,将使用balancer指令创建负载平衡组。 BalancerMember将成员添加到此负载平衡组。 ProxyPass是一个标准指令,它将在不同端口上运行的远程服务器映射到本地服务器的空间。 在这种情况下,WildFly在域模式下启动,因此在端口8080和8230上启动了两个实例。这两个实例都映射到localhost:80,这是Apache HTTPD默认运行的位置。
现在可以通过localhost:8080 / chat(托管域中的第一个实例),localhost:8230 / chat(托管域中的第二个WildFly实例)和localhost / chat(通过Apache HTTPD)访问已部署的聊天示例。
现在,即使您杀死了其中一个WildFly实例,另一个实例也将继续为客户端提供服务。 请注意,这仅提供应用程序可用性,因为其中没有会话故障转移。
JBoss EAP 6.3上也对此进行了验证,并且有一些区别:
- 使用来自github.com/arun-gupta/jboss-samples/tree/master/eap63/websocket-chat的示例。
- 生成的档案名称是不同的,因此该命令看起来也将略有不同:
~/tools/jboss-eap-6.3/bin/jboss-cli.sh -c --command="deploy websocket-chat-1.0-SNAPSHOT.war --server-groups=main-server-group"
- 将“ httpd.conf”配置为:
<Proxy balancer://mycluster> BalancerMember ws://localhost:8080 BalancerMember ws://localhost:8230 </Proxy> ProxyPass /websocket-chat-1.0-SNAPSHOT balancer://mycluster/websocket-chat-1.0-SNAPSHOT
就是这样!
观看现场直播:
需要了解的重要一点是,WebSocket中没有“粘性会话”的概念,因为与HTTP不同,在这种情况下,客户端与服务器之间存在直接且“永久”的连接。
请享用!
翻译自: https://www.javacodegeeks.com/2014/09/load-balance-websockets-using-apache-httpd.html
httpd 负载均衡