资源预览内容
第1页 / 共7页
第2页 / 共7页
第3页 / 共7页
第4页 / 共7页
第5页 / 共7页
第6页 / 共7页
第7页 / 共7页
亲,该文档总共7页全部预览完了,如果喜欢就下载吧!
资源描述
Apache-Tomcat负载平衡配置方法 配置原因为了提高系统的高可用性及系统性能,我们常常会用到负载平衡,下面我们介绍一个经常用到的架构,使用Apache对Tomcat进行负载平衡的方法。系统架构图如Error! Reference source not found.所示:图 1 负载均衡系统架构图配置方案主机Apache作为前端负载平衡服务器,对用户请求进行分配,由后端不同的Tomcat服务器最终处理请求。其中根据侧重点的不同,可以有两种不同的配置:增加系统可用性。针对这一需求,可以维持三台Tomcat之间Session的同步,确保三台Tomcat服务器中任何两台党机都不影响系统运行,提高系统的可用性。但三台Server间Session的同步将消耗系统性能,并且每台Server都需要单独保持所有Session,对Server的内存有较高要求,且对系统性能提高不大。提高系统性能。在负责负载平衡的Apache主机上记录每一请求的Session ID及回应这一Session的Tomcat Server的对应关系,在下一个请求到来时,先判断是否有Session ID,如果有,表明为已有连接,则查找响应Tomcat Server,并转发请求;如果没有Session ID,则表明为新建连接,可根据Tomcat Server状态分配一个Tomcat Server响应请求,并记录Session ID与Tomcat Server关系。这样则不需要在三台Tomcat Server间同步Session,且可由三台Tomcat Server分担全部负荷,但是,党一台Server党掉以后,该Server所对应的连接将得不到响应,直到超时并丢失Session,对系统的可用性有影响。这里主要针对提高系统性能的方面进行负载均衡的配置。配置过程软件准备 Apache 2.2 : http:/httpd.apache.org/download.cgi,下载msi安装程序,选择no ssl版本 Tomcat 6.0 : http:/tomcat.apache.org/download-60.cgi,下载Tomcat 6.0.18 zip文件软件安装 把Apache安装为运行在80端口的Windows服务,安装成功后在系统服务列表中可以看到Apache2.2服务。对于已安装IIS的机器,在启动 Apache服务之前必须首先停止IIS Admin服务,不然会因为端口冲突而无法启动。服务启动后在浏览器中输入http:/localhost进行测试,如果能看到一个It works!的页面就代表Apache已经正常工作了。 解压tomcat zip文件到两个文件夹,分别为t1和t2,以下均以t1和t2代表两个tomcat服务器。配置JAVA_HOME和CLASSPATH系统环境变量,分别启动t1和t2,确保tomcat可用,然后关闭tomcat。 配置过程本文仅为讲解配置过程,Apache和tomcat均工作在同一台机器上。实际部署时没有任何限制,Apache和单个tomcat可以分别部署在不同的服务器上。Apache配置 Apache 2.2集成了mod_jk功能,相对于1.3版本,不需要再进行繁琐的worker.properties配置,配置过程大幅简化。 首先,在Apache安装目录下找到conf/httpd.conf文件,以文本编辑器打开。a) 去掉以下文本前的注释符(#)以便让Apache在启动时自动加载代理(proxy)模块。 LoadModule proxy_module modules/mod_proxy.so LoadModule proxy_ajp_module modules/mod_proxy_ajp.so LoadModule proxy_balancer_module modules/mod_proxy_balancer.so LoadModule proxy_connect_module modules/mod_proxy_connect.so LoadModule proxy_ftp_module modules/mod_proxy_ftp.so LoadModule proxy_http_module modules/mod_proxy_http.sob) 向下拉动文档找到节点,在DirectoryIndex index.html后加上index.jsp,这一步只是为了待会配置完tomcat后能看到小猫首页,可以不做。c) 继续下拉文档找到Include conf/extra/httpd-vhosts.conf,去掉前面的注释符。 用文本编辑器打开conf/extra/httpd-vhosts.conf,配置虚拟站点,在最下面加上 ServerAdmin 管理员邮箱 ServerName 域名(没有可用IP地址代替) ServerAlias localhost ProxyPass / balancer:/cluster/ stickysession=jsessionid nofailover=On ProxyPassReverse / balancer:/cluster/ ErrorLog logs/lbtest-error.log CustomLog logs/lbtest-access.log common a) balancer:/是告诉Apache需要进行负载均衡的代理;b) cluster是集群名,可以随意取;c) 两个日志引擎ErrorLog负责记录错误,CustomLog负责记录所有的http访问以及返回状态,日志名可以自己取,取为lbtest。httpd-vhosts.conf配置 完毕, 回到httpd.conf,在文档最下面加上 ProxyRequests Off BalancerMember ajp:/127.0.0.1:8009 loadfactor=1 route=jvm1 BalancerMember ajp:/127.0.0.1:9009 loadfactor=1 route=jvm2 a) ProxyRequests Off 是告诉Apache需要使用反向代理b) 用于配置工作在tomcat集群中的所有节点,这里的cluster必须与上面的集群名保持一致。c) Apache通过ajp协议与tomcat进行通信,ip地址和端口唯一确定了tomcat节点和配置的ajp接受端口。d) loadfactor是负载因 子,Apache会按负载因子的比例向后端tomcat节点转发请求,负载因子越大,对应的tomcat服务器就会处理越多的请求,如两个tomcat都 是1,Apache就按1:1的比例转发,如果是2和1就按2:1的比例转发。e) route参数对应后续tomcat配置中的引擎路径 (jvmRoute)。 重启Apache服务,如果此时访问http:/localhost/将会返回503错误,打开刚才配置的错误日志logs/lbtest-error.log,可以看到错误原因是因为后台服务器没有响应,因为此时tomcat尚未配置和启动。 Tomcat配置 分别打开t1和t2的server.xml配置文件,对于t1,尽量采用默认的设置,而对t2作较大改动以避免与t1冲突。如果t2和t1不在同一台服务器上运行,对于端口就不需做改动。 配置关闭端口,找到,t1不变,把t2改为9005。 配置Connector的端口,找到non-SSL HTTP/1.1 Connector,即tomcat单独工作时的默认Connector,保留t1默认配置,在8080端口侦听,而把t2设置为在9080端口侦听。 往下找到AJP 1.3 Connector,这是tomcat接收从Apache过来的ajp连接请求时使用的端口,保留t1默认设置,把t2端口改为9009。a) 注意,这里的端口对应 Apache httpd.conf中BalancerMember中配置的ajp连接端口。 向下配置引擎,找到,去掉这段或改为注释,a) 把上方紧挨的注释符去掉,b) 对于t2,去掉注释符并把jvm1改为jvm2。这里的jvmRoute对应Apache httpd.conf中BalancerMember中配置的route参数。 找到,打开注释,这里的配置是 为了可以在集群中的所有tomcat节点间共享会话(Session)。 server.xml的配置修改完毕,下一步需要对具体的应用进行配置。在webapps目录下新建test目录,在test目录下新建test.jsp文件,代码如下: Cluster App Test Server Info: % out.println(request.getLocalAddr() + : + request.getLocalPort()+);% % out.println( ID + session.getId()+); String dataName = request.getParameter(dataName); if (dataName != null & dataName.length() 0) String dataValue = request.getParameter(dataValue); session.setAttribute(dataName, dataValue); out.print(Session 列表);Enumeration e = session.getAttributeNames(); while (e.hasMoreElements() String name = (String)e.nextElement(); String value = session.getAttribute(name).toString(); out.println( name + = + value+); System.out.println( name + = + value); %
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号