高性能Web服务之Httpd+Tomcat实现负债均衡反向代理实现

高性能Web服务之Httpd+Tomcat实现负债均衡反向代理实现,第1张

高性能Web服务之Httpd+Tomcat实现负债均衡反向代理实现

作为前端反向代理,httpd有两种选择。一种是在“proxy_module”的代理框架下使用“proxy_http_module”和“proxy_ajp_module”两个代理模块,独立工作。另一种是使用“mod_jk”模块实现httpd对后端tomcat的反向代理。


以下架构部署httpd+tomcat来实现方向代理:

反向代理系统架构计划如下:

服务器角色
服务器IP
。 httpd
eth0:172.16.100.1/16eth1:192.168.56.10/24
Tomcat1
eth0:192.168.56.11/24

Tomcat2 eth0:192.168.56.12/24 statichost(httpd)
eth0:192.168.56.13/24

配置过程如下:

Tomcat服务安装配置:

(1)安装JDK

# rpm -ivh jdk-7u9-linux-x64.rpm  --安装JDK后生成的文件 # cd /usr/java/ ; ll total 4 lrwxrwxrwx  1 root root   16 Sep 27 09:09 default -> /usr/java/latest drwxr-xr-x 10 root root 4096 Sep 27 09:09 jdk1.7.0_09 lrwxrwxrwx  1 root root   21 Sep 27 09:09 latest -> /usr/java/jdk1.7.0_09 --配置JDK环境变量 # vim /etc/profile.d/java.sh export JAVA_HOME=/usr/java/jdk1.7.0_09 export PATH=$PATH:$JAVA_HOME/bin --执行使环境变量生效 # . /etc/profile.d/java.sh --测试如下: # java -version java version "1.7.0_45"        --jdk版本 OpenJDK Runtime Environment (rhel-2.4.3.3.el6-x86_64 u45-b15) OpenJDK 64-Bit Server VM (build 24.45-b08, mixed mode)

(2)安装tomcat

--解压tomcat包至/usr/local下 # tar xf apache-tomcat-7.0.67.tar.gz -C /usr/local/ # cd /usr/local/ # ln -sv apache-tomcat-7.0.67 tomcat --配置tomcat环境变量 # vim /etc/profile.d/tomcat.sh export CATALINA_HOME=/usr/local/tomcat export PATH=$PATH:$CATALINA_HOME/bin # . /etc/profile.d/tomcat.sh --测试如下: # catalina.sh version Using CATALINA_BASE:   /usr/local/tomcat Using CATALINA_HOME:   /usr/local/tomcat Using CATALINA_TMPDIR: /usr/local/tomcat/temp Using JRE_HOME:        /usr/java/jdk1.7.0_09 Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar Server version: Apache Tomcat/7.0.67 Server built:   Dec 7 2015 13:07:11 UTC Server number:  7.0.67.0 OS Name:        Linux OS Version:     2.6.32-431.el6.x86_64 Architecture:   amd64 JVM Version:    1.7.0_09-b05 JVM Vendor:     Oracle Corporation --为tomcat提供srv启动脚本 # vim /etc/init.d/tomcat #!/bin/sh # Tomcat init script for Linux. #  # chkconfig: 2345 96 14 # description: The Apache Tomcat servlet/JSP container. # JAVA_OPTS='-Xms64m -Xmx128m' JAVA_HOME=/usr/java/latest CATALINA_HOME=/usr/local/tomcat export JAVA_HOME CATALINA_HOME case $1 in start)   $CATALINA_HOME/bin/catalina.sh start;; stop)   $CATALINA_HOME/bin/catalina.sh stop;; restart)   $CATALINA_HOME/bin/catalina.sh stop   sleep 2   $CATALINA_HOME/bin/catalina.sh start;; *)   echo "Usage: `basename $0` {start|stop|restart}"   exit 1   ;; esac # chmod +x /etc/init.d/tomcat # chkconfig --add tomcat # service tomcat start --检查tomacat默认监听端口如下所示: # ss -tunlp | grep java tcp    LISTEN     0      100                   :::8080                 :::*      users:(("java",19525,42)) tcp    LISTEN     0      1       ::ffff:127.0.0.1:8005                 :::*      users:(("java",19525,47)) tcp    LISTEN     0      100                   :::8009                 :::*      users:(("java",19525,43))

tomcat添加虚拟主机(tomcat1和tomcat的配置步骤相同)

# vim /usr/local/tomcat/conf/server.xml 在server------>service--------->engine中定义  <Host name="www.samlee.com"  appBase="/web"        --在Host中定义主机名、根目录位置             unpackWARs="true" autoDeploy="true">   <Context path="" docBase="/web/ROOT" reloadable="true" />   --定义虚拟路径,此处为空即没有指定,文档目录   <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"    prefix="samlee_access_log." suffix=".txt"    pattern="%h %l %u %t &quot;%r&quot; %s %b" />    --定义虚拟主机的日志信息   </Host>     <Engine name="Catalina" defaultHost="www.samlee.com" >  --再此出将默认虚拟主机更改为自己定义的主机 --创建网站主目录  # mkdir -pv  /web/ROOT/{lib,classes,WEB-INF}  --创建tomcat所需要的目录

