LAMT基于mod_jk配置使用

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

[root@nginx-proxy2 conf.d]# cd
[root@nginx-proxy2 ~]# tar xf tomcat-connectors-1.2.40-src.tar.gz 
[root@nginx-proxy2 ~]# cd tomcat-connectors-1.2.40-src/native/
[root@nginx-proxy2 native]# rpm -ql httpd-devel|grep apxs

确保apxs存在,确保httpd-devel安装

[root@nginx-proxy2 native]# yum -y install httpd-devel
[root@nginx-proxy2 native]# rpm -ql httpd-devel|grep apxs
/usr/sbin/apxs
/usr/share/man/man8/apxs.8.gz
[root@nginx-proxy2 native]# 
[root@nginx-proxy2 native]# ./configure --with-apxs=/usr/sbin/apxs
[root@nginx-proxy2 native]# make && make install

确保mod_jk.so存在

[root@nginx-proxy2 modules]# ls /usr/lib64/httpd/modules/ |grep mod_jk
mod_jk.so
[root@nginx-proxy2 modules]# 

编辑配置文件:

[root@nginx-proxy2 conf.d]# cat mod_jk.conf 
LoadModule  jk_module  modules/mod_jk.so
JkWorkersFile  /etc/httpd/conf.d/workers.properties
JkLogFile  logs/mod_jk.log
JkLogLevel  debug
JkMount  /*  TomcatA
JkMount  /jkstatus/  stat-LinuxEA

编辑workers.properties!由于是mod_jk,使用ajp,so,端口为8009,

[root@nginx-proxy2 conf.d]# cat workers.properties 
worker.list=TomcatA,stat-LinuxEA
worker.TomcatA.port=8009
worker.TomcatA.host=10.0.0.53
worker.TomcatA.type=ajp13
worker.TomcatA.lbfactor=1
worker.stat-LinuxEA.type = status
[root@nginx-proxy2 conf.d]# pwd
/etc/httpd/conf.d
[root@nginx-proxy2 conf.d]# 

查看日志是否正常:

[root@nginx-proxy2 conf.d]# tail /var/log/httpd/mod_jk.log 
[Thu Feb 18 06:13:02.200 2016] [7345:139943077504992] [debug] ajp_connection_tcp_get_message::jk_ajp_common.c (1403): 03d0    75 6E 64 3A 20 23 44 32 41 34 31 43 3B 0A 20 20  - und:.#D2A41C;...
[Thu Feb 18 06:13:02.200 2016] [7345:139943077504992] [debug] ajp_connection_tcp_get_message::jk_ajp_common.c (1403): 03e0    7D 0A 20 20 74 64 2E 68 65 61 64 65 72 2D 6C 65  - }...td.header-le
[Thu Feb 18 06:13:02.200 2016] [7345:139943077504992] [debug] ajp_connection_tcp_get_message::jk_ajp_common.c (1403): 03f0    66 74 20 7B 0A 20 20 20 20 74 65 78 74 2D 61 6C  - ft.{.....text-al
[Thu Feb 18 06:13:02.201 2016] [7345:139943077504992] [debug] ws_write::mod_jk.c (552): written 8065 out of 8065
[root@nginx-proxy2 conf.d]# 

jk_mod正常后修改日志级别:JkLogLevel notice

[root@nginx-proxy2 conf.d]# cat mod_jk.conf 
LoadModule  jk_module  modules/mod_jk.so
JkWorkersFile  /etc/httpd/conf.d/workers.properties
JkLogFile  logs/mod_jk.log
JkLogLevel  notice
JkMount  /*  TomcatA
JkMount  /jkstatus/  stat-LinuxEA
[root@nginx-proxy2 conf.d]# 

在查看则正常

[root@nginx-proxy2 conf.d]# tail /var/log/httpd/mod_jk.log 
[Thu Feb 18 06:17:19.447 2016] [7346:139943077504992] [debug] jk_shm_close::jk_shm.c (700): Closed shared memory /etc/httpd/logs/jk-runtime-status.7337 childs=8
[Thu Feb 18 06:17:19.448 2016] [7345:139943077504992] [debug] jk_shm_close::jk_shm.c (700): Closed shared memory /etc/httpd/logs/jk-runtime-status.7337 childs=7
[Thu Feb 18 06:17:19.449 2016] [7344:139943077504992] [debug] jk_shm_close::jk_shm.c (700): Closed shared memory /etc/httpd/logs/jk-runtime-status.7337 childs=6
[Thu Feb 18 06:17:19.451 2016] [7343:139943077504992] [debug] jk_shm_close::jk_shm.c (700): Closed shared 
[root@nginx-proxy2 conf.d]# 

如果是编译安装,--with-apxs则指定相应的位置即可

[root@NFS-WEB1 native]# ./configure --with-apxs=/usr/local/apache/bin/apxs
[root@NFS-WEB1 native]#  make && make install

说明如下:
apache要使用mod_jk连接器,需要在启动时加载此连接器模块。为了便于管理与mod_jk模块相关的配置,这里使用一个专门的配置文件/etc/httpd/extra/httpd-jk.conf来保存相关指令及其设置。其内容如下:

# Load the mod_jk
LoadModule  jk_module  modules/mod_jk.so
JkWorkersFile  /etc/httpd/extra/workers.properties
JkLogFile  logs/mod_jk.log
JkLogLevel  debug
JkMount  /*  TomcatA
JkMount  /status/  stat1

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

为了让apache能使用/etc/httpd/extra/httpd-jk.conf配置文件中的配置信息,需要编辑/etc/httpd/httpd.conf,添加如下一行:
Include /etc/httpd/extra/httpd-jk.conf

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

根据其工作机制的不同,worker有多种不同的类型,这是需要为每个worker定义的一项属性woker..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定义此属性;

另外,在负载均衡模式中,专用的属性还有:
balance_workers:用于负载均衡模式中的各worker的名称列表,需要注意的是,出现在此处的worker名称一定不能在任何worker.list属性列表中定义过,并且worker.list属性中定义的worker名字必须包含负载均衡worker。具体示例请参见后文中的定义。
method:可以设定为R、T或B;默认为R,即根据请求的个数进行调度;T表示根据已经发送给worker的实际流量大小进行调度;B表示根据实际负载情况进行调度。
sticky_session:在将某请求调度至某worker后,源于此址的所有后续请求都将直接调度至此worker,实现将用户session与某worker绑定。默认为值为1,即启用此功能。如果后端的各worker之间支持session复制,则可以将此属性值设为0。

根据前文中的指定,这里使用/etc/httpd/extra/workers.properties来定义一个名为TomcatA的worker,并为其指定几个属性。文件内容如下:

worker.list=TomcatA,stat1
worker.TomcatA.port=8009
worker.TomcatA.host=172.16.100.1
worker.TomcatA.type=ajp13
worker.TomcatA.lbfactor=1
worker.stat1.type = status

至此,一个基于mod_jk模块与后端名为TomcatA的worker通信的配置已经完成,重启httpd服务即可生效。

0 分享

您可以选择一种方式赞助本站

支付宝扫码赞助

支付宝扫码赞助

日期: 2016-02-19分类: Tomcat

标签: tomcat

发表评论