因项目需要最近研究了下Linux 红帽 6.5下实现Apache负载均衡的问题。从干净的环境说起。
1、安装JDK环境
首先下载linux版本的JDK,我使用的是jdk-6u24-linux-x64-rpm.bin,并将该文件上传至服务器的指定目录。
chmod 777 jdk-6u24-linux-x64-rpm.bin修改文件的操作权限;
./jdk-6u24-linux-x64-rpm.bin,解压JDK文件;
rpm -ivh jdk-6u24-linux-x64-rpm,安装JDK;
配置环境变量:vi /etc/profile,在其中添加以下内容:
export JAVA_HOME=/usr/java/jdk1.6.0.24(其中你需要修改成你自己的安装目录)
export JAVA_BIN=/usr/java/jdk1.6.0.24/bin(其中你需要修改成你自己的安装目录)
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export JAVA_HOME JAVA_BIN PATH CLASSPATH
使用命令使文件修改立即生效:. /etc/profile,其中要注意.后面的空格。
2、安装tomcat
首先下载linux版本的tomcat,我使用的是apache-tomcat-6.0.43.tar.gz,并将该文件上传至服务器的指定目录。
使用命令 tar -xf apache-tomcat-6.0.43.tar.gz解压tomcat文件;
mv apache-tomcat-6.0.43 tomcat1;cp -r tomcat1 tomcat2 ;此操作的目的在于讲tomcat备份两个,以达到负载均衡。
然后你可以自己在tomcat中放置测试文件来测试tomcat是否部署成功。
如果你有两台Linux服务器,则只需将tomcat拷贝到另一台机器上,如果在一台服务器上完成负载均衡,则需要需要其中一个tomcat的端口,但是不可以占用80端口。
备份conf/server.xml文件,并修改;
两个tomcat都同样的修改该文件,并记录下AJP所对应的端口号,我这里是8009,在Apache负载时需要用到。
3、安装Apache服务
下载Apache的安装包及JK的包。我分别使用的是httpd-2.2.29.tar.gz及tomcat-connectors-1.2.40-src.tar.gz,上传至服务器;
分别使用tar -xf 文件名进行解压操作;
编译apache服务器:cd httpd-2.2.21 ,在httpd下./configure --enable-so --enable-mods-shared=most --with-mpm=worker,其中设置worker是修改其工作模式。worker是全新的支持多线程和多进程混合模型的MPM;
使用make命令,开始编译;
使用sudo make install命令,开始安装;
进入到服务器的bin目录,启动服务:cd /usr/local/apache2/bin/ sudo ./apachectl start
在本地打开浏览器,访问http://127.0.0.1,如果出现“It Works!”,则表示启动成功了;
如果要在其他的机器*问的话,要注意关闭Linux系统的防火墙;
4、编译JK连接器
进入到解压后的目录下的native目录:cd tomcat-connectors-1.2.40-src/native/;
执行./configure --with-apxs=/usr/local/apache2/bin/apxs配置编译;
使用make命令进行编译;
其中在apache-2.0目录下,将看到本次编译生成的mod_jk.so模块,将其拷贝到Apache的modules目录下:在apache-2.0目录下执行该命令:
sudo cp ./mod_jk.so /usr/local/apache2/modules/;
5、Apache服务配置
将apache服务目录中conf下的httpe.conf文件备份到别的目录,并使用vi进行编辑;
在LoadModle处增加:LoadModule jk_module modules/mod_jk.so;
在<IfModule XXXX>的地方增加以下:
<IfModule jk_module>
JkWorkersFile conf/workers.properties
JkMountFile conf/uriworkermap.properties
JkLogFile logs/mod_jk.log
JkLogLevel warn
< /IfModule>
<IfModule worker.c>
StartServers 5
ServerLimit 20
ThreadLimit 200
MaxClients 4000
MinSpareThreads 25
MaxSpareThreads 250
ThreadsPerChild 200
MaxRequestsPerChild 1000
</IfModule>
在conf下分别新建conf/workers.properties文件和conf/uriworkermap.properties,其内容分别是:
worker.s1.route的值即为server.xml中配置的JVMRoute的值。
在测试时,出现访问tomcat中项目503的错误,此时需要需要httpd.conf文件中的权限。
使用vi命令编辑httpd.conf文件,在
<Directory />
Options FollowSymLinks
AllowOverride None
Order deny,allow
Allow from all
</Directory> 中,将Deny from all改为Allow from all。并确保80端口及tomcat所使用的端口都不被防火前拦截。
至此所有的配置以完成。
先分别启动两个tomcat的服务,启动成功后,进入到apache的bin目录下启动apache服务,命令:sudo ./apachectl start。
在浏览器中访问apache服务所在的地址。例如http://ip/project/index.jsp,测试负载时,可以停掉一个tomcat服务看是否能正常访问,然后重启关闭的tomcat,并关闭另一个tomcat,看是否能正常访问。