建立测试访问测试页面:

# vim /web/ROOT/index.jsp <%@ page language="java" %> <html>   <head><title>TomcatA</title></head>   <body>     <h1><font color="red">TomcatA </font></h1>     <table align="centre" border="1">       <tr>         <td>Session ID</td>     <% session.setAttribute("abc","abc"); %>         <td><%= session.getId() %></td>       </tr>       <tr>         <td>Created on</td>         <td><%= session.getCreationTime() %></td>      </tr>     </table>   </body> </html


访问测试如下:



httpd服务安装配置:

系统环境:

# cat /etc/issue CentOS release 6.5 (Final) Kernel \r on an \m # uname -r 2.6.32-431.el6.x86_64

httpd版本和模块检查:

# rpm -q httpd httpd-2.2.15-29.el6.centos.x86_64 # httpd -M | grep proxy Syntax OK  proxy_module (shared)             --反向代理主模块  proxy_balancer_module (shared)     proxy_ftp_module (shared)  proxy_http_module (shared)        --http协议的反向代理模块  proxy_ajp_module (shared)         --ajp协议的反向代理模块  proxy_connect_module (shared)

配置为使用mod_proxy反向代理后端tomcat

第一种方式:http模式

# vim /etc/httpd/conf.d/mod_proxy.conf ProxyVia on ProxyRequests off ProxyPreserveHost on ProxyPass / http://192.168.56.11:8080/ ProxyPa***everse / http://192.168.56.11:8080/ <Location />   Order Allow,Deny   Allow from all </Location>

第二种方式:ajp模式

# vim /etc/httpd/conf.d/mod_proxy.conf ProxyVia on ProxyRequests off ProxyPreserveHost on ProxyPass / ajp://192.168.56.11:8009/ ProxyPa***everse / ajp://192.168.56.11:8009/ <Location />   Order Allow,Deny   Allow from all </Location>

配置完成后,重新启动httpd服务:

# service httpd restart

访问内容如下:



使用mod_proxy和负载平衡配置反向代理到后端tomcat

第一种方式:http模式

# vim /etc/httpd/conf/httpd.conf  #DocumentRoot "/var/www/html" --将此行注释掉,使用虚拟主机实现 # vim /etc/httpd/conf.d/mod_http.conf  <Proxy balancer://webcluster>  --定义集群名称   BalancerMember http://192.168.56.11:8080 loadfactor=1 --添加集群节点,loadfactor代表权重   BalancerMember http://192.168.56.12:8080 loadfactor=1   ProxySet lbmethod=byrequests  --负载均衡的调度方法 </Proxy>   NameVirtualHost *:80  \\启用虚拟主机 <VirtualHost *:80>   ServerName www.samlee.com   ProxyVia on  --添加via信息   ProxyRequests off  --关闭正向代理   ProxyPreserveHost on   --支持虚拟合租记   ProxyPass  / balancer://webcluster stickysession=JESSIONID  --将httpd请求至后端主机   ProxyPa***everse / balancer://webcluster stickysession=JESSIONID--将httpd请求至后端主机 </VirtualHost>

第二种方式:ajp模式

# vim /etc/httpd/conf/httpd.conf  #DocumentRoot "/var/www/html" --将此行注释掉,使用虚拟主机实现 # vim /etc/httpd/conf.d/mod_http.conf  <Proxy balancer://webcluster>  --定义集群名称   BalancerMember ajp://192.168.56.11:8009 loadfactor=1 --添加集群节点,loadfactor代表权重   BalancerMember ajp://192.168.56.12:8009 loadfactor=1   ProxySet lbmethod=byrequests  --负载均衡的调度方法 </Proxy>   NameVirtualHost *:80  \\启用虚拟主机 <VirtualHost *:80>   ServerName www.samlee.com   ProxyVia on  --添加via信息   ProxyRequests off  --关闭正向代理   ProxyPreserveHost on   --支持虚拟合租记   ProxyPass  / balancer://webcluster stickysession=JESSIONID  --将httpd请求至后端主机   ProxyPa***everse / balancer://webcluster stickysession=JESSIONID--将httpd请求至后端主机 </VirtualHost> <Location /lbmanager>        --定义反向代理监控页面         SetHandler balancer-manager </Location> ProxyPass /lbmanager !

访问内容如下:


以上参数说明:

proxypass{On|Off|Full|Block}

用于控制在http首部是否使用Via:,主要用于在多级代理中控制代理请求的流向。默认为off,即不启用此功能,On表示每个请求和响应报文均添加Via:,Full表示每个Via:行都会添加当前Apache服务器版本号信息;Block表示每个代理请求中的Via:都会被移除 代理请求{On|Off}

是否开启Apache正向代理功能;启用此项时是为了代理http协议必须启用mod_proxy_http模块。同时,如果为Apache设置了proxypass,则必须将ProxyRequests设置为Off ProxyPreserveHost{On|Off}

