日期:2014-05-17  浏览次数:21163 次

windchill交流第十三篇:Windchill9下Apache&Tomcat负载平衡的集群配置
我是一个伪中立球迷,本周两场欧冠却让我热血澎湃,虽然皇马和巴萨的先后败北让人略感遗憾。但铁血拜仁值得尊敬和支持,切尔西的铁桶阵很成功!
周日的西班牙国家德比巴萨输的太傻。

进行集群配置的目的是为了提高Windchill系统Web端相关功能的执行效率和的用户访问速度。
但是tom猫终归只是一只小猫,再强也不会变成一只老虎。在优化系统配置的同时我们更需要优化自己开发的程序,使其高效、健壮。
ps:复杂程序或大数据量的交互操作建议将程序切换到MethodServer去执行,既在代码中使用RemoteMethodServer.getDefault.invoke(xxx);
实现该功能需要同时配置Apache和Tomcat,本文在Windchill9.1M060环境下以同时运行3个Tomcat为例,下面逐一介绍。
一、复制并修改Tomcat的启动和停止路径
分别重命名为Tomcat2,Tomcat3,首先修改Tomcat的启动和关闭命令执行文件里的Tomcat路径。
修改{Tomcat_home}/bin目录里的以下四个文件里的CATALINA_HOME变量,改为Tomcat2/Tomcat3
setenv CATALINA_HOME "d:\ptc\Windchill_9.1\Tomcat"
wttomcat_start.bat
wttomcat_start,
wttomcat_stop.bat
wttomcat_stop
二、配置Apache
1、找到并打开${Apache_home}\conf\httpd.conf,启用以下module(去掉默认配置前的“#”)
LoadModule proxy_module modules/mod_proxy.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.so
LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
LoadModule proxy_balancer_module modules/mod_proxy_balancer.so

2、找到并打开${Apache_home}\conf\extra\ajpWorkers.conf,修改默认的负载平衡的配置
修改前(示例):
<Proxy balancer://ajpWorker>

    BalancerMember ajp://pdmtest.com:8010 min=16 max=80 smax=40 ttl=900 keepalive=Off timeout=90000 retry=1 flushpackets=on
  
</Proxy>

修改后(示例):
<Proxy balancer://ajpWorker>

    BalancerMember ajp://pdmtest.com:8010 min=16 max=80 smax=40 ttl=900 keepalive=Off timeout=90000 retry=1 flushpackets=on  route=jvm1
     BalancerMember ajp://pdmtest.com:8011 min=16 max=80 smax=40 ttl=900 keepalive=Off timeout=90000 retry=1 flushpackets=on  route=jvm2
    BalancerMember ajp://pdmtest.com:8012 min=16 max=80 smax=40 ttl=900 keepalive=Off timeout=90000 retry=1 flushpackets=on  route=jvm3
</Proxy>

ajpWorker是AJP工作器的唯一标识,在之后Apache的配置中,也需要一一对应。
这里是对实现AJP协议的连接器(Tomcat)进行负载平衡的配置,如果连接器在不同主机上,那端口号可以相同,否则必须修改端口号使其唯一,此文讲述的是通常情况,也就是多个Tomcat安装在同一台物理主机上,后面所叙述的端口修改都是基于这类情况。
值得注意的是,8010、8011、8012是3个Tomcat的访问端口,route是指定每个连接器的标识符,必须唯一,后面Tomcat的配置会说明如何使用。
可以按照上述格式,定义多个参与负载平衡的连接器。
3、找到并打开conf\extra\httpd-vhosts.conf,清空默认文件内容,增加以下内容替换默认的虚拟主机配置
<VirtualHost *:80>
    ServerAdmin webmaster@${mail_host}
    ServerName ${host}
    ServerAlias ${host}
    ProxyPass / balancer://ajpWorker/ stickysession=jsessionid nofailover=On
    ProxyPassReverse / balancer://ajpWorker/
</VirtualHost>

注意:这里的ajpWorker与第2步<Proxy>里指定的相同。
4\找到并打开conf\extra\app-Windchill-AJP.conf,这里定义了请求转发的核心代码
系统默认内容
<IfModule mod_proxy_ajp.c>
  ProxyPassMatch ^(/Windchill/((?i).*\.jsp(.*)|servlet/.*|.*\.jar))$ balancer://ajpWorker$1 nocanon
</IfModule>

balancer://后面的ajpWorker需修改为与第2、第3步配置的名称相同。
三、配置Tomcat
打开{Tomcat}/conf/server.xml,进行以下配置:
1、修改3个Tomcat的Server port值分别为8006,8007,8008
<Server port="8006" shutdown="SHUTDOWN">

2、修改3个Tomcat的Connector port值分别为8010,8011,8012,需与前面Apache(2.2)里配置的端口相同。
    
<Connector port="8012" channelSocket.maxPort="-1" redirectPort="8443" 
               protocol="AJP/1.3" tomcatAuthentication="false" enableLookups="false" maxPostSize="-1"
               useBodyEncodingForURI="true" URIEncoding="UTF-8" backlog="0"