<Engine name="Standalone" defaultHost="localhost" jvmRoute="tomcat2"> 将jvmRoute不同的tomcat给不同的名字这个名字将在apache中被使用来ajp的通信.(例如我的例子中tomcat1,tomcat2) 最后去掉这行的注释: <Connector port="8009" enableLookups="false" redirectPort="8443" protocol="AJP/1.3" /> 上面的配置就完成了,然后你就可以在两个tomcat做测试: 首先给tomcat1,tomcat2下面分别访问一个test应用程序分别放一个写session的jsp文件,和读取session的jsp文件. 然后依次启动tomcat1,tomcat2(这两个不需要严格启动次序),apache. 再访问http://localhost:8209/test/SetSession.jsp 然后访问http://localhost:8209/test/ReadSession.jsp, http://localhost:8409/test/ReadSession.jsp 访问的结果应该一样,就可以说明tomcat1,tomcat2的session同步成功. 继续测试负载均衡,将readSession.jsp文件的显示样式分别改成红色和蓝色背景. 访问http://localhost:8080/test/ReadSession.jsp 多刷新几次,应该可以看到不同的现实背景,说明负载均衡成功. 然后随便关闭一个tomcat,访问上面的地址应该也成功,然后启动关闭的tomcat集群应该也可以热挂载成功! 如果你在配置中遇到什么问题,或配置好后遇到问题,可以和我联系zhdf@msn.com,或者直接留言,如上面文章有什么错误之处请指正,谢谢! 补充一点,在linux下的安装: root登录后顺序执行下列命令 1.解压 tar xvzf httpd-2.2.6.tar.gz cd httpd-2.2.6 2.安装apr cd srclib/apr ./configure --prefix=/data/httpd/apr make make install 3.安装apr-util # cd ../apr-util/ # ./configure --prefix=/data/httpd/apr-util --with-apr=/data/httpd/apr # make # make install # cd ../../ 4.安装apache 编译为插件模式:{#./configure --prefix=/data/httpd/apache --enable-so --enable-mods-shared="proxy proxy_http proxy_ftp proxy_connect headers"} 编译到内核(目前采用这个) #./configure --prefix=/data/httpd/apache --enable-so --enable-rewrite=share --enable-proxy=share --enable-proxy-ajp=share \ --enable-proxy-balancer=share --with-apr=/data/httpd/apr --with-apr-util=/data/httpd/apr-util # make # make install #/data/httpd/apache/bin/httpd -l //看看是否有proxy.c,proxy-ajp.c,proxy-balancer.c这3个模块 如果有这3个模块证明proxy-ajp模块安装成功,可以进行与tomcat的结合了 可以进行与tomcat的结合了。 # vi /data/httpd/apache/conf/httpd.conf 把"#include conf/extra/httpd-vhosts.conf" 前面的"#"去掉然后编辑 vi /usr/local/apache/conf/extra/httpd-vhosts.conf <VirtualHost 192.168.101.3:8111> ServerAdmin zhdf@msn.com ServerName localhost:8111 ServerAlias www.rymall.cn ErrorLog logs/rymall.cn-error_log CustomLog logs/rymall.cn-access_log common <Proxy balancer://tomcatcluster> BalancerMember ajp://127.0.0.1:8009 route=tomcat1 BalancerMember ajp://127.0.0.1:8019 route=tomcat2 BalancerMember ajp://127.0.0.1:8029 route=tomcat3 </Proxy> <Location /> ProxyPass balancer://tomcatcluster/ lbmethod=byrequests stickysession=JSESSIONID nofailover=Off timeout=5 maxattempts=3 ProxyPassReverse balancer://tomcatcluster/ </Location> </VirtualHost> 然后先启动tomcat,再启动apache # /data/tomcat..../bin/startup.sh # /data/httpd/apache/bin/apachctl start | |
|
所谓负载均衡(loadbalance)所指的是,在服务器端短时间内获得大量的请求,单一服务器无法在一个较短的时间内响应这些请求, 此时服务器需要一个机制,请求按照多个服务器不同的负载能力,把这些请求合理的分配。 集群(cluster)的作用则是在多个服务器之间共享用户信息,资源等。 关于集群的优点不多说了,直接开始主题,怎样配置一个tomcat的集群. apache2.2以上的版本对ajp的链接器而且性能比原来的jk有的大的提升所以推荐使用ajp 先下载安装apache2.2.3(目前最新版),httpd.conf增加如下配置,去掉注释就行了 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配置下面增加如下的配置 ProxyPass / balancer://tomcatcluster/ lbmethod=byrequests stickysession=JSESSIONID nofailover=Off timeout=5 maxattempts=3 ProxyPassReverse / balancer://tomcatcluster/ <Proxy balancer://tomcatcluster> BalancerMember ajp://localhost:8209 route=tomcat1 BalancerMember ajp://localhost:8409 route=tomcat2 </Proxy> 注意我这里的localhost:8209,localhost:8409 是两个我本地两个tomcat的运行端口tomcat1,tomcat2是我本地tomcat的jvmRoute的配置下面我会说明,在修改配置的时候tomcat有4个端口需要修改分别是主server运行端口,http服务运行端口,ajp运行端口,集群接受session运行端口. 下载安装各个tomcat,我是本机运行了多个tomcat也可以分多个机器每个运行一到多个tomcat. 在tomcat的配置文件/conf/server.xml中去掉Cluster节点的注释(这个Cluster是用来做session同步的保证多个tomcat能达到session同步),这里注意一下,如果是一台机器运行多个tomcat请更改下 <Receiver className="org.apache.catalina.cluster.tcp.ReplicationListener" tcpListenAddress="auto" tcpListenPort="4004" tcpSelectorTimeout="100" tcpThreadCount="6"/> 的tcpListenPort端口保证tomcat接受数据运行在不同的端口. 下面的节点请不要修改: <Membership className="org.apache.catalina.cluster.mcast.McastService" mcastAddr="228.0.0.4" mcastPort="45564" mcastFrequency="500" mcastDropTime="3000"/> 如果你需要配置不同的集群,比如tomcat1,tomcat2运行为一个集群,tomcat3,tomcat4运行在第二个集群请修改mcastAddr和mcastPort只要这两个参数一样会被认为在同个集群下,session会被同步. tomcat的session同步集群配置最后一点配置就是在需要session同步的web应用的配置文件web.xml中增加如下的配置(红色部分)例子: <?xml version="1.0" encoding="ISO-8859-1"?> <web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" version="2.4"> <display-name>Welcome to Tomcat</display-name> <description> Welcome to Tomcat1 </description> <distributable/> </web-app> 剩下的就是让apache与tomcat通信的ajp的配置了: 去掉<Engine name="Standalone" defaultHost="localhost" jvmRoute="jvm1"> 这行的注释将原来的<Engine name="Catalina" defaultHost="localhost">这行注释起来. <!-- You should set jvmRoute to support load-balancing via AJP ie :--> | |
|
注意编码问题在tomcat server.xml 加上 URIEncoding="GBK" | |
|
ProxyPass / balancer://tomcatcluster/ lbmethod=byrequests stickysession=JSESSIONID nofailover=Off timeout=5 maxattempts=3 |