如果启用此功能,代理会将用户请求报文中的Host:行发送给后端的服务器,而不再使用ProxyPass指定的服务器地址。如果想在反向代理中支持虚拟主机,则需要开启此项,否则就无须打开此功能 ProxyPass[path]!|url[key=valuekey=value..]

后端服务器url与作为用于提供服务的路径的当前服务器的虚拟路径相关联,该路径是当前服务器上的虚拟路径,且该url是后端服务器上的URL路径。请注意,如果path以“/”结尾,则相应的url也必须以“/”结尾,反之亦然。

mod_proxy模块在2.1版之后支持与后端服务器的连接池功能,连接是按需创建的,可以保存在连接池中以备后用。大型连接池或其他设置可以通过在ProxyPass中使用key=value来定义。您也可以使用密码集定义。的常用键如下:

min 连接池的最小容量。该值与实际的连接数无关,只表示/[k0/]之间要初始化的最小连接池大小 。 最大

连接池的最大容量,每个MPM都有自己独立的容量;其值与MPM本身无关,如prefork的总是为1,而其他的则取决于TheradsPerChild指令的值 loadfactor 在负载均衡集群配置中用于定义后端服务器的权重,取值范围为1-100 重试 当apache向后端服务器发送请求并得到错误响应时,请等待几次,然后重试。以秒为单位 如果代理指定balacner://的开头,也就是说,它还可以接受一些用于负载平衡的特殊参数,如下所示: lbmethod

apache实现负载均衡的调度算法,默认为byrequests,即基于权重将统计请求个数进行调度,bytraffic则执行基于权重的流量计数调度,bybusyness通过考量每个后端服务器的当前负载均衡进行调度 maxattempts 放弃请求前的故障转移次数默认为1,最大值不应大于汇总点数 无故障转移

取值为On或Off,设置On时表示后端服务器故障时,用户的session将损坏;因此在后端服务器不支持session复制时可将其设置为On stickysession 计划程序的粘性会话的名称。根据web程序的语言,它的值是jssessionid或PHPSESSIONID


使用mod_jk反向代理和负载平衡配置到后端tomcat

安装mod_jk

# yum -y groupinstall "Development Tools" "Server Platfrom Development"  --安装编译环境 # yum -y install httpd-devel  --安装httpd开发包 -安装tomcat-connectors连接工具 # tar xf tomcat-connectors-1.2.41-src.tar.gz -C /usr/src/ # cd /usr/src/tomcat-connectors-1.2.41-src/native/ # ./configure --with-apxs=`which apxs` # make && make install

确认httpd的mod_jk模块是否编译成功。

# ls -l /usr/lib64/httpd/modules/mod_jk.so  -rwxr-xr-x 1 root root 1215715 Oct  6 17:14 /usr/lib64/httpd/modules/mod_jk.so

按如下方式配置mod_jk配置文件:

# vim /etc/httpd/conf.d/mod_jk.conf LoadModule jk_module modules/mod_jk.so              --装载mod_jk模块 JkWorkersFile /etc/httpd/conf.d/workers.properties  --指明运行时配置的文件的位置 JkLogFile log/mod_jk.log                            --指定log位置的路径 JkLogFile debug                                     --指定日志级别,根据需求自定义 JkMount /* WebCluster                               --将所有httpd请求转发至后端WebCluster集群中,名称自定义 JkMount /jk_status statA                            --启用jk状态监控页面

使用mod_jk定义后端主机和群集配置:

# vim /etc/httpd/conf.d/workers.properties worker.list=WebCluster,statA            --定义工作列表 worker.TomcatA.type=ajp13               --定义后端TomcatA主机类型 worker.TomcatA.port=8009                --定义后端主机的监听端口 worker.TomcatA.host=192.168.56.11       --定义后端主机地址 worker.TomcatA.lbfactor=5 worker.TomcatB.type=ajp13 worker.TomcatB.port=8009 worker.TomcatB.host=192.168.56.12 worker.TomcatB.lbfactor=5 worker.WebCluster.type=lb                --定义WebCluster组的类型 worker.WebCluster.sticky_session=0       --定义WebCluster集群会话类型为0代表关闭会话保持,为1反之 worker.WebCluster.balance_workers=TomcatA,TomcatB  --将后端主机TomcatA,TomcatB加入至WebCluster组中 worker.statA.type=status                 --定义statA状态页面的类型 type有三种类型: ajb13:用于负载调度 status:tomcat自身所带的监控页面,类似于httpd的status lb:集群类型

修改tomcat主配置文件,在引擎中修改如下:

tomcat节点:      <Engine name="Catalina" defaultHost="www.samlee.com" jvmRoute="TomcatA"> \\添加jvmRoute指令 tomcat节点     <Engine name="Catalina" defaultHost="www.samlee.com" jvmRoute="TomcatB"> \\添加jvmRoute指令    --重启tomcat服务 # service tomcat restart

最后,重新启动httpd服务:

# service httpd restart

访问内容如下:

请参见jk状态监控页面:







欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/778345.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-03
下一篇 2022-05-03

发表评论

登录后才能评论

评论列表(0条)

保存