今天在真实的服务器上测试通过,这也算修改的第另需要说明的是现在网上以讹传讹的文章太多,这篇文章有时间我会持续更新的,大家暂时就不要转了。目前没做session复制,因为发觉这个架构的适用性不如nginx,session复制考虑用nginx来做。近期一直在研究nginx,发现其负载均衡强大而简单,优点如下:①实现了可弹性化的架构,在压力增大的时候可以临时添加tomcat服务器添加到这个架构里面去;②upstream具有负载均衡能力,可以自动判断下面的机器,并且自动踢出不能正常提供服务的机器;③session复制产生的问题用nginx的ip_hash也很容易解决。
所需软件
apache-tomcat-6.0.18.tar.gz
jdk-1_5_0_17-linux-i586.bin
tomcat-connectors-1.2.27-src.tar.gz
httpd-2.2.11.tar.gz
网络拓补:在两台机器上做apache + tomcat 的负载均衡:计算机apache上同时Apache+tomcat(tomcat1:192.168.19.199)和tomcat2(tomcat2:192.168.19.81)在tomcat1上安装apache + jdk + tomcat + tomcat-connectors ,在tomcat2上安装 jdk+tomcat;tomcat1做均衡并提供服务;tomcat1上apache网页文件目录和tomcat网页文件目录要指向同一个目录
一、测试环境及软件安装:
linux 2.6 内核 centos 5.2
本例二台tomcat 不在同一机器
先安装了所需的程序库,因服务器只提供apache+tomcat服务,所以只安装gcc yum -y install gcc
下载源码包:
apache2 和tomcat5都可以在apache.org上下载
tomcat5需要JDK1.5的版本。
JK本文用的源码包tomcat-connectors
Apache 安装:
# tar zxvf httpd-2.2.11.tar.gz
#cd httpd-2.2.11
# ./configure --prefix=/usr/local/apache2 --enable-modules=so --enable-so
# make && make install
/usr/local/apache2/bin/apachectrl start
看到apache就配置成功了
JDK的安装
#chmod 755 jdk-1_5_0_17-linux-i586.bin
#./jdk-1_5_0_17-linux-i586.bin
# mv jdk-1_5_0_17 /usr/local/
到此JDK已经安装完成
到/usr/bin目录下,把原用的java,javac文件删除:
#rm -rf java
#rm -rf javac
在/usr/bin 下建立 软连接 java
# ln -s /usr/local/jdk-1_5_0_17/bin/java /usr/bin/java
# ln -s /usr/local/jdk-1_5_0_17/bin/javac /usr/bin/javac
# java –version
# javac -version
java version "1.4.2_08"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.2_08-b03)
Java HotSpot(TM) Client VM (build 1.4.2_08-b03, mixed mode)
为了方便下在的工作建立两个软链接:
ln -s /usr/local/jdk-1_5_0_17 /usr/local/jdk
ln -s /usr/local/jdk-1_5_0_17/jre /usr/local/jre
Tomcat的安装
#tar -zxvf apache-tomcat-6.0.18.tar.gz
# mv apache-tomcat-6.0.18 /usr/local/tomcat
设置环境变量: vim /etc/rc.d/rc.local,以追加的形式添加如下内容
JAVA_HOME=/usr/local/jdk
export JAVA_HOME
JRE_HOME=/usr/local/jre
export JRE_HOME
CLASSPATH=/usr/local/tomcat/common/lib/:/usr/local/jdk/lib:/usr/local/jre/lib
export CLASSPATH
PATH=$PATH:/usr/local/tomcat/bin/:/usr/local/apache/bin:/usr/local/jdk/bin:/usr/local/jre/bin
export PATH
TOMCAT_HOME=/usr/local/tomcat
export TOMCAT_HOME
重启服务器,启动tomcat以检查是否存在错误:
#cd /usr/local/tomcat/bin
#./startup.sh
http://IP地址:8080 可以看到猫头:)成功了。
在另一台机器上也安装tomcat 并配置好。
JK 安装 (整合apache tomcat)
# tar zxvf tomcat-connectors-1.2.27-src.tar.gz
#cd tomcat-connectors-1.2.27-src/native
# ./configure --with-apxs=/usr/local/apache2/bin/apxs --with-java-home=/usr/local/jdk
# make && make install
在/usr/local/apache2/modules/ 下会产生mod_jk.so
修改apache配置文件:
LoadModule jk_module modules/mod_jk.so
JkWorkersFile /usr/local/tomcat/conf/jk/workers.properties JK配置文件负载的配置
JkLogFile /usr/local/tomcat/logs/mod_jk.log 相关日志的设置
JkLogLevel info 日志的级别
JkMount /*.jsp controller 将jsp的请求转发给 controller(负载均衡控制器)
修改DoucmentRoot 雝omcat的目录一致。
本文修改为:/usr/local/tomcat/webapps/
<Directory "/usr/local/tomcat/webapps">
Options Indexes FollowSymLinks
AllowOverride none
Order allow,deny
Allow from all
</Directory>
即开放/usr/local/tomcat/webapps的权限,让允许所有人访问,我忽视了这个细节问题,浪费了二个下午,大家请注意这点,这步一定记得要做噢,tomcat1做到这步时,其实已经完成了apache+tomcat的整合,如果排障时可测试下直接输入http://192.168.19.199/test/print.jsp能不能直接运行jsp程度
二、调度器JK的配置
建立JK配置文件:
#vi /usr/local/tomcat/conf/jk/workers.properties
workers.java_home=/usr/local/jdk #指定jdk的目录
ps=/
worker.list=controller #指定负载名,这个可以随便起,与下面的 worker.controller.type=lb要对应
#========tomcat1======== 第一台tomcat的配置
worker.tomcat1.port=8009
worker.tomcat1.host=localhost #这里也可以写IP
worker.tomcat1.type=ajp13
worker.tomcat1.lbfactor=1 #权量 数值越大,分配的机率就最小
#========tomcat2===========
worker.tomcat2.port=8009
worker.tomcat2.host=192.168.19.81 (tomcat2的IP)
worker.tomcat2.type=ajp13
worker.tomcat2.lbfactor=1
#========controller,负载均衡器=======
worker.controller.type=lb
worker.controller.balance_workers=tomcat1,tomcat2 # server.xml配置文件里的jvmRoute="tomcat1"指定的名字
worker.controller.sticky_session=1
注意事项:mcastAddr="224.0.0.1" 这主广播地址因此需要开启网卡组播功能
route add -net 224.0.0.0 netmask 240.0.0.0 dev eth0分别在各机器上运行,为了让服务器每次启动均生效,建议写入/etc/rc.d/rc.local
三、测试tomcat的负载均衡
tomcat1:在webapps 下新建test 目录
目录下建WEB-INF目录,再建web.xml文件
<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/j2eehttp://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
version="2.4">
<display-name>TomcatDemo</display-name>
<distributable/>
</web-app>
再在webapps 下 建立print.jsp test.jsp
Print.jsp :
hello!IP[192.168.19.199]The time is <%= new java.util.Date() %>
tomcat2上操作一样,为了看负载均衡效果,记得将IP改为192.168.19.81,这样测试时就是二个不同的主机;测试tomcat1和tomcat2上的tomcat时,用http://192.168.19.199:8080/test/print.jsp&http://192.168.19.81:8080/test/print.jsp,如果能正常显示猫猫,说明tomcat正常;最终测试,输入http://192.168.19.199/test/print.jsp时输入二次,应该显示二个不同的jps主页,这说明tomcat的负载均衡成功!
※这仅仅是实验环境的一个tomcat负载均衡的实验,没做过压力测试,仅供大家学习参考,大家要做生产环境时还要考虑很多因素,慎。有关于apache+tomcat负载均衡的问题。