码迷,mamicode.com
首页 > Web开发 > 详细

apache基于mod_jk模块实现代理及负载均衡Tomcat Cluster

时间:2015-11-29 06:37:54      阅读:255      评论:0      收藏:0      [点我收藏+]

标签:tomcat   代理   jk_module   负载均衡   


一、基于mod_jk模块实现apache代理tomcat

上篇博文已经学习了nginx代理和负载均衡tomcat及apache基于mod_proxy模块代理tomcat;

现在来学习下apache基于mod_jk模块实现代理及负载均衡Tomcat Cluster

1、基于httpd代理tomcat时可以使用httpd的两个模块

 1)mod_jk:第三方模块

     mod_jk是ASF的一个项目,是一个工作于apache端基于AJP协议与Tomcat通信的连接器,它是apache的一个模块,是AJP协议的客户端(服务端是Tomcat的AJP连接器)。

后端tomcat使用的连接器:tomcat ajp

 2)mod_proxy:标配模块

       mod_proxy_http

       mod_proxy_ajp

       mod_proxy_balancer:负载均衡

后端tomcat使用的连接器:mod_porxy_http: tomcat http,mod_proxy_ajp: tomcat ajp

二、httpd基于jk_module模块代理tomcat

1、环境

客户端:Windows 192.168.200.88 

node5: CentOS6.7-x86_64 eth0:192.168.100.175 eth1:192.168.200.175  httpd

node6:CentOS6.5-x86_64 eth0:192.168.200.179  tomcat1

node7:CentOS6.5-x86_64 eth0:192.168.200.180  tomcat2

2、先部署后端node6上的Tomcat

这里我使用上篇博文已经部署好的,修改下测试页面

注意:为了安全考虑不应该使用root用户运行tomcat,应该把tomcat的文件修改成普通用户tomcat,并切换至tomcat用户再启动tomcat,

[root@BAIYU_179 ~]# cd /usr/local/tomcat/
[root@BAIYU_179 tomcat]# ls
bin   lib      logs    RELEASE-NOTES  temp     work
conf  LICENSE  NOTICE  RUNNING.txt    webapps
[root@BAIYU_179 tomcat]# cd webapps/
[root@BAIYU_179 webapps]# ls
docs  examples  host-manager  index.jsp  manager  ROOT  testapp
[root@BAIYU_179 webapps]# cd testapp/
[root@BAIYU_179 testapp]# ls
classes  index.jsp  index.jsp.orig  lib  META-INF  WEB-INF
[root@BAIYU_179 testapp]# vi index.jsp
<%@ page language="java" %>
<html>
 <head><title>TomcatA</title></head>
 <body>
 <h1><font color="red">TomcatA </h1>
 <table align="centre" border="1">
  <tr>
  <td>Session ID</td>
 <% session.setAttribute("abc","abc"); %>
  <td><%= session.getId() %></td>
  </tr>
  <tr>
  <td>Created on</td>
  <td><%= session.getCreationTime() %></td>
  </tr>
 </table>
 </body>
</html>

测试:

技术分享技术分享

3、安装httpd并添加jk_module模块

 1)安装httpd

[root@BAIYU_175 ~]# yum install httpd httpd-devel -y #直接Yum安装了
[root@BAIYU_175 ~]# service httpd start
[root@BAIYU_175 ~]# httpd -M|grep jk    #默认没有安装mod_jk模块
httpd: apr_sockaddr_info_get() failed for BAIYU_175
httpd: Could not reliably determine the server‘s fully qualified domain name, using 127.0.0.1 for ServerName
Syntax OK

测试:

技术分享

 2)安装jk_module模块

  [root@BAIYU_175 ~]# ls
anaconda-ks.cfg  install.log.syslog                   trash.sh
install.log      tomcat-connectors-1.2.40-src.tar.gz
[root@BAIYU_175 ~]# tar xf tomcat-connectors-1.2.40-src.tar.gz 
[root@BAIYU_175 ~]# cd tomcat-connectors-1.2.40-src
[root@BAIYU_175 tomcat-connectors-1.2.40-src]# ls
conf  HOWTO-RELEASE.txt  LICENSE  NOTICE      support  xdocs
docs  jkstatus           native   README.txt  tools
[root@BAIYU_175 tomcat-connectors-1.2.40-src]# cd native/    #native目录是要使用的连接器
[root@BAIYU_175 native]# ls
aclocal.m4  buildconf.sh  configure     iis          netscape    STATUS.txt
apache-1.3  BUILDING.txt  configure.ac  Makefile.am  README.txt  TODO.txt
apache-2.0  common        docs          Makefile.in  scripts
[root@BAIYU_175 native]# less README.txt    #查看给的安装提示
#看到其中有这么2行
How do i build it?
------------------

Just take a look at BUILDING.txt

[root@BAIYU_175 native]# ls
aclocal.m4  buildconf.sh  configure     iis          netscape    STATUS.txt
apache-1.3  BUILDING.txt  configure.ac  Makefile.am  README.txt  TODO.txt
apache-2.0  common        docs          Makefile.in  scripts
[root@BAIYU_175 native]# less BUILDING.txt 
#看到如下行
 General Build Instructions
  ==========================

  To build tomcat-connectors you need to run "configure" and "make":

  ./configure [autoconf arguments] [tomcat-connectors arguments]
  make

  It is possible to set CFLAGS and LDFLAGS to add some platform specifics:

  LDFLAGS=-lc   ./configure --with-apxs=/home2/local/apache/bin/apxs
