科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道Apache+Apusic集成配置负载均衡

Apache+Apusic集成配置负载均衡

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

利用负载均衡器的会话保持(Session Stick)技术,负载均衡器会记录SessionID和服务器IP,然后将下次请求仍然转发到上次处理的服务器上,但是这种方式如果服务器宕机了,就会使客户丢失信息。

作者:朱远翔 来源:blogjava.net 2008年3月6日

关键字: Apusic Apache 朱远翔 负载均衡

  • 评论
  • 分享微博
  • 分享邮件

  1. 为何要做负载均衡?

  一般是对性能和价格比的需要,为了能够共享应用服务器的计算能力,用户会采购多个CPU的金蝶阿帕斯应用服务器(Kingdee ApusicApplication Server,KAAS)中间件产品,并且安装到多台计算机中,然后将多个应用统一部署在这些KAAS之上。

  还有就是保护KAAS安全,现在网络攻击太严重了,因此用户想把服务器放在防火墙后面,前端放一个Apache服务器或者硬件的负载均衡器,哪怕前端被攻击,至少可以保证主页内容不会被篡改。

  2. 如何用Apache+Apusic实现LB?

  实现前我们需要了解一个概念,LB到底由哪些部分组成,相互之间的关系如何?配置负载均衡需要两个部分组成:负载均衡器和应用服务器集群。负载均衡器不了解具体业务,只知道有哪些KAAS,然后依据一种分配机制将客户请求分配给相应的KAAS。而KAAS接到用户请求,处理完成后就将结果返回给负载均衡器,再返回到客户端。但是HTTP请求都是无状态的,如果用户使用Session机制保存了状态,那么下次再访问时可以通过两种方法处理:

  ⑴ 利用负载均衡器的会话保持(Session Stick)技术,负载均衡器会记录SessionID和服务器IP,然后将下次请求仍然转发到上次处理的服务器上,但是这种方式如果服务器宕机了,就会使客户丢失信息;

  ⑵ 利用KAAS的集群功能,将一起工作的服务器配置成集群,相互之间利用会话复制(Session Copy)技术,所有服务器上的会话内容完全相同,请求不需要转发给相同的服务器就可以得到正确响应,但是这种方式会给网络带来较大的负载压力,甚至引起网络风暴。

  下面分别是这两种方法的配置过程:

  ⑴ 配置均衡均衡的会话保持

  #httpd.conf(Apache的配置文档,如果想了解Apache相关配置参数,请看参考文献)

  #载入重要的模块

  LoadModule proxy_module modules/mod_proxy.so

  LoadModule proxy_ajp_module modules/mod_proxy_ajp.so

  LoadModule proxy_balancer_module modules/mod_proxy_balancer.so

  LoadModule proxy_connect_module modules/mod_proxy_connect.so

  LoadModule proxy_http_module modules/mod_proxy_http.so

  LoadModule proxy_ftp_module modules/mod_proxy_ftp.so

  #设置负载均衡分配用的服务器

  

   BalancerMember http://1.2.3.4:6888/

   BalancerMember http://1.2.3.5:6888/

  

  #设置代理服务器转发方式,stickysession就是会话保持,JSESSIONID就是Apusic的会话ID,nofailover就是说服务器没有做集群

  ProxyPass / balancer://apusicBalance stickysession=JSESSIONID nofailover=On

  ProxyPassReverse / balancer://apusicBalance

  ⑵ 利用KAAS的集群功能,只提供了WEB模块Session复制的例子,其它例子请参考Apusic集群管理文档,在apusic.conf增加的配置如下

  

  

??? CLASS="com.apusic.cluster.ClusterService"

??? >   CLASS="com.apusic.cluster.ClusterService"

   >

  

  

  

  

  

  

  

  

  

  

  

  

  3. 使用Apache实现LB还有哪些功能?

  ⑴ 支持缓冲。mod_cache模块。

  Sample httpd.conf

  #

  # Cache配置的例子

  # 下面的Cache默认采用disk作为缓存,如果想调整成mem,必须先将disk用#注释,然后删除mem的#注释。

  LoadModule cache_module modules/mod_cache.so

  LoadModule disk_cache_module modules/mod_disk_cache.so

  #LoadModule mem_cache_module modules/mod_mem_cache.so

  

  

  CacheRoot c:/cacheroot

  CacheEnable disk /

  CacheDirLevels 5

  CacheDirLength 3

  

  

  CacheEnable mem /

  MCacheSize 4096

  MCacheMaxObjectCount 100

  MCacheMinObjectSize 1

  MCacheMaxObjectSize 2048

  

  # 当Apache作为Proxy时,不缓存安全部分的代码。下面的例子实际使用时请改成应用自身的情况

  CacheDisable http://security.update.server/update-list/

  

  ⑵ 不同的分配机制。

  除了已经知道的循环分配机制,将请求依次派发给每个应用服务器;还可以通过loadfactor来进行权重分配,事先依据每个应用服务器的计算能力,将请求依据权重分发给服务器;还可以通过lbmethod流量的压力进行统计,然后将请求分发给服务器。

  ⑶ 分别在不同的网络层进行代理,一般可以在四层和七层。

  这种方法我没有进行实验,待以后补充。

  4. 在应用开发阶段要注意哪些事情来满足LB需要?

  开发阶段需要注意的内容其实很多,主要就是Session复制和资源死锁的问题。以前项目开发,能够把功能实现就算是完工了,但是用户的需求也在增加,特别是J2EE为分布式计算提供了很好的模型,为开发符合LB标准的程序提供了有利的条件,但是在开发阶段仍然有些工作必须要做,例如:

  ⑴ 所有保存在Sesion中的类必须要实现Serialable接口,当然还要把Object实现的方法重载,保证你的类被正确序列化了,但是如果没有实现,至少保证系统进行Session复制时不会报错;

  ⑵ 尽量不要进行长事务操作,尽量不要对数据库进行表级锁,尽量把申请得到的资源进行归还,尽量使用finally保证资源被正确释放,等等…

  ⑶ 以后继续补充

  参考文献:

  1. mod_proxy - Apache 2.2 中文版参考手册,

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章