Apache2 + Tomcat 集群,Apache作为负载均衡
jopen
10年前
该集群为伪集群,实际应用的时候tomcat应该安装在不同的机器上,而不是同一台机器上
一.配置环境
操作系统:rhel5
服务器IP:192.168.93.43
jdk版本:1.6.0_20
apache 版本:httpd-2.2.16.tar.gz
tomcat 版本:apache-tomcat-5.5.30.tar.gz
jk版本:tomcat-connectors-1.2.30-src.tar.gz
3个安装包默认放在了usr/local目录下,用root用户下载
共一台机器,所以apache、jdk和2个tomcat都装在一台机器上了,一般情况是apache和jdk装在一台机器上,tomcat分别装在各个机器或者装同一台机器上。
二.安装
a) jdk安装,略。
b) apache安装
# cd /usr/local/
# mkdir apache
# tar xvfz httpd-2.2.16.tar.gz
# cd httpd-2.2.16
#./configure --prefix=/usr/local/apache --enable-modules=so --enable-so
配置安装路径信息等
# make
# make install
# cd /usr/local/apache/bin/
# ./apachectl configtest
若显示Syntax ok则表明安装成功,中间出现一些别的信息,如: httpd: Could not reliably determine the server's fully qualified domain name, using 192.168.93.43 for ServerName 可以忽略;
#./apachectl start
启动apache服务,浏览器中输入127.0.0.1看是否有it works
# ./apachectl stop
关闭服务
注:系统可能自带安装了Apache,如果不需要,可以先将自带的卸载掉后再安装,否则可能出现直接访问系统自带的Apache。
c) tomcat安装
# cd /usr/local/
# tar xvfz apache-tomcat-5.5.30.tar.gz
# mv apache-tomcat-5.5.30 /usr/local/tomcat 修改解压后的文件夹名字
# /usr/local/tomcat/bin/startup.sh
启动服务后,访问本机8080端口
# /usr/local/tomcat/bin/startup.sh /startup.bat
关闭服务
# /usr/local/tomcat/bin/shutdown.sh
# tail -f logs/catalina.out 查看tomcat的控制台输出
如果碰到tomcat关不完全等情况,执行如下操作
#ps -ef |grep tomcat 查看tomcat进程
#kill -9 pid 如果有,用kill;pid为进程号
d) jk安装
#cd /usr/local/
# tar xzvf tomcat-connectors-1.2.30-src.tar.gz
#cd tomcat-connectors-1.2.30-src/jk/native
#chmod 755 buildconf.sh
#./buildconf.sh
#./configure --with-apxs=/usr/local/apache/bin/apxs
#make
#make install
我安装好了之后,发现/usr/local/apache/modules/下已经有mod_jk.so了
注意先查看下,如果没有则执行下面的步骤
#cd /usr/local/ jakarta-tomcat-connectors- jk1.2.14-src/jk/native/apache-2.0/
#cp mod_jk.so /usr/local/apache/modules/
三.配置
a) httpd.conf配置
#vi /usr/local/apache/conf/httpd.conf
在文件的最尾部加上如下语句
# Load mod_jk
LoadModule jk_module modules/mod_jk.so
# Configure mod_jk
JkWorkersFile conf/workers.properties
JkLogFile logs/mod_jk.log
JkLogLevel info
转发过滤,将符合以下条件的请求发送到负载平衡器
JkMount /*.jsp loadbalancer
JkMount /servlet/* loadbalancer
JkMount /application/* loadbalancer
b) workers.properties 添加
#vi /usr/local/apache/conf/workers.properties 如果workers.properties不存在就表示新建该文件
内容如下:
worker.list=loadbalancer
worker.worker1.port=8009 worker1所在的端口
worker.worker1.host=192.168.93.43 worker1所在的IP
worker.worker1.type=ajp13
worker.worker1.lbfactor=1
worker.worker2.port=9009 worker2所在的端口
worker.worker2.host=192.168.93.43 worker2所在的IP
worker.worker2.type=ajp13
worker.worker2.lbfactor=1 #权量 数值越大,分配的机率就最小
worker.loadbalancer.type=lb
worker.loadbalancer.balanced_workers=worker1,worker2
worker.loadbalancer.local_worker_only=1
worker.loadbalancer.sticky_session=true
此处指定集群是否需要会话复制,如果设为true,则表明为会话粘性,不进行会话复制,当某用户的请求第一次分发到哪台Tomcat后,后继的请求会一直分发到此Tomcat服务器上处理;如果设为false,则表明需求会话复制。
worker.loadbalancer.sticky_session_force=true
如果上面的sticky_session设为true时,建议此处也设为true,此参数表明如果集群中某台Tomcat服务器在多次请求没有响 应后,是否将当前的请求,转发到其它Tomcat服务器上处理;此参数在sticky_session=true时,影响比较大,会导致转发到其它 Tomcat服务器上的请求,找不到原来的session,所以如果此时请求中有读取session中某些信息的话,就会导致应用的null异常。
c) server.xml配置
修改第一个tomcat的server.xml文件,修改过后的配置如下
<Engine name="Catalina" defaultHost="localhost" jvmRoute="worker1">
将Cluster标签对的注释去掉修改里面的
tcpListenAddress=”192.168.93.43”
其中第一个tomcat的端口为:8005、8080、8009
修改第二个tomcat的server.xml文件,修改过后的配置如下
<Engine name="Catalina" defaultHost="localhost" jvmRoute="worker2">
将Cluster标签对的注释去掉修改里面的
tcpListenAddress=”192.168.93.43”
其中第二个tomcat的端口为:9005、9080、9009
保存后重启tomcat检查是否正常