[root@BAIYU_175 native]# which apxs    #查看本机apxs命令的安装位置
/usr/sbin/apxs
[root@BAIYU_175 native]# ./configure --with-apxs=/usr/sbin/apxs
[root@BAIYU_175 native]# make && make install
[root@BAIYU_175 native]# ls /usr/lib64/httpd/modules/mod_jk.so   #确认一下
/usr/lib64/httpd/modules/mod_jk.so

3)修改httpd配置文件装载jk_module模块

[root@BAIYU_175 native]# cd /etc/httpd/conf.d/
[root@BAIYU_175 conf.d]# ls
README  welcome.conf
[root@BAIYU_175 conf.d]# vi mod_jd.conf  #这里使用一个专门的配置文件来保存相关指令及其设置。其内容如下:
  1 LoadModule jk_module modules/mod_jk.so
  2 JkWorkersFile /etc/httpd/conf.d/workers.properties #指定后端tomcat配置文件,随便
    取名,不要以.cnf结尾即可
  3 JkLogFile logs/mod_jk.log #jk_modules的日志
  4 JkLogLevel info
  5 JkMount /status ! #此路径不代理
  6 JkMount /* TomcatA #/下内容全部代理至TomcatA
  7 JkMount /status StatA #此路径由StatA响应,jk_modules自己提供
[root@BAIYU_175 conf.d]# vi /etc/httpd/conf.d/workers.properties   
  1 worker.list=TomcatA,StatA
  2 worker.TomcatA.host=192.168.100.179
  3 worker.TomcatA.port=8009
  4 worker.TomcatA.type=ajp13
  5 worker.StatA.type=status
[root@BAIYU_175 conf.d]# service httpd configtest
httpd: apr_sockaddr_info_get() failed for BAIYU_175
httpd: Could not reliably determine the server‘s fully qualified domain name, using 127.0.0.1 for ServerName
Syntax OK
[root@BAIYU_175 conf.d]# service httpd reload
重新载入 httpd:
[root@BAIYU_175 conf.d]# httpd -M|grep jk
httpd: apr_sockaddr_info_get() failed for BAIYU_175
httpd: Could not reliably determine the server‘s fully qualified domain name, using 127.0.0.1 for ServerName
 jk_module (shared)
Syntax OK

   测试:从浏览器访问,这里写错了用了100.175,应该用200.175,测试也是可以代理成功了,这里就不再截图了,

技术分享

    除了需要使用LoadModule指令在apache中装载模块外,mod_jk还需要在apache的主配置文件中设置其它一些指令来配置其工作属。如JkWorkersFile则用于指定保存了worker相关工作属性定义的配置文件,JkLogFile则用于指定mod_jk模块的日志文件,JkLogLevel则可用于指定日志的级别(info, error, debug),此外还可以使用JkRequestLogFormat自定义日志信息格式。而JkMount(格式: JkMount <URL to match> <Tomcat worker name>)指定则用于控制URL与Tomcat workers的对应关系。 

       对于apache代理来说,每一个后端的Tomcat实例中的engine都可以视作一个worker,而每一个worker的地址、连接器的端口等信息都需要在apache端指定以便apache可以识别并使用这些worker约定俗成,配置这些信息的文件通常为workers.properties,其具体路径则是使用前面介绍过的JkWorkersFile指定的,在apache启动时,mod_jk会扫描此文件获取每一个worker的配置信息。比如,我们这里使用/etc/httpd/conf.d/workers.properties。

workers.properties文件一般由两类指令组成:

一是mod_jk可以连接的各worker名称列表,

二是每一个worker的属性配置信息。它们分别遵循如下使用语法。

worker.list = < a comma separated list of worker names >

worker. <worker name> .<property> = <property value>

其中worker.list指令可以重复指定多次,而worker name则是Tomcat中engine组件jvmRoute参数的值。如:

worker.TomcatA.host=192.168.100.179

根据其工作机制的不同,worker有多种不同的类型,这是需要为每个worker定义的一项属性woker.<work name>.type。常见的类型如下:

◇ ajp13:此类型表示当前worker为一个运行着的Tomcat实例。

◇ lb:lb即load balancing,专用于负载均衡场景中的woker;此worker并不真正负责处理用户请求,而是将用户请求调度给其它类型为ajp13的worker。

◇ status:用户显示分布式环境中各实际worker工作状态的特殊worker,它不处理任何请求,也不关联到任何实际工作的worker实例。具体示例如请参见后文中的配置。


worker其它常见的属性说明:

◇ host:Tomcat 7的worker实例所在的主机;

◇ port:Tomcat 7实例上AJP1.3连接器的端口;

◇ connection_pool_minsize:最少要保存在连接池中的连接的个数;默认为pool_size/2;

◇ connection_pool_timeout:连接池中连接的超时时长;

◇ mount:由当前worker提供的context路径,如果有多个则使用空格格开;此属性可以由JkMount指令替代;

◇ retries:错误发生时的重试次数;

◇ socket_timeout:mod_jk等待worker响应的时长,默认为0,即无限等待;

◇ socket_keepalive:是否启用keep alive的功能,1表示启用,0表示禁用;

◇ lbfactor:worker的权重,可以在负载均衡的应用场景中为worker定义此属性;


















打开内核包转发功能

apache基于mod_jk模块实现代理及负载均衡Tomcat Cluster

标签:tomcat   代理   jk_module   负载均衡   

原文地址:http://xiexiaojun.blog.51cto.com/2305291/1717850

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!