基于Apache做为Tomcat前端的架构实现反向代理&&负载均衡

一、连接器介绍
1、Tomcat连接器架构
基于Apache做为Tomcat前端的架构来讲,Apache通过mod_jk、mod_jk2或mod_proxy模块与后端的Tomcat进行数据交换。而对Tomcat来说,每个Web容器实例都有一个Java语言开发的连接器模块组件,在Tomcat6中,这个连接器是org.apache.catalina.Connector类。这个类的构造器可以构造两种类别的连接器:HTTP/1.1负责响应基于HTTP/HTTPS协议的请求,AJP/1.3负责响应基于AJP的请求。但可以简单地通过在server.xml配置文件中实现连接器的创建,但创建时所使用的类根据系统支持APR(Apache Portable Runtime)而有所不同。APR是附加在提供了通用和标准API的操作系统之上一个通讯层的本地库的集合,它能够为使用了APR的应用程序在与Apache通信时提供较好伸缩能力时带去平衡效用。
注意: mod_jk2模块目前已经不再被支持了,mod_jk模块目前还apache被支持,但其项目活跃度已经大大降低。因此,目前更常用的方式是使用mod_proxy模块。

2、连接器协议
Tomcat的Web服务器连接器支持两种协议:AJP(Apache JServ Protocol)和HTTP,它们均定义了以二进制格式在Web服务器和Tomcat之间进行数据传输,并提供相应的控制命令。
AJP协议: AJP是面向数据包的基于TCP/IP的协议,它在Apache和Tomcat的实例之间提供了一个专用的通信信道。目前正在使用的AJP协议的版本是通过JK和JK2连接器提供支持的AJP13,它基于二进制的格式在Web服务器和Tomcat之间传输数据,而此前的版本AJP10和AJP11则使用文本格式传输数据。它主要有以下特征:

  • 在快速网络有着较好的性能表现,支持数据压缩传输;
  • 支持SSL,加密及客户端证书;
  • 支持Tomcat实例集群;
  • 支持在apache和tomcat之间的连接的重用;

HTTP协议:使用HTTP或HTTPS协议在Web服务器和Tomcat之间建立通信,此时,Tomcat就是一个完全功能的HTTP服务器,它需要监听在某端口上以接收来自于前端服务器的请求。

3、Tomcat的3种HTTP连接器
基于Java的HTTP/1.1连接器Coyote:
Tomcat6默认使用的连接器;它是Tomcat作为standalone模式工作时所用到的连接器,可直接响应来自用户浏览器的关于JSP、servlet和HTML的请求;此连接器是一个Java类,定义在server.xml当中,默认使用8080端口;
Java开发的高性能 HTTP/1.1连接器NIO:
它支持非阻塞式IO和Comnet,在基于库向tomcat发起请求时,此连接器表现不俗;但其实现不太成熟,有严重bug存在;
C/C++开发的 HTTP/1.1连接器native APR:
在负载较大的场景中,此连接器可以提供非常好的性能;APR即Apache Portable Runtime,它是一个能让开发者采用与平台无关的风格的方式来开发C/C++代码本地库。它能够很好的跨Windows, Linux和Unix平台工作。
启用APR连接器的条件:

  • 将连接器的protocol属性设定org.apache.coyote.http11.Http11AprProtocol;
  • APR的库文件已经在系统库文件的搜索路径内;

native APR从三个主要方面优化了系统性能并提升了系统的伸缩能力:

  • 使用sendfile()内核模式调用发送大的静态文件;
  • 仅使用一个native code保持大量的连接;
  • 使用能够加速SSL请求处理的OpenSSL本地代码;

连接器知识扩展
http://sishuok.com/forum/blogPost/list/4082.html
http://blog.sina.com.cn/s/blog_64a52f2a0101g3sq.html
下面以Tomcat 8为例实现简单反向代理与负载均衡的实验
这里写图片描述
二、在后端两个节点上安装tomcat
1、使用管理机在两个节点上安装好tomcat,tc2先配置好留着在后面配置负载均衡中使用

