apache2.2.21 + mod_jk1.2.32 + tomcat6.0.33 配置负载均衡

本文详细介绍了在Windows XP SP3环境下,通过Apache 2.2.21和Tomcat 6实现负载均衡与集群搭建的过程,包括配置Apache httpd.conf、虚拟主机、JkWorker配置文件,以及修改Tomcat server.xml来实现session复制和粘性会话。通过测试程序部署验证了配置的有效性。
系统环境:Windows XP SP3 ,jdk1.6.0_13
软件版本:httpd-2.2.21-win32-x86-openssl-0.9.8r.msi  apache-tomcat-6.0.33   tomcat-connectors-1.2.32-windows-i386-


httpd-2.2.x


我是在一台机器上作的测试,因为我完成了apache的负载均衡以及tomcat6的集群和session的复制,
需要修改到的地方可能比较多,先将配置列出如下: 


1. 修改apache的httpd.conf:


首先要load所需要的so文件,把下面几行前面的注释去掉. 
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


加入load连接器的配置
LoadModule jk_module modules/mod_jk.so
JkWorkersFile "conf\workers.properties" 
JkMount /*.jsp controller


去掉虚拟主机的注释
Include conf/extra/httpd-vhosts.conf


结尾加上负载均衡配置


<Location /server-status> 
SetHandler server-status 
Order Deny,Allow 
Deny from all 
Allow from all 
</Location> 
<Location /balancer-manager> 
SetHandler balancer-manager 
Order Deny,Allow 
Deny from all 
Allow from all 
</Location> 
ProxyRequests Off 
ProxyPass /test balancer://tomcatcluster/ stickysession=jsessionid nofailover=On 




<Proxy balancer://tomcatcluster> 
BalancerMember ajp://127.0.0.1:8009 loadfactor=1  route=tomcat1
BalancerMember ajp://127.0.0.1:9009 loadfactor=1  route=tomcat2
</Proxy> 
 
 
 
2. apache的httpd-vhosts.conf文件中加入: 




<VirtualHost *:80>
         ServerAdmin webmaster@163.com
         ServerName localhost
         ServerAlias localhost
         ProxyPass / balancer://tomcatcluster/ stickysession=jsessionid nofailover=On
         ProxyPassReverse / balancer://tomcatcluster/
</VirtualHost>


3.创建workers.properties文件


#========tomcat1========  
worker.tomcat1.port=8009         #ajp13 端口号,在tomcat下server.xml配  置,默认8009  
worker.tomcat1.host=localhost  #tomcat的主机地址,如不为本机,请填写ip地址  
worker.tomcat1.type=ajp13  
worker.tomcat1.lbfactor = 1   #server的加权比重,值越高,分得的请求越多  
  
#========tomcat2========  
worker.tomcat2.port=9009       #ajp13 端口号,在tomcat下server.xml配置,  
worker.tomcat2.host=localhost #tomcat的主机地址,如不为本机,请填写ip地址  
worker.tomcat2.type=ajp13  
worker.tomcat2.lbfactor = 1   #server的加权比重,值越高,分得的请求越多  
#========controller,负载均衡控制器========  
worker.controller.type=lb  
worker.controller.balanced_workers=tomcat1,tomcat2   #指定分担请求的tomcat  
worker.controller.sticky_session=false #worker.controller.sticky_session=1  


4.修改tomcat的server.xml:
 
除了把两个tomcat冲突的端口都改掉,还需要加入下的集群设置




  <Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat1"> --另一个为tomcat2        
 
  
      
         <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster" channelSendOptions="6"> 
       <!--  
        <Manager className="org.apache.catalina.ha.session.BackupManager" 
                 expireSessionsOnShutdown="false" 
                 notifyListenersOnReplication="true" 
                 mapSendOptions="6"/> 
         --> 
        <Manager className="org.apache.catalina.ha.session.DeltaManager" 
                expireSessionsOnShutdown="false" 
                notifyListenersOnReplication="true"/> 


        <Channel className="org.apache.catalina.tribes.group.GroupChannel"> 
            <Membership className="org.apache.catalina.tribes.membership.McastService" 
                        address="228.0.0.4" 
                        port="45564" 
                        frequency="500" 
                        dropTime="3000"/> 
            <Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver" 
                      address="auto" 
                      port="5001" 
                      selectorTimeout="100" 
                      maxThreads="6"/> 
            <Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter"> 
                    <Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/> 
            </Sender> 
            <Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/> 
            <Interceptor className="org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor"/> 
            <Interceptor className="org.apache.catalina.tribes.group.interceptors.ThroughputInterceptor"/> 
        </Channel> 
        <Valve className="org.apache.catalina.ha.tcp.ReplicationValve" 
               filter=".*\.gif;.*\.js;.*\.jpg;.*\.png;.*\.htm;.*\.html;.*\.css;.*\.txt;"/> 
       <!-- 
        <Valve className="org.apache.catalina.ha.session.JvmRouteBinderValve"/> 
        --> 
        <Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer" 
                  tempDir="/tmp/war-temp/" 
                  deployDir="/tmp/war-deploy/" 
                  watchDir="/tmp/war-listen/" 
                  watchEnabled="false"/> 
                  <!-- 
        <ClusterListener className="org.apache.catalina.ha.session.JvmRouteSessionIDBinderListener"/> 
        --> 
        <ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/> 
      </Cluster> 




5.webapps应用下web.xml配置




Webapps目录下的应用程序的web.xm中必须添加 
<distributable/> 此应用将与群集服务器复制Session 


配置完成,先启动所有tomcat服务器,最后启动apache2.2服务器.


6.下面jsp可以作为测试程序部署在tomcat1,tomcat2
<%@ page contentType="text/html; charset=GBK" %> 
<%@ page import="java.util.*" %> 
<html><head><title>Cluster App Test</title></head> 
<body> 
Server Info: 
<% 
out.println(request.getLocalAddr() + " : " + request.getLocalPort()+"<br>");%> 
<% 
  out.println("<br> ID " + session.getId()+"<br>"); 
  String dataName = request.getParameter("dataName"); 
  
  if (dataName != null && dataName.length() > 0) { 
     String dataValue = request.getParameter("dataValue"); 
     session.setAttribute(dataName, dataValue); 
  }  
  
  out.print("<b>Session 列表</b>");  
  
  Enumeration e = session.getAttributeNames(); 
  
  while (e.hasMoreElements()) { 
     String name = (String)e.nextElement(); 
     String value = session.getAttribute(name).toString(); 
     out.println( name + " = " + value+"<br>"); 
         System.out.println( name + " = " + value); 
   } 
%> 
  <form action="index.jsp" method="POST"> 
    名称:<input type=text size=20 name="dataName"> 
     <br> 
    值:<input type=text size=20 name="dataValue"> 
     <br> 
    <input type=submit> 
   </form> 
</body> 
</html> 


成功配置的结果是tomcat1,tomcat2的后台打印session内容相同,通过apache访问请求被分发。
一、安装Apache配置成功一个普通网站服务器 运行下载好的“apache_2.0.55-win32-x86-no_ssl.msi”,出现如下界面: 出现Apache HTTP Server 2.0.55的安装向导界面,点“Next”继续 确认同意软件安装使用许可条例,选择“I accept the terms in the license agreement”,点“Next”继续 将Apache安装到Windows上的使用须知,请阅读完毕后,按“Next”继续 设置系统信息,在Network Domain下填入您的域名(比如:goodwaiter.com),在Server Name下填入您的服务器名称(比如:www.goodwaiter.com,也就是主机名加上域名),在Administrator's Email Address下填入系统管理员的联系电子邮件地址(比如:yinpeng@xinhuanet.com),上述三条信息仅供参考,其中联系电子邮件地址会在当系统故障时提供给访问者,三条信息均可任意填写,无效的也行。下面有两个选择,图片上选择的是为系统所有用户安装,使用默认的80端口,并作为系统服务自动启动;另外一个是仅为当前用户安装,使用端口8080,手动启动。一般选择如图所示。按“Next”继续。] 选择安装类型,Typical为默认安装,Custom为用户自定义安装,我们这里选择Custom,有更多可选项。按“Next”继续 出现选择安装选项界面,如图所示,左键点选“Apache HTTP Server 2.0.55”,选择“This feature, and all subfeatures, will be installed on local hard drive.”,即“此部分,及下属子部分内容,全部安装在本地硬盘上”。点选“Change...”,手动指定安装目录。 我这里选择安装在“D:\”,各位自行选取了,一般建议不要安装在操作系统所在盘,免得操作系统坏了之后,还原操作把Apache配置文件也清除了。选“OK”继续。 返回刚才的界面,选“Next”继续。 确认安装选项无误,如果您认为要再检查一遍,可以点“Back”一步步返回检查。点“Install”开始按前面设定的安装选项安装。 正在安装界面,请耐心等待,直到出现下面的画面。 安装向导成功完成,这时右下角状态栏应该出现了下面的这个绿色图标,表示Apache服务已经开始运行,按“Finish”结束Apache的软件安装 我们来熟悉一下这个图标,很方便的,在图标上左键单击,出现如下界面,有“Start(启动)”、“Stop(停止)”、“Restart(重启动)”三个选项,可以很方便的对安装的Apache服务器进行上述操作。 好了现在我们来测试一下按默认配置运行的网站界面,在IE地址栏打“http://127.0.0.1”,点“转到”,就可以看到如下页面,表示Apache服务器已安装成功。 现在开始配置Apache服务器,使它更好的替我们服务,事实上,如果不配置,你的安装目录下的Apache2\htdocs文件夹就是网站的默认根目录,在里面放入文件就可以了。这里我们还是要配置一下,有什么问题或修改,配置始终是要会的,如图所示,“开始”、“所有程序”、“Apache HTTP Server 2.0.55”、“Configure Apache Server”、“Edit the Apache httpd conf Configuration file”,点击打开。 XP的记事本有了些小变化,很实用的一个功能就是可以看到文件内容的行、列位置,按下图所示,点“查看”,勾选“状态栏”,界面右下角就多了个标记,“Ln 78, Col 10”就表示“行 78,列 10”,这样可以迅速的在文件中定位,方便解说。当然,你也可以通过“编辑”,“查找”输入关键字来快速定位。每次配置文件的改变,保存后,必须在 Apache服务器重启动后生效,可以用前面讲的小图标方便的控制服务器随时“重启动”。 现在正式开始配置Apache服务器,“Ln 228”,或者查找关键字“DocumentRoot”(也就是网站根目录),找到如下图所示地方,然后将""内的地址改成你的网站根目录,地址格式请照图上的写,主要是一般文件地址的“\”在Apache里要改成“/”。 “Ln 253”,同样,你也可以通过查找“ “Ln321”,DirectoryIndex(目录索引,也就是在仅指定目录的情况下,默认显示的文件名),可以添加很多,系统会根据从左至右的顺序来优先显示,以单个半角空格隔开,比如有些网站的首页是index.htm,就在光标那里加上“index.htm ”文件名是任意的,不一定非得“index.html”,比如“test.php”等,都可以。 这里有一个选择配置选项,以前可能要配置,现在好像修正过来了,不用配置了,就是强制所有输出文件的语言编码,html文件里有语言标记(,这个就是设定文档语言为gb2312)的也会强制转换。如果打开的网页出现乱码,请先检查网页内有没有上述 html语言标记,如果没有,添加上去就能正常显示了。把“# DefaultLanguage nl”前面的“# ”去掉,把“nl”改成你要强制输出的语言,中文是“zh-cn”,保存,关闭。 好了,简单的Apache配置就到此结束了,现在利用先前的小图标重启动,所有的配置就生效了,你的网站就成了一个网站服务器,如果你加载了防火墙,请打开80或8080端口,或者允许Apache程序访问网络,否则别人不能访问。如果你有公网IP(一般ADSL或电话拨号上网的都是),就可以邀请所有能上网的朋友访问使用http://你的IP地址(IP地址查询可访问http://www.goodwaiter.com,查询内容内即是)你的网站了;如果你没有公网IP,也可以把内网IP地址告诉局域网内的其它用户,让他们通过http://你的内网IP地址,访问你的网站。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值