Nginx+LAT(Apache+tomcat)的实现和Apache反向代理和负载均衡tomcat的不同方式以及使用memcached保存tomcat的session会话
一.Nginx+LAT(Apache+tomcat)的环境结构;
1.Nginx +Apache实现负载均衡用户请求至tomcat,其中Nginx是负载均衡调度器,Apache和tomcat在同一台机器上,Apache将关于JSP的请求发送至tomcat。
2.实验结构图:

3.环境介绍,在两台CentOS7上都安装Tomcat和Apache,实现动态.jsp内容的请求。在一台CentOS6上安装LAMP实现静态内容加.php的请求。一台Nginx实现负载均衡调度,且实现session sticky。
二.Nginx+LAT的实现过程;
1.在CentOS7上安装Tomcat和Apache:
在CentOS7上Tomcat可以通过本地光盘镜像挂载安装。也可以通过源码安装,在安装tomcat之前要先安装好JDK环境。The Java Platform Standard Edition Development Kit (JDK) includesboth the runtime environment (Java virtual machine, the Java platform classesand supporting files) and development tools (compilers, debuggers,toollibraries and other tools).
在此讲述一下源码安装的过程:
a. 安装jdk,jdk的版本要使用稳定的版本;可以从官方下载rpm类型的jdk软件包进行安装;jdk-7u79-linux-x64.rpm
b. 安装好JAVA运行环境之后就可以安装tomcat:apache-tomcat-8.0.23.tar.gz
到此安装完成;只需运行catalina.sh start就可以启动tomcat
在CentOS7上使用yum 安装tomcat和Apache即可:yuminstall tomcat,yum install httpd会解决依赖的关系;
2.在安装好tomcat和Apache的主机上进行相关配置:(两个节点的配置相似只是部分主机名不同和测试页面不同)
在配置之前在/etc/hosts添加一下内容:
172.16.99.72node72.zkchang.com node72
172.16.99.71 node71.zkchang.com node71
并设置好主机名,关闭防火墙和selinux
a. 在tomcat上添加一虚拟主机,并提供测试页面;
在目录/etc/tomcat目录下编写service.xml文件;在<Engine> </Engine>中添加如下内容:
创建目录:
~]# mkdir /test/webapps/test1 –pv
webapps]# mkdir test1/{WEB-INF,MATE-INF,classes,lib} –pv
创建测试index.jsp网页页面:在/test/webapps/test1目录下创建文件index.jsp内容如下:
先测试一下tomcat是否正常运行:
b. 使用Apache反代tomcat,使tomcat不直接接收客户端的请求;
Apache可以通过mod_jk和mod_proxy模块跟tomcat整合,但是mod_proxy只有在Apache2.2.x系列的版本中才提供,Apache反向代理tomcat有三种种方法,一种是通过mod_proxy+mod_proxy_http
第二种是通过mod_proxy+mod_proxy_ajp.第三种通过mod_jk模块,但是mod_jk模块只支持ajp协议,所在tomcat的server.xml文件中要使用ajp协议。
查看当前Apache是否支持mod_proxy,mod_proxy_http,mod_proxy_ajp模块:
本次实验使用mod_proxy+mod_proxy_http进行反向代理后端的tomcat
编辑httpd的配置文件:
注释中心主机:
#DocumentRoot"/var/www/html"
打开IncludeOptional conf.d/*.conf此项
在/etc/httpd/conf.d/目录下创建一文件并添加如下内容:
另一台的tomcat(172.16.99.72)和Apache的配置和此节点的配置相似,只是相应的修改了主机名,以及测试内容不同。
启动httpd服务,在浏览器中进行测试:
3.在172.16.99.12(node12)上安装LAP,用于响应静态内容和.php的动态内容:
yum groupinstall" Server Platform Development" "Development tools"
a. 安装httpd:
安装apr和apr-util
安装httpd:
httpd安装完毕
b. 安装php:
解决依赖关系:
# yum -y install bzip2-devel libmcrypt-devel(要通过epel源下载)libxml2-devel
编译安装php-5.6.4.tar.xz
1.为服务提供配置文件:
# cp php.ini-production /etc/php.ini
2.编辑httpd的配置文件,是apache支持php
# vim /etc/httpd/httpd.conf
添加如下二行
AddTypeapplication/x-httpd-php .php
AddType application/x-httpd-php-source .phps
3.定位至DirectoryIndexindex.html
修改为: DirectoryIndex index.php index.html
c. 测试
在/usr/local/httpd/htdocs/目录下创建一文件index.php 内容为:
<?php
phpinfo();
?>
4.在172.16.99.10(node10)上安装nginx,实现对后端服务器的负载均衡:
Nginx安装使用的是yum安装,nginx的rpm安装包存在epel源上。也可以通过源码进行安装;
在安装和配置之前node10要能够访问两台tomcat的主机名,还要关闭防火墙和selinux。
Yum安装nginx;
在/etc/nginx/nginx.conf配置文件中添加如下内容:
在/etc/nginx/conf.d/default.conf的配置如:
启动nginx服务器,进行测试:
由于nginx的负载均衡调度算法为ip_hash,所以在第一访问之后,再次访问时会定向上次访问的节点上。
以下实验的配置都是在上述环境的基础实现的,也可重新配置实验环境
三.启动Manager功能;
由于是yum安装的tomcat,默认在安装完之后在/usr/share/tomcat/webapps/目录下不会有apache-tomcat的主页,需要安装以下两个包:yum install tomcat-admin-webapps tomcat-webapps。安装之后,会在/usr/share/tomcat/webapps/目录下生成以下目录:examples host-manager manager ROOT sample
由于上述试验中,在server.xml文件中把defaultHost定义为”node71.zkchang.com”,在此为虚拟机添加一个ip(#ip addr add 172.16.99.100/16 dev eth0:0),在server.xml文件中,把默认的<Hostname="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true">中的name=”localhost”修改为:Name=”172.16.99.100”。重新新启动tomcat服务。进行访问:
而后重启tomcat。
四.Apache使用mod_ajp模块和mod_proxy模块进行反向代理tomcat:
使用ajp协议方向代理tomcat其实很简单,只需在/etc/httpd/conf.d/proxy.conf添加如下内容即可:
重启httpd服务器;
上述指令说明:
ProxyPreserveHost{On|Off}:如果启用此功能,代理会将用户请求报文中的Host:行发送给后端的服务器,而不再使用ProxyPass指定的服务器地址。如果想在反向代理中支持虚拟主机,则需要开启此项,否则就无需打开此功能。
ProxyVia {On|Off|Full|Block}:用于控制在http首部是否使用Via:,主要用于在多级代理中控制代理请求的流向。默认为Off
ProxyRequests{On|Off}:是否开启apache正向代理的功能。在做反向代理时,必须关闭此项。
ProxyPassReverse:用于让apache调整HTTP重定向响应报文中的Location、Content-Location及URI标签所对应的URL,在反向代理环境中必须使用此指令避免重定向报文绕过proxy服务器
ProxyPass [path] !|url [key=value key=value ...]]:将后端服务器某URL与当前服务器的某虚拟路径关联起来作为提供服务的路径,path为当前服务器上的某虚拟路径,url为后端服务器上某URL路径。使用此指令时必须将ProxyRequests的值设置为Off。需要注意的是,如果path以“/”结尾,则对应的url也必须以“/”结尾,反之亦然。
ProxyPass后的参数:
loadfactor:用于负载均衡集群配置中,定义对应后端服务器的权重,取值范围为1-100
retry:当apache将请求发送至后端服务器得到错误响应时等待多长时间以后再重试。单位是秒钟。
如果Proxy指定是以balancer://开头,即用于负载均衡集群时,其还可以接受一些特殊的参数,如下所示:
lbmethod:apache实现负载均衡的调度方法,默认是byrequests,即基于权重将统计请求个数进行调度,bytraffic则执行基于权重的流量计数调度,bybusyness通过考量每个后端服务器的当前负载进行调度。
maxattempts:放弃请求之前实现故障转移的次数,默认为1,其最大值不应该大于总的节点数。
nofailover:取值为On或Off,设置为On时表示后端服务器故障时,用户的session将损坏;因此,在后端服务器不支持session复制时可将其设置为On。
stickysession:调度器的stickysession的名字,根据web程序语言的不同,其值为JSESSIONID或PHPSESSIONID。
上述指令除了能在banlancer://或ProxyPass中设定之外,也可使用ProxySet指令直接进行设置,如:
<Proxy balancer://hotcluster>
BalancerMember http://www1.lllkkk.com:8080 =1
BalancerMember http://www2.lllkkk.com:8080 loadfactor=2
ProxySet lbmethod=bytraffic
</Proxy>
五.实现Apache通过mod_proxy模块负载均衡后端的tomcat.并实现stickysession
实验通过172.16.99.71上的httpd负载均衡node71:172.16.99.72上和node71:172.16.99.71 上的tomcat;
在node71上:在/etc/httpd/conf.d/目录下编写proxybc.conf文件,添加如下内容:
重启httpd服务器即可。在这没有进行会话绑定,
进行会话绑定,bcproxy.conf的配置文件内容为:
六.memcached保存session会话
使用memcached保存tomcat的session会话:tomcat-session-memcached 。也就是使用session服务保存session会话.
在Nginx+LAT实验环境的基础上来实现tomcat的session保存
实现这一功能需要一个组件:memcached-session-manager.下载此组件并安装至各个tomcat节点的安装目录下的lib目录中。(node71,node72),下载memcached-session-manager-1.8.3.jar memcached-session-manager-tc7-1.8.3.jar这两个组件和安装时,要与你安装tomcat的版本保持一致:
由于是rpm安装的tomcat。Lib目录存在/usr/share/tomcat/lib/。将相关连的组件复制到此目录下:(两个tomcat 节点都需复制)
分别在node71:172.16.99.71 和node72:172.16.99.72上定义一个用于测试的context容器,并在此容器中创建一个会话管理器:
Yum 安装memcached服务,并启动;(另外一节点同样)
两个节点上的的Apache上面的配置如下:
Node71和node72:配置文件:(做反向代理tomcat),此处配置和上述的Nginx+LAT实验环境上的Apache的配置相同:
使用node10 :172.16.99.10做nginx对后端tomcat的负载均衡:
在/etc/nginxnginx.conf文件中的http段内定义upstream:
在/etc/nginx/conf.d/default.conf中定义对upstream的引用;
检测nginx的配置文件是否有错,(nginx -t)无错启动Ngnix服务器。
重新启动tomcat和Apache进行测试:
发现会话并没有发生变化,在node72上使用memcached-tool 127.0.0.1查看缓存:
到此是基于memcached缓存tomcat的session会话的实现