apache代理多个tomcat实例如何做负载均衡
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了apache代理多个tomcat实例如何做负载均衡相关的知识,希望对你有一定的参考价值。
实验环境:
IP:10.0.0.10
系统:CentOS 6.4
jdk版本:java version "1.8.0_65"
tomcat版本:Apache Tomcat/8.0.24
apache版本:Apache/2.2.27 (Unix)
思路:
1、安装Apache
2、安装tomcat
3、安装mod_jk
4、加载mod_jk
5、关闭tomcat的侦听端口
6、应用分离(静态与动态页面分离)
安装apache
[[email protected] src]# tar xf httpd-2.2.27.tar.gz
[[email protected] src]# cd httpd-2.2.27
[[email protected] httpd-2.2.27]# ./configure
--prefix=/usr/local/apache2 ---指定安装路径
--enable-proxy-balancer ---apache代理balancer模块
--enable-proxy-http ---apache代理http模块
--enable-proxy-connect ---apache 代理连接模块
--enable-proxy ---apache代理模块
--enable-rewrite ---基本的URL操纵规则,即启用URL重写规则
--enable-proxy-ajp ---apache代理ajp模块
[[email protected] httpd-2.2.27]# mkdir -p /data/{www,wwwroot} 建两个程序家目录
[[email protected] httpd-2.2.27]# make && make install 编译安装
apache配置文件主文件:
[[email protected] ROOT]# cat httpd.conf
30:ServerRoot "/usr/local/apache2" ---指定apache程序安装的家目录
41:Listen 80 ---指定监听端口
56:<IfModule !mpm_netware_module>
57:<IfModule !mpm_winnt_module>
66:User daemon ---指定apache运行的用户
67:Group daemon ---指定apache运行的组
69:</IfModule>
70:</IfModule>
89:ServerAdmin [email protected] ---指定网站管理员邮箱
98:ServerName www.example.com:80 ---指定FQDN名
105:DocumentRoot "/data" ---指定程序家目录
115:<Directory />
116: Options FollowSymLinks
117: AllowOverride None
118: Order deny,allow
119: Deny from all
120:</Directory>
132:<Directory "/data"> ---指定程序家目录
145: Options Indexes FollowSymLinks
152: AllowOverride None
157: Order allow,deny
158: Allow from all
160:</Directory>
166:<IfModule dir_module>
167: DirectoryIndex index.html 指定首页文件
168:</IfModule>
174:<FilesMatch "^\.ht">
175: Order allow,deny
176: Deny from all
177: Satisfy All
178:</FilesMatch>
187:ErrorLog "logs/error_log" ---指定错误日志文件路径
194:LogLevel warn ---指定日志级别
196:<IfModule log_config_module>
201: LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
202: LogFormat "%h %l %u %t \"%r\" %>s %b" common
204: <IfModule logio_module>
206: LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio
207: </IfModule>
216: CustomLog "logs/access_log" common
223:</IfModule>
225:<IfModule alias_module>
252: ScriptAlias /cgi-bin/ "/usr/local/apache2/cgi-bin/"
254:</IfModule>
256:<IfModule cgid_module>
262:</IfModule>
268:<Directory "/usr/local/apache2/cgi-bin">
269: AllowOverride None
270: Options None
271: Order allow,deny
272: Allow from all
273:</Directory>
284:DefaultType text/plain
286:<IfModule mime_module>
291: TypesConfig conf/mime.types --指定文件类型
308: AddType application/x-compress .Z ---指定压缩类型
309: AddType application/x-gzip .gz .tgz ---指定打包类型
332:</IfModule>
396:Include conf/extra/httpd-vhosts.conf ---此处必须打开,否则无法使用虚拟主机
414:<IfModule ssl_module>
415:SSLRandomSeed startup builtin
416:SSLRandomSeed connect builtin
417:</IfModule>
418:LoadModule jk_module modules/mod_jk.so
419:JkWorkersFile /usr/local/apache2/conf/workers.properties --指定负载均衡列表文件
420:JkMountFile /usr/local/apache2/conf/uriworkermap.properties --指定文件类型处理
421:JkMountFile /usr/local/apache2/conf/uriworkermap1.properties --指定文件类型处理
422:JkLogFile /usr/local/apache2/logs/mod_jk.log --指定mod_jk日志文件
423:JkLogLevel info --指定日志级别
424:JkLogStampformat "[%a %b %d %H:%M:%S %Y]" ---指定日志格式
[[email protected] extra]# cat httpd-vhosts.conf |grep -vnE "^#|^$"
19:NameVirtualHost *:80
27:<VirtualHost *:80>
28: ServerAdmin [email protected]
29: DocumentRoot "/data/www"
30: ServerName www.test1.com
31: ServerAlias test1.com
32: DirectoryIndex index.html
33: ErrorLog "logs/dummy-test1-error_log"
34: CustomLog "logs/dummy-test1-access_log" common
35:
36: JkMountFile conf/uriworkermap.properties 指定对于动静态文件处理的程序
43:
45:</VirtualHost>
47:<VirtualHost *:80>
48: ServerAdmin [email protected] 管理员邮箱
49: DocumentRoot "/data/wwwroot" 程序加目录
50: ServerName www.test2.com 站点名
51: ServerAlias test2.com 站点别名
52: DirectoryIndex index.html 首页文件
53: ErrorLog "logs/dummy-test2-error_log" 错误日志
54: CustomLog "logs/dummy-test2-access_log" common 访问日志
56:JkMountFile conf/uriworkermap1.properties 指定对于动静态文件处理的程序
57:</VirtualHost>
在虚拟主机目录里面分别建两个index.html文件。并启动apache程序,用域名访问两个网站(注:此处需要在本地做hosts解析)如果可以访问,则apache正常运行了(需关闭防火墙和安全策略)
[[email protected] data]# /usr/local/apache2/bin/apachectl -t 测试配置文件是否Ok
Syntax OK
[[email protected] data]# /usr/local/apache2/bin/apachectl start 启动apache
[[email protected] data]# cd /data/
[[email protected] data]# cd www
[[email protected] www]# ls
[[email protected] www]# echo "this is test1 web" > index.html
[[email protected] www]# cd ../wwwroot/
[[email protected] wwwroot]# echo "this is test2 web" > index.html
[[email protected] wwwroot]# ps -ef|grep httpd
root 54795 1 0 11:12 ? 00:00:00 /usr/local/apache2/bin/httpd -k start
daemon 54796 54795 0 11:12 ? 00:00:00 /usr/local/apache2/bin/httpd -k start
daemon 54797 54795 0 11:12 ? 00:00:00 /usr/local/apache2/bin/httpd -k start
daemon 54798 54795 0 11:12 ? 00:00:00 /usr/local/apache2/bin/httpd -k start
daemon 54799 54795 0 11:12 ? 00:00:00 /usr/local/apache2/bin/httpd -k start
daemon 54800 54795 0 11:12 ? 00:00:00 /usr/local/apache2/bin/httpd -k start
root 54803 2708 0 11:15 pts/1 00:00:00 grep httpd
apache安装完毕。
安装jk_mod:
# tar -xzf tomcat-connectors-1.2.32-src.tar.gz
# cd tomcat-connectors-1.2.32-src/
# cd native/
# ./configure --with-apxs=/usr/local/apache2/bin/apxs
# make && make install #
ll /usr/local/apache2/modules/mod_jk.so
-rwxr-xr-x 1 root root 1076923 Feb 20 19:14 /usr/local/apache2/modules/mod_jk.so
安装jdk,因为tomcat的运行必须要jdk的支持。
[[email protected] src]# rpm -qa|grep java ---查看是否安装有jdk且版本是否支持
java-1.5.0-gcj-1.5.0.0-29.1.el6.x86_64
gcc-java-4.4.7-3.el6.x86_64
java_cup-0.10k-5.el6.x86_64
[[email protected] src]# rpm -e --nodeps java-1.5.0-gcj-1.5.0.0-29.1.el6.x86_64 gcc-java-4.4.7-3.el6.x86_64 java_cup-0.10k-5.el6.x86_64 ---如版本过低则卸载
[[email protected] src]# ls
apache-tomcat-8.0.24.zip httpd-2.2.27.tar.gz jdk-8u65-linux-x64.rpm tomcat-connectors-1.2.32-src.tar.gz
[[email protected] src]# rpm -ivh jdk-8u65-linux-x64.rpm
Preparing... ########################################### [100%]
1:jdk1.8.0_65 ########################################### [100%]
Unpacking JAR files...
tools.jar...
plugin.jar...
javaws.jar...
deploy.jar...
rt.jar...
jsse.jar...
charsets.jar...
localedata.jar...
jfxrt.jar...
[[email protected] java]# vim /etc/profile ---末尾添加
unset i
export JAVA_HOME=/usr/java/jdk1.8.0_65
export PATH=$JAVA_HOME/bin:$PATH:
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
unset -f pathmunge
[[email protected] java]# source /etc/profile
[[email protected] java]# echo $JAVA_HOME
/usr/java/jdk1.8.0_65
解压tomcat程序:
[[email protected] src]# unzip apache-tomcat-8.0.24.zip
[[email protected] src]# mv apache-tomcat-8.0.24 tomcat1
[[email protected] src]# \cp -r tomcat1 tomcat2
[[email protected] src]# cd /usr/local/src/tomcat1/bin
[[email protected] bin]# chmod +x *.sh
[[email protected] src]# cd /usr/local/src/tomcat2/bin
[[email protected] bin]# chmod +x *.sh
修改tomcat1和tomcat2的service.xml文件
tomcat1的配置文件:
[[email protected] bin]# cat ../conf/server.xml
<?xml version=‘1.0‘ encoding=‘utf-8‘?>
<Server port="8005" shutdown="SHUTDOWN">
<Listener className="org.apache.catalina.startup.VersionLoggerListener" />
<Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
<Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
<Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
<Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />
<Resource name="UserDatabase" auth="Container"
type="org.apache.catalina.UserDatabase"
description="User database that can be updated and saved"
factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
pathname="conf/tomcat-users.xml" />
<Service name="Catalina">
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
<!-- Define an AJP 1.3 Connector on port 8009 -->
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
<Engine name="Catalina" defaultHost="localhost">
<Realm className="org.apache.catalina.realm.LockOutRealm">
<Realm className="org.apache.catalina.realm.UserDatabaseRealm"
resourceName="UserDatabase"/>
</Realm>
<Host name="www.test1.com" appBase="webapps" --->hostname与httpd-vhost里面相对应
unpackWARs="true" autoDeploy="true">
<Context path="" docBase="/data/www"/> --->docBase与虚拟主机里面的DR对应
</Host>
</Engine>
</Service>
</Server>
tomcat2的配置文件:
[[email protected] conf]# cat server.xml|grep -v "^#"
<?xml version=‘1.0‘ encoding=‘utf-8‘?>
<Server port="8006" shutdown="SHUTDOWN">
<Listener className="org.apache.catalina.startup.VersionLoggerListener" />
<Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
<Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
<Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
<Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />
<Resource name="UserDatabase" auth="Container"
type="org.apache.catalina.UserDatabase"
description="User database that can be updated and saved"
factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
pathname="conf/tomcat-users.xml" />
<Service name="Catalina">
<Connector port="8081" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
<!-- Define an AJP 1.3 Connector on port 8009 -->
<Connector port="8019" protocol="AJP/1.3" redirectPort="8443" />
<Engine name="Catalina" defaultHost="localhost">
<Realm className="org.apache.catalina.realm.LockOutRealm">
<Realm className="org.apache.catalina.realm.UserDatabaseRealm"
resourceName="UserDatabase"/>
</Realm>
<Host name="www.test2.com" appBase="webapps" --->hostname与httpd-vhost里面相对应
unpackWARs="true" autoDeploy="true">
<Context path="" docBase="/data/wwwroot"/> --->docBase与虚拟主机里面的DR对应
</Host>
</Engine>
</Service>
</Server>
[[email protected] conf]# cat uriworkermap1.properties
/*=tomcat2 需要给tomcat2处理的文件类型
!/*.jpg=tomcat2 给apache处理的文件类型
!/*.gif=tomcat2
!/*.png=tomcat2
!/*.bmp=tomcat2
!/*.html=tomcat2
!/*.htm=tomcat2
!/*.swf=tomcat2
!/*.css= tomcat2
!/*.js= tomcat2
[[email protected] conf]# cat uriworkermap.properties
/*=tomcat1 需要给tomcat1处理的文件类型
!/*.jpg=tomcat1 给apache处理的文件类型
!/*.gif=tomcat1
!/*.png=tomcat1
!/*.bmp=tomcat1
!/*.html=tomcat1
!/*.htm=tomcat1
!/*.swf=tomcat1
!/*.css= tomcat1
!/*.js= tomcat1
[[email protected] conf]# cat workers.properties
worker.list=tomcat1,tomcat2 指定负载均衡器名称
worker.tomcat1.type=ajp13 协议
worker.tomcat1.host=localhost 主机名
worker.tomcat1.port=8009 端口,必须和tomcat1里面的对应
worker.tomcat1.lbfactor=1 权重
worker.tomcat2.type=ajp13 协议
worker.tomcat2.host=localhost 主机名
worker.tomcat2.port=8019 端口,必须和tomcat2里面的对应
worker.tomcat2.lbfactor=1 权重
上传网站网站即可,重启apache与tomcat1和tomcat2
本文出自 “linux” 博客,谢绝转载!
以上是关于apache代理多个tomcat实例如何做负载均衡的主要内容,如果未能解决你的问题,请参考以下文章
Apache反向代理结合Tomcat集群来实现负载均衡概念理解