ApusicAS集群对第三方的负载均衡(如:硬件负载均衡器F5,软件负载均衡器Apache Server,微软的IIS等)提供良好的支持。
当使用第三方的负载均衡器时,AAS的Session复制同样采用内存复制技术,及AAS的Session复制不会调整,但是由于Apusic Loadbalancer原生提供对Session的状态备份,而第三方负载均衡器则无法提供相应的功能。因此,AAS采用了使用IP多播技术,通过IP多播和Java序列化/反序列化技术在集群中的AAS实例之间进行内存复制,这时候,需要开启AAS的集群服务。Apusic集群支持两种Session复制策略:多点复制,配对复制,用户可以根据自己的需要选择不同的复制策略。默认情况下为配对复制(关于配对复制的优势,此处不再赘述)。
下面开始配置:
首先,在需要加入集群的节点中修改apusic.conf文件,在其中添加如下内容:
<SERVICE CLASS="com.apusic.cluster.ClusterService" > <ATTRIBUTE NAME="ServerName" VALUE="$DOMAIN_NAME"/> <ATTRIBUTE NAME="ReplicationPolicy" VALUE="PAIR"/> <ATTRIBUTE NAME="LoadWeight" VALUE="100"/> <ATTRIBUTE NAME="ClusterName" VALUE="ApusicCluster"/> </SERVICE>其中,“ClusterName”为当前节点需要加入的集群的名称,集群名称尽量体现客户与项目特色,防止重复。多个节点如果想加入到同一个集群中,ClusterName必须相同。“ServerName”为当前节点的名称,必须唯一,如果存在相同名称的节点,则后加入的节点会加不到集群中。默认的ServerName为当前Domain的名称。“ReplicationPolicy”即Session复制策略,AAS默认使用配对的复制策略即PAIR,如果需要改成多点复制,需要将此值修改为“ALL”。
其次,需要修改原来的SessionService,将Distributable和Replicable属性为True,即允许使用Session复制与分布,修改后的SessionService相应内容如下:
<SERVICE CLASS="com.apusic.web.session.SessionService" > <ATTRIBUTE NAME="DefaultSessionTimeout" VALUE="3600"/> <ATTRIBUTE NAME="MaxSessionsInCache" VALUE="1024"/> <ATTRIBUTE NAME="SessionInvalidateCheckInterval" VALUE="60"/> <ATTRIBUTE NAME="Distributable" VALUE="True"/> <ATTRIBUTE NAME="Replicable" VALUE="True"/> <ATTRIBUTE NAME="SessionStick" VALUE="True"/> <ATTRIBUTE NAME="PersisteSession" VALUE="True"/> <ATTRIBUTE NAME="DestorySessionOnApplicationStop" VALUE="False"/> </SERVICE>其中,将“SessionStick”(Session粘滞)调整为True,降低来回切换节点造成的性能损失(前提自然是第三方的负载均衡器支持Session粘滞,否则此参数无意义,目前很多常见的软件Web服务器(Apache、Nginx等)已经在不同技术上支持Session粘滞,具体配置可以参考相应的配置)。“DestorySessionOnApplicationStop”属性值,默认是True,需要将其修改为 “False”,以保证集群中的某一台机器宕机或发生故障时Session不会丢失。
所谓Session粘滞,即一旦某个客户端上次访问了集群中的某一台服务器,此客户端在下次访问时,会自动访问上次访问的那台服务器,从而减少由于来回切换服务器造成的性能损失。
注意:在linux下以上配置都正确的情况下,出现节点不能正确加入集群,请设置etc/hosts文件的地址为局域网内部地址。
当然,最重要的自然是在第三方负载均衡器中配置相应的负载均衡策略。