转自:http://pengranxiang.iteye.com/blog/1135072
目标:在同一台Linux服务器上安装 apache 和 两个 tomcat 的集群,tomcat解析所有页面和静态文件, apache 仅作代理,负责负载均衡。
1. 下载,安装 Apache
地址:http://mirror.bjtu.edu.cn/apache//httpd/httpd-2.2.19.tar.gz
- cd /usr/local/src/apache2 #进入下载目录
- wget http://mirror.bjtu.edu.cn/apache//httpd/httpd-2.2.19.tar.gz #下载源码
- tar -zxvf httpd-2.2.19.tar.gz #解压
- cd httpd-2.2.19 #进入解压后目录
- ./configure --prefix=/usr/local/apache2 #检测环境
- make #编译
- make install #安装
以上将软件安装在了 /usr/local/apache2 目录
2. 下载,安装 mod_jk
mod_jk 是用来连接 apache 和 tomcat 的模块
下载地址:http://archive.apache.org/dist/tomcat/tomcat-connectors/jk/source/jk-1.2.31/tomcat-connectors-1.2.31-src.tar.gz
- wget http://archive.apache.org/dist/tomcat/tomcat-connectors/jk/source/jk-1.2.31/tomcat-connectors-1.2.31-src.tar.gz
- tar -zxvf tomcat-connectors-1.2.31-src.tar.gz
- cd tomcat-connectors-1.2.31-src
- cd native
- ./configure --with-apxs=/usr/local/apache2/bin/apxs
- #with-apxs 是必选参数,用于指定apache服务器的apxs程序路径,在apache的bin目录下
- make #编译
我们需要的是mod_jk.so模块,所以不需要安装,经过以上步骤后,可以在 native/apache-2.0 目录下找到。
然后将 mod_jk.so 复制到 /usr/local/apache2/modules 目录下。
- cd tomcat-2.0
- cp mod_jk.so /usr/local/apache2/modules
3. 下载,安装 Tomcat
下载地址:http://mirror.bjtu.edu.cn/apache/tomcat/tomcat-7/v7.0.19/bin/apache-tomcat-7.0.19.tar.gz
- cd /usr/local/tomcat
- wget http://mirror.bjtu.edu.cn/apache/tomcat/tomcat-7/v7.0.19/bin/apache-tomcat-7.0.19.tar.gz
- tar -zxvf apache-tomcat-7.0.19.tar.gz
- mv apache-tomcat-7.0.19 apache-tomcat-7.0.19-1 #修改文件夹名字
- cp apache-tomcat-7.0.19-1 apache-tomcat-7.0.19-2 #复制一份,用于集群
因为,tomcat 是纯Java 编写,所以解压即可,无需安装。 当然前提是已经安装 JDK 才行。
这样 tomcat 目录下,就有两个 tomcat 服务器。 apache-tomcat-7.0.19-1 和 apache-tomcat-7.0.19-2 一下简称为 tomcat1, tomcat2.
4. 将连个 tomcat 服务器 同时启动,加载同一个Web应用
将Web应用的根目录放在:/var/webapp/Test/WebRoot 目录下
在 Tomcat1,Tomcat2 的 conf/Catalina/localhost 目录下分别创建文件 ROOT.xml
内容如下:
然后就可启动 Tomcat 了
进入 tomcat 的 bin 目录 执行: ./startup.sh
两个Tomcat同时启动时,会报错。 因为端口被占用。 所以要修改 server.xml
在 Tomcat2 的 server.xml 中修改。 要修改的端口号有三个
分别改为: 9005, 9080, 9009 后,就可以同时启动两个Tomcat了
此时两个Tomcat都可以单独访问了。
5. 通过 Apache 将两个Tomcat集群
修改 Apache 目录下 conf/httpd.conf 配置文件, 在文件的末尾增加以下内容
994行:在 httpd 中载入 mod_jk 模块
997行:指定负载均衡的配置文件为 conf/worker.propeties (与 httpd.conf 在同一个文件夹)
998行:指定mod_jk模块的 日志文件位置
999行:日志的级别
1000行:表示将 访问路径以 .jsp 结尾的请求,转交为Tomcat处理
1001行:表示将 访问路径以 .do 结尾的请求,转交为Tomcat处理
1002行:表示将 访问路径以 .action结尾的请求,转交为Tomcat处理
1003行:表示将 所有的访问请求都转交为Tomcat处理
下面是负载均衡的配置: worker.properties 内容。 关于此文件的全部设定选项和说明在刚刚解压的 mod_jk 的 conf 文件夹下面可以找到 worker.properties. 该文件中有详细说明
- worker.list=loadbalancer #定义负载均衡的名称
- worker.loadbalancer.type=lb #定义负载均衡的类型,为lb
- worker.loadbalancer.error_escalation_time=0 #切换错误状态时间
- worker.loadbalancer.max_reply_timeouts=10
- worker.loadbalancer.sticky_session=1 #1代表为true,0代表为false。
- #worker.loadbalancer.sticky_session_force=true
- worker.loadbalancer.balance_workers=lb1,lb2 #负载均衡的工作者名称
- worker.lb1.reference=worker.template #lb1参考worker.template工作模板
- worker.lb1.host=localhost #lb1的ip地址
- worker.lb1.port=8009 #lb1端口,这里是ajp端口,不是网站端口
- worker.lb1.activation=A #A:active模式 D:sticky模式 S:不使用
- worker.lb2.reference=worker.template
- worker.lb2.host=localhost
- worker.lb2.port=9009
- worker.lb2.activation=A
- worker.template.type=ajp13 #上面lb1,lb2参考下面的值worker.template,协议ajp13
- worker.template.socket_connect_timeout=5000 #套接字连接超时为5000毫秒,默认为0
- worker.template.socket_keepalive=true #开启保持为真,默认为false
- worker.template.ping_mode=A #使用cping/cpong模式,有C,P,I,A四个模式。A全选
- worker.template.ping_timeout=10000 #探测cping/cpong超时间默认10000毫秒
- worker.template.connection_pool_minsize=0 #连接池关闭最小时间
- worker.template.connection_pool_timeout=600 #连接池600秒
- worker.template.reply_timeout=300000 #答复超时300000毫秒
- worker.template.recovery_options=3 #重试次数
下面是网上找的关于 worker.loadbalancer.sticky_session 这个选项网上解释
1=true:假如A服务器接受了请求,以后的请求都会继续发给A服务器,B接受了请求一直发给B服务器。会话不会轮询,session保持很好,建议使用。
0=false:假如A服务器接受了请求,按F5再次刷新结果到了B服务器,再按一次又到了C服务器。会话会轮询,session保持不好不稳定,session复制给所有服务器,但是立马就断了。所以使用true比较多,我这里也设置了1。
总结:worker.balancer.sticky_session请求是发送给一台服务器(true),还是发送给多台服务器(false)。Session复制只与tomcat集群配置有关,与这个sticky无关。但是sticky会影响session复制。如果这个选项为真那么session保持良好,如果为假那么需要所有服务器复制session所以不稳定。
6. 修改Tomcat配置的 server.xml
Tomcat1 的 server.xml
- <Engine name="Catalina" defaultHost="localhost">
- 修改为:
- <Engine name="Catalina" defaultHost="localhost" jvmRoute="lb1">
Tomcat2 的 server.xml
- <Engine name="Catalina" defaultHost="localhost">
- 修改为:
- <Engine name="Catalina" defaultHost="localhost" jvmRoute="lb2">
jvmRoute 的值,需要与 worker.properties 中的对应的Tomcat名字设置一致
以上步骤完成后,启动 Tomcat1, Tomcat2, Aapche 就完成集群了。