设为首页 收藏本站
查看: 753|回复: 0

[经验分享] Apache+Apusic集成配置负载均衡

[复制链接]

尚未签到

发表于 2017-1-6 09:59:07 | 显示全部楼层 |阅读模式
  1. 为何要做负载均衡?
一般是对性能和价格比的需要,为了能够共享应用服务器的计算能力,用户会采购多个CPU的金蝶阿帕斯应用服务器(Kingdee Apusic Application 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
#设置负载均衡分配用的服务器
<Proxy balancer://apusicBalance>
    BalancerMember http://1.2.3.4:6888/
    BalancerMember http://1.2.3.5:6888/
</Proxy>
#设置代理服务器转发方式,stickysession就是会话保持,JSESSIONID就是Apusic的会话ID,nofailover就是说服务器没有做集群
ProxyPass / balancer://apusicBalance stickysession=JSESSIONID nofailover=On
ProxyPassReverse / balancer://apusicBalance
  ⑵ 利用KAAS的集群功能,只提供了WEB模块Session复制的例子,其它例子请参考Apusic集群管理文档,在apusic.conf增加的配置如下
<!-- 将应用服务器增加到集群中 -->
<SERVICE
    CLASS="com.apusic.cluster.ClusterService"
    >
    <ATTRIBUTE NAME="ClusterName" VALUE="ApusicCluster"/>
    <ATTRIBUTE NAME="LoadWeight" VALUE="100"/>
</SERVICE>
<!-- 使WEB容器的Session支持复制 -->
<SERVICE CLASS="com.apusic.servlet.http.session.SessionService">
    <ATTRIBUTE NAME="DefaultSessionTimeout" VALUE="3600"/>
    <ATTRIBUTE NAME="MaxSessionsInCache" VALUE="1024"/>
    <ATTRIBUTE NAME="SessionInvalidateCheckInterval" VALUE="60"/>
    <ATTRIBUTE NAME="SessionSwapCheckInterval" VALUE="30"/>
    <ATTRIBUTE NAME="Distributable" VALUE="True"/>
    <ATTRIBUTE NAME="Replicable" VALUE="True"/>
</SERVICE>
  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
<IfModule mod_cache.c>
 <IfModule mod_disk_cache.c>
  CacheRoot c:/cacheroot
  CacheEnable disk /
  CacheDirLevels 5
  CacheDirLength 3
 </IfModule>
 <IfModule mod_mem_cache.c>
  CacheEnable mem /
  MCacheSize 4096
  MCacheMaxObjectCount 100
  MCacheMinObjectSize 1
  MCacheMaxObjectSize 2048
 </IfModule>
# 当Apache作为Proxy时,不缓存安全部分的代码。下面的例子实际使用时请改成应用自身的情况
CacheDisable http://security.update.server/update-list/
</IfModule>
⑵ 不同的分配机制。
除了已经知道的循环分配机制,将请求依次派发给每个应用服务器;还可以通过loadfactor来进行权重分配,事先依据每个应用服务器的计算能力,将请求依据权重分发给服务器;还可以通过lbmethod流量的压力进行统计,然后将请求分发给服务器。
  ⑶ 分别在不同的网络层进行代理,一般可以在四层和七层。
这种方法我没有进行实验,待以后补充。
  4. 在应用开发阶段要注意哪些事情来满足LB需要?
开发阶段需要注意的内容其实很多,主要就是Session复制和资源死锁的问题。以前项目开发,能够把功能实现就算是完工了,但是用户的需求也在增加,特别是J2EE为分布式计算提供了很好的模型,为开发符合LB标准的程序提供了有利的条件,但是在开发阶段仍然有些工作必须要做,例如:
⑴ 所有保存在Sesion中的类必须要实现Serialable接口,当然还要把Object实现的方法重载,保证你的类被正确序列化了,但是如果没有实现,至少保证系统进行Session复制时不会报错;
⑵ 尽量不要进行长事务操作,尽量不要对数据库进行表级锁,尽量把申请得到的资源进行归还,尽量使用finally保证资源被正确释放,等等…
⑶ 以后继续补充
  参考文献:
1. mod_proxy - Apache 2.2 中文版参考手册,
http://doc.chinahtml.com/Manual/ApacheManual/mod/mod_proxy.html
2. mod_cache - Apache 2.2 中文版参考手册
http://doc.chinahtml.com/Manual/ApacheManual/mod/mod_cache.html
3. Apusic集群管理文档
http://infocenter.apusic.com/help/index.jsp?topic=/com.apusic.studio.doc.server/output/eclipse/cluster_management.html

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-324564-1-1.html 上篇帖子: Apache Commons Discovery 与面向服务编程 下篇帖子: 数据源--org.apache.commons.dbcp.BasicDataSource
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表