这份文档只是一个初步的配置负载均衡的文档,没有涉及过多的性能优化的东西。
所以也就不多言了,直接切入主题。
一、准备工作
安装JDK 并配置环境变量。这里要求至少 1.5 以上版本。
安装apache2.2 。我的安装目录为: D:\Apache 2.2
安装tomcat6 。为了端口不起冲突,建议直接解压。我这里只使用了两台 tomcat 作为集群服务器。其路径分别为 D:\apache-tomcat-6.0.20_v1 、 D:\apache-tomcat-6.0.20_v2
二、配置Apache
这里说明一下,我在网上找到的一些资料都在介绍mod_JK 的方式配置负载均衡。但是从 apache2.X 版本之后其自身已经集成了 mod_jk 可以直接使用 mod_proxy 的方式进行负载均衡的配置,所以下面介绍的也即是这种方式。
在D:\Apache2.2\conf 目录下找到 httpd.conf 文件,并进行修改。修改步骤:
1、打开相关的模块。
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
LoadModule proxy_connect_module modules/mod_proxy_connect.so
LoadModule proxy_ftp_module modules/mod_proxy_ftp.so
LoadModule proxy_http_module modules/mod_proxy_http.so
LoadModule rewrite_module modules/mod_rewrite.so
在配置文件里找到上述模块,将前边的“# ”去掉 .
2、 配置 tomcat 集群 。
在该配置文件的最后加上:
ProxyRequests Off
ProxyPass / balancer://cluster/
<proxy balancer://cluster>
BalancerMember ajp:// localhost:8009 loadfactor=1 route= jvm1
BalancerMember ajp:// localhost:9009 loadfactor=1 route= jvm2
</proxy>
注意红色部分,因为这里我只使用了一台物理机器作为集群的配置,所以就直接使用了localhost 指向本地的集群服务器,你也可以使用 127.0.0.1 。如果这里你使用多台机器一起配合的话,只需要将 localhost 修改为其他机器的 IP 地址就行。
另外需要注意的就是上面配置的端口,为什么要这么配置?将在后边结合tomcat 一起做一个详细的说明。
三、配置tomcat
在D:\apache-tomcat-*\conf 找到 server.xml ,然后着手修改。
1、配置 server 的关闭。
因为我是在同一台机器上配置两台tomcat ,所以为了使 tomcat 关闭不出现端口被占用的情况,需要修改关闭端口。
<Server port=" 8005 " shutdown="SHUTDOWN">
修改为:
<Server port=" XXXX " shutdown="SHUTDOWN">
注意,我这里用了两台tomcat ,所以第一个 tomcat 我就选择了默认的端口 8005 ,第二个 tomcat 我将此端口修改为了 9005 。总之,如果你有多台 tomcat 服务器群,都需要将它们的端口修改为互不冲突的端口号。
2、配置 Connector
这里又两个地方需要修改, 第一个就是 tomcat 监听的 http 端口,另一个就是 tomcat 监听的 AJP 端口:
<Connector port=" 8080 " protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
<Connector port=" 8009 " protocol="AJP/1.3" redirectPort="8443" />
注意,蓝色部分是tomcat 的 http 端口,因为我在同一台机器上配置了两个 tomcat ,为了使它们的 http 端口不冲突,我将第一个 tomcat 使用默认的端口即 8080 ,第二个 tomcat 的 http 端口我修改为了 8081 。同样的道理,如果你还有其他的 tomcat ,记得将它们的 http 端口修改为互不冲突的端口号即可。
另一个需要修改的端口,红色部分的端口, 这里是apache 和 tomcat 链接的关键,前台 apache 就是通过 AJP 协议与 tomcat 进行通信的,以完成负载均衡的作用。 现在回过头去看看 apache的 httpd.conf 配置,
<proxy balancer://cluster>
BalancerMember ajp:// localhost:8009 loadfactor=1 route= jvm1
BalancerMember ajp:// localhost:9009 loadfactor=1 route= jvm2
</proxy>
那么,另一个tomcat 的 AJP 端口你知道要配置成什么了吗?对了,就是 9009 。
3、配置 Engine
<Engine name="Catalina" defaultHost="localhost">,这个是原来的配置,现在将这个配置修改为: <Engine name="Catalina" defaultHost="localhost" jvmRoute=" jvm1 ">,然后另一个 tomcat 修改为 <Engine name="Catalina" defaultHost="localhost" jvmRoute=" jvm2 ">。
现在再回过头去看看apache 的配置:
<proxy balancer://cluster>
BalancerMember ajp:// localhost:8009 loadfactor=1 route= jvm1
BalancerMember ajp:// localhost:9009 loadfactor=1 route= jvm2
</proxy>
这里再说明一点,loadfactor 相当于一种加权策略, loadfactor 的值越大,对应的 tomcat 服务器分到的请求就越多。像上面的这种设置就说明两台 tomcat 将平均负载。
4、配置 Session 的复制
Tomcat里的 <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/> 这个配置默认是被注释掉的,如果想要开启取消注释就 OK ,这也是 tomcat 默认的会话同步和复制配置。一般的情况下,使用默认配置就可以。
关于session 的复制我还没来得及验证过,有需要的同学可以自己去网上找一下相关资料。