日期:2014-05-16  浏览次数:20703 次

Apache + Tomcat + Linux 集群和均衡负载 (Session 同步复制) 配置实践指南

?? Apache + Tomcat + Linux 集群和均衡负载 (Session 同步复制) 配置实践指南

??? 经过我的多次测试实践,在linux和window下测试通过,win的比较简单,因为在默认的情况下,组播就已经打开。

??? 1 在linux 下同一台服务器上测试通过(注意端口不要冲突。特别要注意那个tcpListenPort=”4001″ )

??? 2 在window下的同一台服务器上测试通过,注意要点同上

??? 3 window下多台不同主机上测试通过,没有什么好注意点,可以完全备份一个tomcat

??? 4.linux多台不同tomcat服务器上测试通过。这个也是最后实现,最实际的方案。(一般不用在win下部署tomcatweb应用。呵呵。我觉得)

??? 这里讲下第四中情况

??? 先讲一下环境:都是在Red Hat Linux AS4上测试通过

??? Apache:ip:192.168.1.11 (一台) 版本:2.0/2.2 (做均换负载服务器)

??? Tomcat:ip1:192.168.1.12 ip2:192.168.1.13 (两台) 版本:5.0、5.5 (web应用的Real Server)

??? Jdk:版本1.5 安装在 192.168.1.12 和192.168.1.13上的tomcat服务器上

??? 安装tomcat和apache ,在这里就不讲了。

??? 软件都可以在www.apache.org 的网站上找到(apache,tomcat,mod_jk)

??? 1.下载mod_jk.so 文件放到apache 下的modules下

??? 地址:http://apache.mirror.phpchina.com/tomcat/tomcat-connectors/jk/binaries/ 请选择正确的操作系统和Apache的版本。

??? 2.在apache的conf下建立文件workers.properties

??? 添加内容:

??? #

??? # workers.properties

??? #

??? # list the workers by name

??? worker.list=tomcatlb, status

??? # localhost server 1

??? # ------------------------

??? worker.tomcat12.port=8009

??? worker.tomcat12.host=192.168.1.12

??? worker.tomcat12.type=ajp13

??? worker.tomcat12.lbfactor=1

??? worker.tomcat12.connection_pool_timeout=750

??? worker.tomcat12.socket_keepalive=0

??? worker.tomcat12.socket_timeout=300000

??? worker.tomcat12.connect_timeout=10000

??? worker.tomcat12.reply_timeout=330000

??? # localhost server 3

??? # ------------------------

??? worker.tomcat13.port=8009

??? worker.tomcat13.host=192.168.1.13

??? worker.tomcat13.type=ajp13

??? worker.tomcat13.lbfactor=1

??? worker.tomcat13.connection_pool_timeout=750

??? worker.tomcat13.socket_keepalive=0

??? worker.tomcat13.socket_timeout=300000

??? worker.tomcat13.connect_timeout=10000

??? worker.tomcat13.reply_timeout=330000

??? worker.tomcatlb.type=lb

??? worker.retries=3

??? worker.tomcatlb.balanced_workers=tomcat12,tomcat13

??? worker.tomcatlb.sticky_session=1

??? worker.status.type=status

??? 3.在conf下添加一个mod_jk.conf文件

??? LoadModule??? jk_module? modules/mod_jk.so

??? #configure mod_jk

??? JkWorkersFile conf/workers.properties

??? JkLogFile logs/mod_jk.log

??? JkLogLevel debug
4.增加一个虚拟机配置文件vhosts.conf (这个不是必须的,可以将JkMount 的写其他的配置文件中)

??? ServerAdmin webmaster@dummy-host.example.com

??? DocumentRoot /data/google

??? ServerName my.linuxcoffee.org

??? ErrorLog logs/my.linuxcoffee.org-error_log

??? CustomLog logs/my.linuxcoffee.org-access_log common

??? DirectoryIndex index.htm? index.html

??? JkMount /*.jsp tomcatlb

??? JkMount /*.action tomcatlb

??? JKMount /jkstatus status

??? 4.修改conf下的httpd.conf文件加上

??? Include conf/vhosts.conf

??? Include conf/mod_jk.conf

??? 5.配置tomcat

??? 讲Cluster 前的注释去掉,启用tomcat集群功能。

??? 一般不需要修改什么东西,但在我这边,两台linux的tomcat就是死活找不到node,而同样的配置文件在window下的跑得很是正常。

??? 有个东西要说明下,因为tomcat的session同步功能需要用到组播,windows默认情况下是开通组播服务的,但是linux默认情况下并没有开通,可以通过指令打开route add -net 224.0.0.0 netmask 240.0.0.0 dev eth0,如果需要服务器启动时即开通组播需在/etc/sysconfig/static-routes文件内加入eht0 net 224.0.0.0 netmask 240.0.0.0。具体组播概念请查阅CCNP相关内容。

??? 可以通过netstate -g 来查看组播状态,也可以在route -e 命令中看到

??? 原来一直提示这个问题

??? 信息: Manager [/clusterapp]: skipping state transfer. No members active in cluster group.

??? 最后测试只要修改在Cluster之间的一段代码

??? Receiver

??? className="

??? org.apache.catalina.cluster.tcp.ReplicationListener"

??? tcpListenAddress="auto"

??? tcpListenPort="40