Apache+Tomcat实现负载均衡
安装Apache ,配置负载均衡参考:http://tomcat.apache.org/tomcat-6.0-doc/cluster-howto.html
http://www.ibm.com/developerworks/cn/opensource/os-lo-apache-tomcat/index.html
http://hi.baidu.com/luodaijun/blog/item/5bbe4cfb5ffef864034f56a1.html
1.1.1 安装 ( 1 )点击文件 apache_2.0.48-win32-x86-no_ssl.msi
( 2 )安装路径为 D:/ JIANGXI/Apache Group/Apache2
说明:
A、 需要输入 Network Domain 、 Server Name 和 Administrator's Email Address 在 “Network Domain” 里输入域。如果用本站的二级域名,例如 “test.dnschek.net” ,请输入 “test.dnschek.net” 。如果用顶级域名,请输入 “xxx.com” 。 ( 1166.jx163.com )
在 “Server Name” 里输入服务器名。如果用本站的二级域名,请输入您的域名 “test.dnschek.net” 。如果用顶级域名,请输入 “www.xxx.com” 。
在 “Administrator's Email Address” 里输入网站管理员的 Email 地址。
B、 选择典型安装。
C、 其他 采用默认配置。
D、 如果系统安装了其他 Web 服务器,如 IIS 、 WPS 等,占用了 80 端口的话,可以在 Apache 安装的时候,选择使用其他端口,如 8080 等。或者把 IIS 的所有 Web 站点停止。
1.1.2 Modules 下添加.so文件 ( 1 )下载 apache 的一个组件 Jakarta-tomcat-connectors-jk2.0.4-win32-apache2.0.49.zip
解压缩后将 modules 目录里面的 mod_jk2.so 文件, copy 到 Apache 安装目录下 modules 文件夹里 。
1.1.3 配置参数 httpd.conf 需要注意参数配置如下:
(1) 在行 "# LoadModule foo_module modules/mod_foo.so", 加入如下行 :
# Load mod_jk
LoadModule jk_module modules/mod_jk.so
#
# Configure mod_jk
#
JkWorkersFile conf/workers.properties
JkLogFile logs/mod_jk.log
JkLogLevel info
( 2 )在参数 DocumentRoot 下加入如下行:
JkMount /* loadbalancer
另外如果配置了http-vhosts.conf文件, 则要加入:
JkMount /*.do loadbalancer
JkMount /*.jsp loadbalancer
JkMount /servlet/* loadbalancer
JKMount /MoreSearch loadbalancer
( 3 )编辑 Apache\Apache Group\Apache2\conf\ 目录下的 httpd.conf 文件,找到 ServerName 这一项参数,这一行是被注释掉的(前面有#的符号)。去掉前面的在 "#" 符号,并在后面填入你的 hostname 或 IP 地址,在这里设置为:
ServerName 1166.jx163.com:80
说明:详细的配置信息,参见 .\4-WEB\Apache\Apache Group\Apache2\conf\httpd.conf
1.1.4 配置参数 workers.properties ( 1 ) 定义 Workers 列表:
# list the workers by name
worker.list=tomcat1, tomcat2, tomcat3,loadbalancer
( 2 ) 定义 Workers 的类型: # First tomcat server
worker.tomcat1.port= 8009 ( Tomcat worker 主机的侦听端口。 )
worker.tomcat1.host= 127.0.0.1 ( 侦听 ajp13 请求的 Tomcat worker 主机 )
worker.tomcat1.type= ajp13 (说明: 其使用 ajpv13 协议与 Tomcat 进程通讯 )
# Specify the size of the open connection cache.
worker.tomcat1.cachesize= 1000
( 当在多线程的 web server (例如 apache2.0 、 IIS 、 Netscape )中使用 JK 时,此属性是有效的。如果将 cachesize 的值设置为较高的值,这些支持多线程的 web server 将获得很好的处理能力。如果此属性不被设置,则连接 cache 特性将失效。 )
#
# Specifies the load balance factor when used with
# a load balancing worker.
# Note:
#----> lbfactor must be > 0
#----> Low lbfactor means less work done by the worker.
worker.tomcat1.lbfactor= 100
( 当此 Tomcat worker 被用于一个负载平衡 worker 使用时,此属性将被使用。它定义了此 worker 的负载平衡权值。 )
(2) Second 和 3th 的 tomcat server 配置跟 First tomcat server 类似,区别的地方:
Second 和 3th 的 worker.tomcat1.port 分别为: 8019 、 8029
( 5 ) 定义一个名为 “loadbalancer” 的 worker ,其作为对多个 Tomcat 进程的负载平衡使用:
worker.loadbalancer.type=lb
worker.loadbalancer.balanced_workers=tomcat1, tomcat2, tomcat3
( 负载平衡类型的 worker 并不与 Tomcat worker 通讯,它负责管理这些 Tomcat worker 。 )
1.2 安装Tomcat及web内容
说明:为保障平台的稳定运行,系统提供 3 个 tomcat (命名 webserver-1 , webserver-2 , webserver-3 )运行。
1.2.1 安装 ( 1 )在 D:/ JIANGXI/ 下创建 webserver-1 文件夹。
( 2 )将“ 5-WEB/1-Tomcat ”下的文件复制到 D:/ JIANGXI/webserver-1 。要求 Tomcat5.0 版本。
1.2.2 配置参数 l 打开文件“ ..\ 5-WEB\1-Tomcat\conf\server.xml ”
l ( 1 ) 3 个 Tomcat 的 server.xml 配置需要注意项目如下:
A 、 Change the control port : 配置服务器监听 shutdown 命令的端口 Port : SHUTDOWN , 3 个 Tomcat 分别为:
<Server port="8035" shutdown="SHUTDOWN" debug="0">
<Server port="8045" shutdown="SHUTDOWN" debug="0">
<Server port="8055" shutdown="SHUTDOWN" debug="0">
A、 定义 Tomcat 的标准独立服务 Service , 3 个 Tomcat 分别为:
<Service name="tomcat1">
<Service name="tomcat2">
<Service name="tomcat3">
C 、定义非 SSL 的 HTTP/1.1 连接器 Connector :
<Connector port="XXXX"
maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" redirectPort="8443" acceptCount="100"
debug="0" connectionTimeout="20000"
disableUploadTimeout="true" />
XXXX 对应 3 个 Tomcat 分别设置为: 8060 、 8070 、 8080
D 、 Change the AJP13 port : 定义 Coyote/JK2 AJP 1.3 连接器 Connector :
<Connector port=" XXXX"
enableLookups="false" redirectPort="YYYY" debug="0"
protocol="AJP/1.3" maxThreads="1100" minSpareThreads="25" maxSpareThreads="100"acceptCount="0"/>
YYYY 对应 3 个 Tomcat 分别设置为: 8009 、 8019 、 8029
YYYY 对应 3 个 Tomcat 分别设置为: 8443 、 8453 、 8463
E 、 Add a unique jvmRoute to the Catalina engine : 设置容器体系中最高级别的容器,各个 Tomcat 跟 B 项的设置对应, 3 个 Tomcat 分别为:
将 <Engine name="Standalone" defaultHost="localhost" debug="0"> 替换为:
<Engine jvmRoute="tomcat1" name="Standalone" defaultHost="localhost" debug="0">
<Engine jvmRoute="tomcat2" name="Standalone" defaultHost="localhost" debug="0">
<Engine jvmRoute="tomcat3" name="Standalone" defaultHost="localhost" debug="0">
F 、设置用户图片、用户上传杂志图片存放目录。 3 个 Tomcat 配置相同:
<Context path="/faceImage" docBase="D:\jiangxi\uploadimages\faceImage" debug="0" reloadable="false" crossContext="true">
</Context>
<Context path="/magazineImage" docBase="D:\jiangxi\uploadimages\magazineImage" debug="0" reloadable="false" crossContext="true">
</Context>
G 、此外需要的其他配置项有:
监听器: Listener
全局 JNDI 资源:GlobalNamingResources
全局日志设置,除非在更低的级别上覆盖它的设置 : Logger
配置: Realm
定义默认的虚拟主机 : Host
屏蔽: A 、 屏蔽 WARP connector
B 、屏蔽 standalone HTTP port
F 、 server.xml 配置全文:
<Server port="8035" shutdown="SHUTDOWN" debug="0">
<Listener className="org.apache.catalina.mbeans.ServerLifecycleListener"
debug="0"/>
<Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener"
debug="0"/>
<!-- Global JNDI resources -->
<GlobalNamingResources>
<!-- Test entry for demonstration purposes -->
<Environment name="simpleValue" type="java.lang.Integer" value="30"/>
<!-- Editable user database that can also be used by
UserDatabaseRealm to authenticate users -->
<Resource name="UserDatabase" auth="Container"
type="org.apache.catalina.UserDatabase"
description="User database that can be updated and saved">
</Resource>
<ResourceParams name="UserDatabase">
<parameter>
<name>factory</name> <value>org.apache.catalina.users.MemoryUserDatabaseFactory</value>
</parameter>
<parameter>
<name>pathname</name>
<value>conf/tomcat-users.xml</value>
</parameter>
</ResourceParams>
</GlobalNamingResources>
<!-- Define the Tomcat Stand-Alone Service -->
<Service name="tomcat1">
<!-- Define a non-SSL Coyote HTTP/1.1 Connector on port 8080 -->
<Connector port="8080"
maxThreads="800" minSpareThreads="25" maxSpareThreads="100"
enableLookups="false" redirectPort="8443" acceptCount="0"
debug="0" connectionTimeout="20000"
disableUploadTimeout="true" />
<!--Connector port="8443"
maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" disableUploadTimeout="true"
acceptCount="100" debug="0" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS"
keystoreFile="conf\.keystore"
keystorePass="changeit" /-->
<!-- Define a Coyote/JK2 AJP 1.3 Connector on port 8009 -->
<Connector port="8009"
enableLookups="false" redirectPort="8443" debug="0"
protocol="AJP/1.3" maxThreads="1100" minSpareThreads="25" maxSpareThreads="100"acceptCount="0"/>
<!-- You should set jvmRoute to support load-balancing via JK/JK2 ie :
<Engine name="Standalone" defaultHost="localhost" debug="0" jvmRoute="jvm1">
-->
<!-- Define the top level container in our container hierarchy -->
<Engine jvmRoute="tomcat1" name="Standalone" defaultHost="localhost" debug="0">
<!-- Global logger unless overridden at lower levels -->
<Logger className="org.apache.catalina.logger.FileLogger"
prefix="catalina_log." suffix=".txt"
timestamp="true"/>
<!-- This Realm uses the UserDatabase configured in the global JNDI
resources under the key "UserDatabase".Any edits
that are performed against this UserDatabase are immediately
available for use by the Realm.-->
<Realm className="org.apache.catalina.realm.UserDatabaseRealm"
debug="0" resourceName="UserDatabase"/>
<!-- Define the default virtual host
Note: XML Schema validation will not work with Xerces 2.2.
-->
<Host name="localhost" debug="0" appBase="webapps"
unpackWARs="true" autoDeploy="true"
xmlValidation="false" xmlNamespaceAware="false">
<!-- <Logger className="org.apache.catalina.logger.FileLogger"
directory="logs"prefix="localhost_log." suffix=".txt"
timestamp="true"/>-->
<Context path="/faceImage" docBase="D:\jiangxi\uploadimages\faceImage" debug="0" reloadable="false" crossContext="true">
</Context>
<Context path="/magazineImage" docBase="D:\jiangxi\uploadimages\magazineImage" debug="0" reloadable="false" crossContext="true">
</Context>
</Host>
</Engine>
</Service>
</Server>
页:
[1]