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

[经验分享] Tomcat集群配置

[复制链接]

尚未签到

发表于 2015-8-9 09:26:04 | 显示全部楼层 |阅读模式
  摘要:学习配置单机多tomcat,配合使用apache httpserver管理tomcat集群。实现方式为JK和mod。Mod方法未测试,本文还需完善。部分内容为网上搜集整理。
  参考资料:
  http://blog.iyunv.com/hanghangaidoudou/article/details/8363442
  http://blog.iyunv.com/lifetragedy/article/details/7712691
  http://www.iyunv.com/leader_89/archive/2011/08/01/2109181.html
1 架构图
DSC0000.png
  图 Tomcat集群结构图
  Tomcat:Java服务器,servlet容器,主要负责动态页面(servlet,JSP),对静态资源(如HTML文件或图像文件)的处理速度,以及提供的Web服务器管理功能方面都不如其他专业的HTTP服务器,如IIS和Apache服务器,最好搭配Apache服务器使用。
  Apache:web服务器,主要负责静态页面,也支持PHP,实现JSP转发。
  Apache与tomcat之间的通信是专为其连接定制的AJP协议通信,能提供较高的通信速度和效率。
  AJP协议详细:http://baike.baidu.com/view/2176620.htm
  http://guojuanjun.blog.iyunv.com/277646/688559
2 实现方法
  Apache与tomcat通信有三种方式:
  1) Mod_jk
  2) Http_proxy
  3) AJP_proxy
  Mod_jk是最流行的方式,网上各种资料很全。
  参考资料可见: http://www.ibm.com/developerworks/cn/opensource/os-lo-apache-tomcat/
3 JK在windows下的实现负载均衡
  3.1准备
  1)Jdk1.6
  2)tomcat -6.0.29
  3)apache_2.2.4-win32-x86-no_ssl.msi
  4)mod_jk-1.2.31-httpd-2.0.52.so (建立Apache ServerTomcat之间的连接)
  说明:apache-server安装完成后,可以在浏览器中输入http://localhost/来测试,如果出现“It works!”则表示安装成功。apache-server我找了好久才找到一个windows的安装版。
  3.2配置
  1)http server配置
  http server共需配置三个地方:
  (1)修改httpd.conf 即启动配置文件
  (2)添加并修改workers.properties文件(我装的时候,conf目录下没有是自己新建的,有的同学可以直接修改)
  (3)修改conf/extra/httpd-vhosts.conf
  
  下面是详细配置信息
  l httpd.conf文件
  需要修改的地方有:
DSC0001.png
  图1 去掉proxy模块的注释
DSC0002.png
  图2 添加虚拟节点定义(我想把虚拟节点的定义单独列出来,免得httpd.conf太杂乱)
DSC0003.jpg
  图3 添加jk模块并制定日志设置信息
  
  l workers.properties文件
DSC0004.png
  图1 定义tomcat集群
  解析:
DSC0005.png
  表示接收http server转发请求的worker有controller,具体转发由controller控制
DSC0006.png
  定义controller的类型为负载均衡型,包括tomcat1,tomcat2,相互之间复制session
DSC0007.png
  定义tomcat1与http server通信端口为8009,host名字为localhost(如果是异机,改成其IP或主机名,未测试!!),通信协议为ajp13,负载均衡指数为1(数字越大,负载越大)
  
  l conf/extra/httpd-vhosts.conf
DSC0008.jpg
  图1 定义httpd中*:80虚拟主机设置
  解析:
DSC0009.png
  定义请求转向,一定要属于workers.properties中worker.list中的一项worker,此处为唯一worker---controller
DSC00010.png
  NameVirtualHost *:80和中 的*为当前服务器IP,如果有固定IP可以用IP把*替换掉。ServerName为域名,DocumentRoot填 ServerName上域名对应的根目录。
DSC00011.png
  设置对应路径访问权限,如果设置出错有可能出现403权限错误。
  
  2)tomcat配置
  因为我是本机启动两个tomcat,为避免端口被重复绑定,server.xml需要修改三个地方:(1)server端口 (2)connector端口(3)connector ajp端口(4)Engine名字(5)添加集群定义 (5)web.xml添加复制session 设置。配置如下:
  Tomcat1:
DSC00012.png
  图1 server端口(注意不要和tomcat2重复即可,以下都是)
DSC00013.jpg
  图2 connector端口
DSC00014.png
  图3 connector ajp端口
DSC00015.png
  图4 tomcat名字(注意要与workers.properties一致,否则无法转发)
DSC00016.jpg
  图5 添加集群定义(紧接着上图的Engine就行)
DSC00017.png
  图6 添加session复制(在webapp的工程WEB-INF目录web.xml结尾添加)
  Tomcat2:
