集群是保证大型应用高可用的重要手段之一,应用服务器的集群也是目前最常见的集群操作方式。
通过借鉴我的同事之前的经验及相关资料,这里制作了2中环境的集群:一种是直接使用Apusic自带的负载均衡器,制作集群。这样的集群不需要额外的负载均衡器,配置也是非常方便。另外,就是使用apache做负载均衡器,制作集群。下面分别介绍两种方式的操作过程。
Apache的HTTP Server是目前最常见的负载均衡器,由于其开源免费并且效果相对不错,深受广大用户的喜爱。
首先 ,需要下载一个apache服务器,下载地址:http://httpd.apache.org/download.cgi 。可以根据自己实际情况,下载需要的apache版本。这里使用的是Windows环境下的2.2.15版本。
其次 ,添加apusic的集群域。双击%APUSIC_HOME%\bin下的config.cmd文件,打开域管理工具,依次选择“1- 创建一个新的Apusic域”--“1- 选择系统默认模板”--“2- 集群”(这里创建一个集群模板的域)--“选择默认路径”--“输入域名称”--“输入服务监听端口”--“输入服务器SSL安全监听端口”,创建一个集群域。集群域创建完成后,可以在%APUSIC_HOME%\domains\下,看到按照之前输入的域名创建的目录,此时的域目录已经将所有必须的文件及目录创建完成,只需要将需要启用的应用配置完成即可。假设我们创建的域名为:domain1,其服务监听端口为:7777。
再次 ,修改apusic.conf文件,在文件中添加集群服务信息。内容如下所示:
然后 ,修改apusic.conf中的Session服务信息,保证Session的高可用。推荐使用Session粘滞,以减少负载均衡器频繁切换造成的压力;另外,为防止集群中网络风暴的产生,建议使用配对的session复制策略。关于SessionService的配置信息如下所示:
说明:默认情况下,在创建完成集群域之后,关于集群与Session服务的配置信息已经创建完成,唯一需要修改的地方是SessionService中的“DestorySessionOnApplicationStop”属性值,默认是True,需要将其修改为“False”,以保证集群中的某一台机器宕机或发生故障时Session不会丢失。
接下来 ,需要修改%APUSIC_HOME%\domains\domain1\config\下面的vm.options文件,在其中加入“com.apusic.jvm.route=ApusicCluster”,来配合apusic.conf中关于Session粘滞的配置,保证Session粘滞正常。其中“ApusicCluster”为apusic.conf中ClusterService下配置的ClusterName。
另外,由于Apache的Http Server对于负载均衡的bug(不知道最新的版本是否已经修订,先按照经验来),需要在vm.options中加入“-Dapusic.redirect.proxy=true”。
在完成对Apusic相应的配置之后 ,修改apahce的httpd.conf文件(路径:%APACHE_HOME%\conf),释放负载均衡的服务:
最后 ,在httpd.conf文件末尾,添加集群中的成员,其配置信息如下所示:
其中,“stickysession=JSESSIONID”用于说明使用session粘滞;“Proxy balancer”下属的信息,则说明了加入集群的各个成员及各自的端口、域等信息;“loadfactor”则指明集群中各成员的负载比例,例子中是1:1。BalancerMember为后置机节点,后面的值为后置机的地址和端口。Loadfactor为负载权重。当用户想使用会话粘滞(Session-Stick),可以在ProxyPass / balancer://test/ 后面加入stickysession=JSESSIONID,当用户想使用失效转移时要在后面加入nofailover=off,同时在每个BalancerMember最后面加入route=serverName。
至此,使用Apache Http Server做负载均衡器的Apusic集群配置完成。重启Apache,然后启动Apusic对应的服务,集群即创建完成。
Apusic本身内置负载均衡器,可以直接借助Apusic的负载均衡器,创建一个Apusic集群。创建Apusic集群,只需要在Apusic中新创建一个域,例如,此处创建一个名为“balancer”的域,修改此域中loadbalancer.conf的内容,此文件中已经有“LoadBalancer”相关配置信息,修改“LoadBalancer”下的“BackendServers”属性为需要加入集群的各Apusic服务,不同的服务之间用逗号分隔,例如:
Apusic负载均衡器默认情况下是会话粘滞(session-stick)的,同时采用轮循的策略选择可用节点。当然你也可以关闭会话粘滞,只要在LoadBalancer服务中,增加属性:
就可以关闭会话粘滞。如果想采用其他策略来选择节点,可以增加属性:
其中Value值可以选择:Random,Round-Robin,LoadWeight.注意当用户选择LoadWeight的时候,还需要增加属性:
来标识权重的值。其值与服务器地址列表中的服务器一一对应。此外,用户还可以扩展自己的负载均衡策略,只要实现LoadBalancePolicy接口,同时增加属性:
其中Value值为用户自定义的类。当两个属性BalancePolicy,BalancePolicyClass同时存在时,BalancePolicyClass的优先级高。
最后,当上面的配置完成后,负载均衡器可以通过命令行方式启动,不同的是需要增加-config参数指明负载均衡器的配置文件,例如:java -classpath E:\apusic\lib\apusic.jar; E:\apusic\lib\javac.jar;E:\apusic\lib\mejb.jar;E:\apusic\common\javaee.jar; com.apusic.server.Main -root E:\apusic\domains\mydomain -config /config/loadbalancer.conf。最终,使用Apusic做负载均衡的Apusic集群创建完成!
Apusic不仅仅支持Apache做负载均衡器,还支持其他的Http Server,(比如微软的IIS)做负载均衡器,具体配置请参考相应资料。
经过测试,使用Apusic做为负载均衡器,可以实现异构系统环境下的集群,而且可以保证Session的一致性(幂等性)。但是,经过测试,发现在异构环境下,使用Apache做负载均衡,没法保证幂等性,这个不知是配置出现问题,还是本身不提供相应的机制。