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

[经验分享] 基于Apache的Tomcat负载均衡和集群

[复制链接]

尚未签到

发表于 2015-7-31 09:36:10 | 显示全部楼层 |阅读模式
  
  基于Apache的Tomcat负载均衡和集群
  
  1、反向代理负载均衡 (Apache+JK+Tomcat)
    使用代理服务器可以将请求转发给内部的Web服务器,让代理服务器将请求均匀地转发给多台内部Web服务器之一上,从而达到负载均衡的目的。这种代理方式与普通的代理方式有所不同,标准代理方式是客户使用代理访问多个外部Web服务器,而这种代理方式是多个客户使用它访问内部Web服务器,因此也被称为反向代理模式。
  2、为什么要配置Tomcat 负载均衡和集群
    负载均衡:负载均衡能处理高并发量的请求。
     Tomcat 集群:Tomcat 集群配合负载均衡可以是系统达到高可用性,即任何一台服务器不可用,自动重新连接后,能保持session 数据一致,不需要重新输入密码。
  3、简单原理介绍
    1.apatche 与tomcat 的之间的联系由jk 完成,用的是ajp协议。每个tomcat 都在监听ajp端口。默认的 AJP Connector 的端口是 8009 。
     2.配置了集群的 tomcat 之间通过 tcp 协议通信复制 session,当然要在tomcat 应用中的web.xml 文件中加入或 ,标志着要复制session。
    复制session 是为了在某个服务器正在被请求时宕机,请求由apache 通过jk 转发到其他tomcat 服务器时,session 中的信息丢失采取的一中保持session 的方式,还有其他的解决方案,如把session 存到数据库中。
    3.jk 把请求分配给某个tomcat 服务器遵循着不同的原则,这里我们使用的是负载均衡。在 workers.properties 中定义了很多worker ,如果worker 的type 把定义成 lb,就表示这个worker 是负载均衡worker ,他知道怎样提供轮询来分配request 。而负载均衡也分很多平衡的方式,采用哪种方式决定于属性worker.balancer.method。
    下面具体描述不同的负载均衡方式(默认的是R方式):


  • worker.balancer.method=Request (简写R ):负载均衡worker 将根据每个tomcat 服务器上处理的request 数来寻找最佳的tomcat 服务器。这种方式适合绝大数application 。
  • worker.balancer.method=Session (简写 S ):负载均衡worker 根据各个tomcat 上 session的数量来寻找最佳tomcat ,但是负载均衡worker 并没有状态,所以不知道session 个数,所以把没有session cookie 的请求或url 中没有encode sessionid 的请求当作new session 。
  • worker.balancer.method= Traffic (简写T ):负载均衡worker 根据jk 和tomcat 直接的网络状况来找最佳的tomcat 服务器。
  • worker.balancer.method= Busyness (简写B ):负载均衡worker 根据tomcat 的流量选择流量最少的tomcat 。
  4、配置步骤详解
    1.下载安装
    Apache服务器:是前端web 服务器,用来接收客户端的请求。下载地址是http://httpd.apache.org/ (Windows版:httpd-2.2.22-win32-x86-no_ssl.msi)
    mod_jk.so:是tomcat Connector ,用于把apache 接收到的请求分发给tomcat 来处理。下载地址是http://www.fayea.com/apache-mirror//tomcat/tomcat-connectors/jk/binaries/windows/ JK要与Apache版本对应。JK 分为两个版本 1,x 和 2.x ,其中 2.x 并不是最新的版本,它是 JK 的另外一个分支,后不知何因没有继续开发,因此2.x 版本已经废弃。
    Tomcat :也是web 服务器,但在这里主要充当servlet 容器,用来处理jk 转发过来的请求。下载地址是http://tomcat.apache.org/
    安装 apache ,并把 mod_jk.2.0.55 解压后拷贝到 apache 安装目录(Apache_HOME)/modules 下面,其实modules 下面是apache 的各个功能模块,可插拔。
    安装各个tomcat 到不同的主机上。
    2、配置Apache_Home\conf\httpd.conf
    在httpd.conf文件的最后一行写入



include "C:\Program Files\Apache Software Foundation\Apache2.2\conf\mod_jk.conf"
    3、配置mod_jk.conf文件
    在Apache_Home\conf下建立mod_jk.conf文件。配置内容:



