1. 云栖社区>
  2. >
  3. 正文

LAMT基于mod_jk配置使用步骤详解

作者:用户 来源:互联网 时间:2016-09-11 16:25:56

tomcat文件负载均衡模块配置属性

LAMT基于mod_jk配置使用步骤详解 - 摘要: 本文讲的是LAMT基于mod_jk配置使用步骤详解, mod_jk 配置apache通过mod_jk模块与Tomcat连接 mod_jk是ASF的一个项目,是一个工作于apache端基于AJP协议与Tomcat通信的连接器,它是apache的一个模块,是AJP协议的客户端(服务端是T

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

LAMT基于mod_jk配置使用步骤详解-q mtjk0002s

[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服务即可生效

以上是云栖社区小编为您精心准备的的内容,在云栖社区的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索tomcat , 文件 , 负载均衡 , 模块 , 配置 属性 q mtjk0002s、http mt.guojk.com、装修流程步骤详解图、热血江湖结婚步骤详解、装修流程步骤详解,以便于您获取更多的相关知识。