[root@DQ ~]# vim instaltc.sh 
[root@DQ ~]# ansible tomcat -m copy -a "src=/root/instaltc.sh dest=/root/"
[root@DQ ~]# ansible tomcat -m shell -a "sh /root/instaltc.sh"

说明:由于在oracle官网下载jdk前需要手动接受 Oracle Binary Code License Agreement for Java SE,使用wegt在脚本中下载JDK时不方便,因此下面的脚本基于/usr/lcoal/src已经下载好jdk的二进制包的前提,此外,由于此前我已经10.33.100.22这台主机上配置好tomcat,为了方便,输出JAVA_HOME和CATALINA_HOME到环境变量的脚本就从10.33.100.22上直接复制了
这里写图片描述
2、配置Tomcat1,添加一个新的Host,并修改引擎中的默认主机为新增的Host

[root@tc1 ~]# vim /usr/local/tomcat/conf/server.xml 

这里写图片描述
此处省去N行默认配置
Host组件是位于Engine容器中用于接收请求并进行相应处理的主机或虚拟主机
Context在某些意义上类似于apache中的路径别名,一个Context定义用于标识tomcat实例中的一个Web应用程序
这里写图片描述
path:相对于web服务器根路径而言的URI;如果为空“”,则表示为此webapp的根路径;如果context定义在一个单独的xml文件中,此属性不需要定义;
docBase:存放相应web应用程序的位置;也可以使用相对路径,起始路径为此Context所属Host中appBase定义的路径;切记,docBase的路径名不能与相应的Host中appBase中定义的路径名有包含关系,比如,如果appBase为deploy,而docBase绝不能为deploy-bbs类的名字;
reloadable:是否允许重新加载此context相关的web应用程序的类;默认为false;
3、检查语法,创建Host中定义的web应用程序的路径,并在该路径下提供测试页面,而后启动tomcat

[root@tc1 ~]# catalina.sh configtest
[root@tc1 ~]# mkdir -p /web/webapps/
[root@tc1 ~]# vim /web/webapps/index.jsp
[root@tc1 ~]# catalina.sh start

测试页面/web/webapps/index.jsp
这里写图片描述
这里写图片描述
4、将Tomcat1上的配置文件复制到Tomcat2上,稍作修改提供不同的测试页面,方便后面测试负载均衡效果,后测试Tomcat2能否正常访问

[root@tc1 ~]# cd /usr/local/tomcat/conf/
[root@tc1 conf]# scp server.xml 10.33.100.13:/usr/local/tomcat/conf/ 
[root@tc1 conf]# cd /web/webapps/
[root@tc1 webapps]# scp index.jsp 10.33.100.13:/web/webapps/

5、访问测试页面以确保服务正常启动
这里写图片描述
三、在ansible管理机上编译安装Apache
1、确保已准备好编译环境并解决了依赖关系,这里我只给出了apr和httpd的安装过程;编辑脚本源码安装apr和apr-util,目前对应的最新的版本是1.5.2和1.5.4;apr-util是apr的工具库,其可以让程序员更好的使用apr的功能;获取源码包http://apr.apache.org/

[root@DQ ~]# vim instalapr.sh 
[root@DQ ~]# sh !$  

instaltc.sh
这里写图片描述
2、编辑脚本源码安装apache,安装完成后将apache目录/bin下二进制程序输出到环境变量;提供SysV服务脚本,赋予其执行权限;修改httpd的主配置文件,设置其Pid文件的路径 ;将其添加至服务列表,设置开机自动启动,上述具体步骤可参见http://blog.csdn.net/celeste7777/article/details/47018865,这里不再赘述

[root@DQ ~]# vim instalhttpd.sh 
[root@DQ ~]# sh !$  

instalhttpd.sh
这里写图片描述
四、配置apache通过mod_proxy模块与Tomcat连接;实现反向代理
1、检测当前的apache是否支持mod_proxy、mod_proxy_http、mod_proxy_ajp和proxy_balancer_module(实现Tomcat集群时用到)等模块:
这里写图片描述
如果不支持,在配置文件httpd.conf中取消相应的模块前的注释,即可加载:

LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so
LoadModule proxy_ajp_module m
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值