#加载mod_jk Module
LoadModule jk_module modules/mod_jk.so
# 配置 mod_jk
#加载集群中的workers
JkWorkersFile conf/workers.properties
#加载workers的请求处理分配文件
JkMountFile conf/uriworkermap.properties
#指定jk的日志输出文件
JkLogFile logs/mod_jk.log
#指定日志级别
JkLogLevel warn
#指定哪些请求交给tomcat处理,"controller"为在 workers.propertise里指定的负载分配控制器名
JkMount /*.* controller
    4、配置workers.propertise文件
    在Apache_Home\conf下建立workers.propertise文件。



#server 列表
worker.list=controller,tomcat1,tomcat2
#========tomcat1========
worker.tomcat1.port=8008 #ajp13 端口号,在tomcat下server.xml配置,默认8009
worker.tomcat1.host=localhost #tomcat的主机地址,如不为本机,请填写ip地址
worker.tomcat1.type=ajp13
worker.tomcat1.lbfactor=1 #server的加权比重,值越高,分得的请求越多
#========tomcat2========
worker.tomcat2.port=8009 #ajp13 端口号,在tomcat下server.xml配置,默认8009
worker.tomcat2.host=localhost #tomcat的主机地址,如不为本机,请填写ip地址
worker.tomcat2.type=ajp13
worker.tomcat2.lbfactor=1 #server的加权比重,值越高,分得的请求越多
#========controller,负载均衡控制器========
worker.controller.type=lb #server名为controller,用于负载均衡
worker.retries=3 #重试次数
worker.controller.balance_workers=tomcat1,tomcat2
#粘性Session(默认是打开的) 当该属性值=True(或1)时,代表Session是粘性的,即同一Session在集群中的同一个节点上处理,Session不跨越节点。在集群环境中,一般将该值设置为False
worker.controller.sticky_session=false
#设置用于负载均衡的server的session可否共享 有不少文章说设置为1是可以的,也有设置为0才可以的
#worker.controller.sticky_session=1
#worker.controller.sticky_session_force=1
#worker.status.type=status
    5、配置uriworkermap.properties文件
    在Apache_Home\conf下建立uriworkermap.properties文件



#所有请求都由controller这个server处理
/*=controller
#所有包含jkstatus请求的都由status这个 server处理
#/jkstatus=status
#这里的"!”是“非”的意思。
!/*.gif=controller
!/*.jpg=controller
!/*.png=controller
!/*.css=controller
!/*.js=controller
!/*.htm=controller
!/*.html=controller
    6、修改tomcat1_Home\conf\server.xml配置
    Starting Coyote HTTP/1.1 on http-8081 默认端口为8080,修改为8081。




    JK: ajp13 listening on /0.0.0.0:8009 修改端口必须与workers.propertise文件内worker.tomcat1.port=8009一致。




    以上为负载均衡配置完毕!接下来可以配置Tomcat集群和Session复制!
    需要添加的内容(这些代码在XML中都被注释掉了,把注释去掉,然后编辑即可):




...

















...


    Tomcat2的server.xml配置也做相应修改,因为本文测试使用同一台电脑,所以对应的微做修改端口。Tomcat分布于不同电脑上,不用改端口号。



...

...

...

...
  
    7、最后要tomcat支持session复制,必须在web.xml里面加上一个标签。





    注意session黏贴(共享)方面,如果session中存放的为javabean,javabean必须实现Serializable接口,如果没有实现会报错误 Exception thrown: class java.lang.IllegalArgumentException。
    8、测试
    在tomcat2\webapps下建立test文件夹,建立test.jsp文件




    启动Tomcat1、Tomcat2、Apache。浏览器中输入:http://localhost/test/test.jsp。不停刷新浏览器,可以在Tomcat1和2的控制台看到=====交替输出。
    结果:在不同的客户端发起请求,请求会被平均分配给tomcat。关闭其中一个tomcat 1,tomcat 1 原来处理的请求会被其他tomcat2 接收,如果此前被关闭的tomca 1t 的session 中存在信息, tomcat2 中tomcat1 的session 信息依然存在,表现为登录——tomcat 宕机——请求被转到另外一个tomcat ,并仍然处于登录状态。
  5、详细配置附录
    不同类型的worker,worker.controller.type配置:



ajp12 这种类型的worker 知道使用ajp12 协议把请求转向tomcat,最终它将被jk 使用,用来与tomcat 服务器交互。
ajp13 这种类型的worker 知道使用ajp13 协议把请求转向tomcat,最终它将被jk 使用,用来与tomcat 服务器交互。
jni   这种类型的worker 知道使用jni 协议把请求转向tomcat,最终它将被jk 使用,用来与tomcat 服务器交互。
lb    这种类型的worker 是负载均衡worker,他知道怎样提供轮询来分配请求。(常用)
status 这种类型的worker 负责管理负载均衡。
  

运维网声明 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-92595-1-1.html 上篇帖子: 实现Apache,Tomcat集群和负载均衡Session共用 下篇帖子: debian 安装svn apache 小记. AuthzSVNAccessFile 不生效问题.
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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