您的位置:首页 > 其它

深入了解ApusicAS服务器配置系列之——AAS集群:使用Apusic Loadbalancer相关配置

2011-12-18 16:23 691 查看
集群是解决应用的高性能与高可用的一种技术,就目前的常规Java EE应用中,最常见最常用的就是Web集群。更规范一些说,web集群就是解决两个问题:客户请求的负载均衡和Session的高可用。
客户请求的负载均衡是指客户的请求依赖特定算法被合理地分配给多台Web Server来处理。
Session的高可用性是指当某台Web Server失效,这台Web Server服务的客户的请求会被透明地转发给其它有效Web Server,而会话状态(Session)依然可用。
对于负载均衡,一直是一个让人爱恨交织的东东。配置合理可以发挥每台服务器的最大性能,提供最好的性能与用户体验;配置不合理,则会让你焦头烂额,死得很难看。而这种东西往往很少能一下成功,往往在人将近绝望的时候,柳暗花明。

Apusic AS提供内置的负载均衡器,并且可以支持第三方的负载均衡器,甚至是硬件负载均衡器。下面分别介绍一下AAS内置的负载均衡器与第三方负载均衡器的配置方法。
使用AAS内置的负载均衡器有一个原生的优点,就是AAS内置实现分布式Session管理,既能保证集群的高性能又可以保证Session的高可用,集群中的服务器失效以后,Session切换非常及时,不会出现(在应用没有问题的情况下)Session突然丢失的情况。
采用Apusic LoadBalancer作为负载均衡器时,AAS内置提供三种负载均衡策略:
随机选择策略——按照随机算法,随机选择集群中一台服务器处理请求。
Round-Robin策略——依次轮寻选择集群中一台服务器处理请求。
权重策略——按照权重的比例选择服务器处理请求。

当然,还支持其他一些负载均衡策略,用户也可以扩展并加入自定义的负载均衡策略。
在一般情况下,如果集群中的服务器配置相当,可以采用Round-Robin策略,再配合AAS内置的Session粘滞(Session-sticky),可以提供更好的性能;如果集群中的服务器配置差别较大,甚至不在同一数量级上,可以采用权重策略,配置客户请求分发的比例,保证每台服务器都能够实现合理的工作负载。
Apusic LoadBalancer使用了内存复制技术,将每个后置服务器的Session备份在自己的缓存中,即后台某个节点处理完客户端请求时,将当前Session复制到负载均衡器中。所以使用Apusic LoadBalance时,集群中每个节点必须开启SessionService中的复制服务。
采用Apusic LoadBalancer时,由于Session缓存在Apusic LoadBalancer的缓存中,当主节点失效时,Apusic LoadBalancer从缓存取出当前的Session,将Session带到下一个节点进行处理,确保Session的可用性。
一般情况下,使用AAS内置的负载均衡器,建议新建一个负载均衡器域,最为一个独立服务的应用。新增负载均衡器域,使用AAS的config.cmd工具,创建一个新的集群域。
以Windows为例,打开命令行,定位至%AAS_BIN%下,命令行中输入“config.cmd”,打开“Apusic域配置向导”。如下图:



按照命令行中的提示,依次输入相应信息,直至创建集群域完毕。





上述图片描述了一个创建名为“clusterTest”端口号为“3333”的集群域的创建过程,创建完成的集群域存放在与其他域并列的磁盘位置。创建集群域完毕之后,在%APUSIC_DOMAIN_HOME%下,会新建一个clusterTest文件夹,在其下的config目录下,会有一个loadbalancer.conf文件,此文件的建立,标志着一个基于Apusic Loadbalancer的集群域创建完毕。此配置文件中,关于负载均衡的配置都在<SERVICE CLASS="com.apusic.web.loadbalancer.LoadBalancer"/>节点中配置。

在配置文件中,最关键的属性BackendServers,定义了集群中的服务器,这是一个用逗号分割的地址列表,包括主机名和端口号。
Apusic负载均衡器默认情况下是会话粘滞(session-sticky)的,同时采用轮循的策略选择可用节点。当然也可以关闭会话粘滞,只要在LoadBalancer服务中,增加属性:

<ATTRIBUTE NAME="SessionStick" VALUE="false"/>
 就可以关闭会话粘滞。如果想采用其他策略来选择节点,可以增加属性:

<ATTRIBUTE NAME="BalancePolicy" VALUE="Random"/> 其中Value值可以选择:Random,Round-Robin,LoadWeight.
注意当选择LoadWeight的时候,还需要增加属性: <ATTRIBUTE NAME="LoadWeight" VALUE="10,20,70"/> 来标识权重的值。其值与服务器地址列表中的服务器一一对应。此外,用户还可以扩展自己的负载均衡策略,只要实现LoadBalancePolicy接口,同时增加属性: <ATTRIBUTE NAME="BalancePolicyClass" VALUE="userclass "/> 其中Value值为用户自定义的类。当两个属性BalancePolicy,BalancePolicyClass同时存在时,BalancePolicyClass的优先级高。要使用Session的分布式功能,集群中每台Apusic服务器的SessionService中属性:
<ATTRIBUTE NAME="Distributable" VALUE="True"/>值必须为True。默认情况下为False。
注意:此处的loadbalancer.conf文件中的LoadBalancer相关配置,与普通应用域下的apusic.conf文件中的“com.apusic.web.WebService”部分属性值可以通用,尤其是当使用Apusic Loadbalancer的集群发生乱码时,可以在此LoadBalancer属性下新增<ATTRIBUTE NAME="URIEncoding" VALUE="GBK"/>此属性值,可以解决此问题,关于此问题本博客中的另外一篇文章:使用Apusic AS内置负载均衡器时页面乱码的解决办法中,有详细介绍。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息