DSC00018.png
  图1 server端口(注意不要和tomcat2重复即可,以下都是)
DSC00019.jpg
  图2 connector端口
DSC00020.png
  图3 connector ajp端口
DSC00021.png
  图4 tomcat名字(注意要与workers.properties一致,否则无法转发)
DSC00022.jpg
  图5 添加集群定义(紧接着上图的Engine就行)

  图6 添加session复制(在webapp的工程WEB-INF目录web.xml结尾添加)
  3.3使用感想
  现象1:有tomcat1,tomcat2,如果tomcat2死了后,session会复制到tomcat1上,能够继续访问,OK。图如下:
  现象2:如果tomcat2重新连上,http访问将一直在tomcat1上,而不会均衡到tomcat2上。似乎没有实现负载均衡,网上说的原因如下:请求并不会因为是tomcat2接收的请求就自动转发到tomcat2,而是继续在tomcat1执行。网上说这种情况是由于配置了jvmRoute所致,apache-server会根据session情况来进行路由,同一个session会转发给同一个服务器,还是感觉不对。
4 mod实现方法
  http://www.iyunv.com/luxh/archive/2012/11/25/2786475.html
  http://www.iyunv.com/leader_89/archive/2011/08/01/2109181.html
5 session复制小结
  tomcat集群的session复制有三种实现方式。一种就是sticky模式,即黏性会话模式;第二种就是session复制模式了;第三种借助于第三方软件。
  1)sticky模式
  利用负载均衡器的sticky模式的方式把所有同一session的请求都发送到相同的Tomcat节点。这样不同用户的请求就被平均分配到集群 中各个tomcat节点上,实现负载均衡的能力。这样做的缺点是没有灾难恢复的能力。一旦一个节点发生故障,这个节点上所有的session信息全部丢失;这种方式其实是由前端balancer实现的,基本不需要webServer做任何改动(只需要修改jvmRoute="tomcat1")同一用户同一session只和一个webServer交互,一旦这个webserver发生故障,本次session将丢失,用户不能继续使用。
  2)复制模式(上文中采用的方法)
  利用Tomcat session复制的机制使得所有session在所有Tomcat节点中保持一致。当一个节点修改一个session数据的时候,该节点会把这个 session的所有内容序列化,然后广播给所有其它节点。这样当下一个用户请求被负载均衡器分配到另外一个节点的时候,那个节点上有完备的 session信息可以用来服务该请求。这种做法的问题是对session哪怕有一点点修改,也要把整个sessions数据全部序列化 (serialize),还要广播给集群中所有节点,不管该节点到底需不需要这个session。这样很容易会造成大量的网络通信,导致网络阻塞。一般采 用这种方式,当Tomcat节点超过4个时候,整个集群的吞吐量就不能再上升了;
  此方式是通过tomcat本身提供的功能,只需要修改server.xml文件
(1)修改Engine节点信息:     
(2)去掉  的注释符   
(3)web.xml中增加
  3)Terracotta模式
  另一种方式就是利用开源软件Terracotta。Terracotta的基本原理是对于集群间共享的数据,当在一个节点发生变化的时 候,Terracotta只把变化的部分发送给Terracotta服务器,然后由服务器把它转发给真正需要这个数据的节点。这样对网络的压力就非常小, 各个节点也不必浪费CPU时间和内存进行大量的序列化操作。把这种集群间数据共享的机制应用在session同步上,相当于对tomcat第二种集群实现 机制进行了优化,既避免了对数据库的依赖,又能达到负载均衡和灾难恢复的效果。在对比测试中,采用Terracotta搭建Tomcat集群,节点达到8 个时候,整个集群的吞吐量还一直是线性增长的。
  4)三种模式比较
  sticky模式最大的缺点就是不支持failover,一旦某一个webServer发生故障则此节点上的session就会丢失,因此不建议使用。
  复制模式可以保证个别节点发生故障不丢失session,但是复制时需要序列化数据这会影响到系统的性能。另外性能随着服务器增加急剧下降,而且容易引起广播风暴。经测试当Tomcat节点超过4个时候,整个集群的吞吐量就不能再上升了。需要修改server.xml和web.xml文件。
  使用第三方软件Terracotta进行session同步,配置对原来的web应用完全透明,原有程序不用做任何修改。数据不需要序列化,也不占用webServer的内存,执行效率高。terracotta本身支持HA,增加了系统的稳定性。Terracotta是开源的,并且可以集成在很多主流的开源软件中,如Jetty、Tomcat、Spring、Geronimo和EHCache等。

运维网声明 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-96251-1-1.html 上篇帖子: Tomcat:Can't load IA 32-bit .dll on a AMD 64-bit platform问题的解决 下篇帖子: Tomcat 5如何配置
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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