CentOS 6平台配置安装apache+tomcat负载均衡集群(jk方式)

Apache 1576℃

Apache HTTP Server(简称 Apache),是 Apache 软件基金协会的一个开放源码的网页服务器,Apache 反应速度快,运行效率高,但只支持HTML等静态页面(加载插件后也可支持 PHP 页面)。Tomcat 是由 Apache 软件基金协会与 Sun 公司联合开发的一款Web服务器,它除了支持HTML等静态页面外,还支持JSP、Servlet 。在相同的运行环境下,Tomcat 对静态页面的反应速度没有 Apache 灵敏,生产环境使用 Apache 与 Tomcat 搭建负载均衡集群,可以提高网站并发。Apache+Tomcat搭建集群连接有三种方式:JKhttp_proxyajp_proxy

在开始下文之前,需要已安装了apache和tomcat,可参考:安装配置apache 、安装配置tomcat

1.准备两套tomcat环境

cp -a /usr/local/tomcat /usr/local/tomcat1
cp -a /usr/local/tomcat /usr/local/tomcat2
vim /usr/local/tomcat2/conf/server.xml
#修改tomcat2的远程停止服务端口,如果两台tomcat在不同机器上就不用修改
<Server port="8006" shutdown="SHUTDOWN">
#修改tomcat2的HTTP监听端口,如果两台tomcat在不同机器上就不用修改
<Connector port="8081" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
#修改tomcat2的AJP监听端口,如果两台tomcat在不同机器上就不用修改
<Connector port="8010" protocol="AJP/1.3" redirectPort="8443" />
#修改tomcat2的标识名,这一步必须做
<Engine name="Catalina" defaultHost="localhost" jvmRoute="worker2">
vim /usr/local/tomcat2/conf/context.xml
#要实现session复制,还需要在Context添加属性distributable="true"
<Context distributable="true">
vim /usr/local/tomcat1/conf/context.xml
#同理,还需tomcat1的Context添加属性distributable="true"
<Context distributable="true">
vim /usr/local/tomcat1/webapps/ROOT/test.jsp
#在tomcat1的wed路径下创建一个用于测试的页面
tomcat1 SessionID: <%=session.getId() %>
vim /usr/local/tomcat2/webapps/ROOT/test.jsp
#在tomcat2的wed路径下创建一个用于测试的页面
tomcat1 SessionID: <%=session.getId() %>

2.编译生成mod_jk.so模块

Apache之所以能够和Tomcat通讯就是依靠了tomcat-connectors(连接器),官方下载地址。而这个东西通讯协议就是AJP/1.3 ,这也是为什么我们每次启动Tomcat的时候除了我们常见的http通讯端口8080,但还有一个端口AJP 8009。其实多启动的这个8009端口就是为了与Apache通讯使用的,如果我们用不到Apache服务器那我们完全可以把Tomcat加载启动AJP服务关闭掉,减少内存占用提高效率。编译安装tomcat-connectors完成后会生成mod_jk.so,即Apache与Tomcat的连接模块,此模块附带提供集群和负载均衡的功能。JK分为两个版本1.x和2.x,其中2.x并不是最新的版本,它是JK的另外一个分支,后来没有继续开发,2.x版本已经废弃,通常使用1.x的版本。官方下载地址。

#需要先安装依赖包,否则会报错
yum install glibc-headers gcc-c++ -y
wget http://archive.apache.org/dist/tomcat/tomcat-connectors/jk/tomcat-connectors-1.2.43-src.tar.gz
tar zxvf tomcat-connectors-1.2.43-src.tar.gz 
cd tomcat-connectors-1.2.43-src/native/
./configure --with-apxs=/usr/local/apache2/bin/apxs
make
cp apache-2.0/mod_jk.so /usr/local/apache2/modules/

3.添加mod_jK配置文件

vim /usr/local/apache2/conf/mod_jk.conf
#载入mod_jk.so
LoadModule jk_module modules/mod_jk.so
#指出mod_jk模块工作所需的工作文件workers.properties的路径
JkWorkersFile conf/workers.properties
#指定JK日志文件路径
#JkLogFile logs/mod_jk.log
#指定JK日志记录级别
JkLogLevel debug
#指定日志格式
JkLogStampFormat "[%a %b %d %H:%M:%S %Y] "
#指定请求日志格式
JkRequestLogFormat "%w %V %T"
#把匹配的页面转发到负载均衡集群,loadbalancer在workers.properties中配置
JkMount  /*.do loadbalancer
JkMount  /*.jsp loadbalancer
# 指定apache解析的静态页面路径
JkAutoAlias /usr/local/apache2/htdocs

3.添加mod_jK服务器配置文件

关于workers.properties更多参数解释可以网上搜索“workers.properties配置说明”

vim /usr/local/apache2/conf/workers.properties
#定义名为loadbalancer的集群
worker.list=loadbalancer
#定义类型为负载平衡
worker.loadbalancer.type=lb
#定义集群包含的工作组
worker.loadbalancer.balance_workers=worker1,worker2
#下面的1为黏性Session,即同一会话中的请求都被派送到同一个tomcat实例
worker.loadbalancer.sticky_session=1
#设置worker1的属性:ajp端口、IP、类型、负载权重
worker.worker1.port=8009
worker.worker1.host=127.0.0.1
worker.worker1.type=ajp13
worker.worker1.lbfactor=1
#设置worker2的属性
worker.worker2.port=8010
worker.worker2.host=127.0.0.1
worker.worker2.type=ajp13
worker.worker2.lbfactor=1

4.修改apache配置文件

vim /usr/local/apache2/conf/httpd.conf
#增加包含mod_jk.conf的语句
Include /usr/local/apache2/conf/mod_jk.conf

5.测试

重启tomcat和apache后(如果启动不起来会在相应日志里打印,查询并排除即可),在浏览器地址栏输入http://<server IP>/test.jsp,可以看到使用的是tomcat1或者tomcat2下的test.jsp文件,一直刷新页面也是固定不变的,说明黏性Session设置没问题。

转载请注明:零五宝典 » CentOS 6平台配置安装apache+tomcat负载均衡集群(jk方式)