在之前的项目中使用过IBM的websphere进行负载均衡的配置,鉴于websphere过于沉重与激活问题,尝试使用tomcat进行集群分布,从而实现负载均衡(即由多台服务器来分担访问量,这样在一个服务器上的压力就会减小很多,你可以根据自己的需求去配置任意多的服务器来支撑你的应用系统,如果一台服务崩溃了,那么另外的应用服务器依然可以继续支持应用继续服务。)
为了实现负载均衡,就自然产生两个问题,
1、如何在多台服务器之间进行session共享,保证一台宕机的情况下另外的服务器可以正常运行(该问题在下文中论述tomcat的会话复制问题),2、如何对访问请求进行分配到不同的服务器。对于这两个问题,我们就需要有一个负责负载均衡的web服务器去完成请求的分配与session的共享(本文暂不对此原理进行讨论)。
对于apache服务器和tomcat的连接方法了解到有三种:mod_JK、http_proxy和ajp_proxy.本文针对mod_jk进行学习,由于条件有限,不在不同的服务器上进行集群垂直分布,而采用同一台服务器端口号不同的方式进行集群水平分布,
使用的环境配置为:apache 2.4 + tomcat 7 + mod_jk2.4.17进行集群分布式管理
安装包下载:http://www.apachelounge.com/download/;
具体配置步骤如下:
1、apache2.4安装注册,从官网下载压缩包,解压进入bin目录,cmd模式进入该目录进行服务注册:httpd.exe -k install;(注意管理员模式防止注册失败)。注册完成后如图1:
2、安装tomcat。官网直接下载tomcat,修改文件名tomcat1复制并修改tomcat2;
3、使用mod_jk进行集群管理:
a、在apache24/conf目录下新建workers.properties文件,管理容器列表,内容如下:
worker.list = controller,tomcat1,tomcat2 #server 列表
#========tomcat1========
worker.tomcat1.port=8019 #ajp13 端口号,在tomcat下server.xml配置,默认8009
worker.tomcat1.host=localhost #tomcat的主机地址,如不为本机,请填写ip地址 (若垂直分布则在此修改不同的主机地址)
worker.tomcat1.type=ajp13
worker.tomcat1.lbfactor = 1 #server的加权比重,值越高,分得的请求越多
#========tomcat2========
worker.tomcat2.port=8029 #ajp13 端口号,在tomcat下server.xml配置,默认8009
worker.tomcat2.host=localhost #tomcat的主机地址,如不为本机,请填写ip地址
worker.tomcat2.type=ajp13
worker.tomcat2.lbfactor = 2 #server的加权比重,值越高,分得的请求越多
#========controller,负载均衡控制器========
worker.controller.type=lb
worker.controller.balanced_workers=tomcat1,tomcat2 #指定分担请求的tomcat
worker.controller.sticky_session=1
b、在apache24/conf目录下新建mod_jk.conf文件,进行负载均衡配置,内容如下:
#加载mod_jk Module
LoadModule jk_module modules/mod_jk.so
#指定 workers.properties文件路径
JkWorkersFile conf/workers.properties
#指定那些请求交给tomcat处理,"controller"为在workers.propertise里指定的负载分配控制器
JkMount /* controller
c、在apache24/conf目录下httpd.conf中增加mod_jk.conf文件的管理:
文件末尾加入:
include conf/mod_jk.conf
。
4、修改tomcat1、tomcat2端口设置conf/server.xml(若不同服务器集群垂直分布,即每台服务器只安装一个tomcat则不需要修改):
--<Connector port="8019" protocol="AJP/1.3" redirectPort="8443" />---与workers.properties中对应分别修改为8019/8029;
--<Server port="8105" shutdown="SHUTDOWN">---port修改 进行区分8105/8205,默认为8005
--<Connector port="8180" ----port修改为8180/8280,默认为8080;
5、将编译好的web项目分别放入tomcat下webapps目录下,启动apache、tomcat1、tomcat2。访问http://127.0.0.1/test/index.jsp观察tomcat1与2的测试情况如下图2
△过程中遇到的问题及注意点:
1、本文中的测试是采用水平分布
2、apache启动:通过bin目录下的ApacheMonitor.exe,进行服务管理,若启动失败,则可能是如下问题:
a、apache默认的80端口被占用,检查方法:cmd命令下:netstat -ano,若存在80端口则根据PID查询该端口的被占用程序进行相关处理,本文中该端口被SQL server reporting services(SQLEXPRESS)占用,解决为关闭改服务;
b、apache24/conf/httpd.conf中apache24的路径配置不正确。问题原因查询:在运行下输入event选择事件查看器,通过查看日志定位错误
c、mod_jk与apache版本不匹配,解决方法:下载匹配的关联版本。