ajp协议: httpd 代理 tomcat集群

1, ajp proxy

  • ajp代理使用场景:后台存在多个tomcat服务时(单个tomcat服务,使用代理性能低)
    在这里插入图片描述
############ ajp: tcp协议代理: 4层 ############
[root@c7-docker conf]# cat /opt/apache-tomcat-8.5.63/conf/server.xml

<Connector port="8009" protocol="AJP/1.3"
       address="0.0.0.0"
       maxHttpHeaderSize="8192"
       enableLookups="false"
       connectionTimeout="20000"
       URIEncoding="utf-8"
       acceptCount="1000"
       redirectPort="8443"
       secretRequired=""
       secret=""/>

[root@c7-docker conf]# cat /etc/httpd/conf.d/a.conf
Listen 81
<VirtualHost *:81>
  ServerAdmin [email protected]
  #DocumentRoot "/www/81"
  ServerName host.example.com
  ErrorLog "logs/host.example.com-error_log"
  TransferLog "logs/host.example.com-access_log"

  ProxyVia On
  ProxyRequests Off
  ProxyPreserveHost On
  ProxyPass / ajp://127.0.0.1:8009/
  ProxyPassReverse / ajp://127.0.0.1:8009/
  Header set Access-Control-Allow-Origin *
</VirtualHost>

Listen 822
<proxy balancer://ajp_tom_cluster>
  BalancerMember ajp://127.0.0.1:8009    loadfactor=10
  BalancerMember ajp://192.168.56.6:8009 loadfactor=10
</proxy>
<VirtualHost *:822>
  ProxyRequests Off
  ErrorLog "logs/822-error_log"
  CustomLog "logs/822-access_log" common
  ProxyPass / balancer://ajp_tom_cluster/
  ProxyPassReverse / balancer://ajp_tom_cluster/
  Header set Access-Control-Allow-Origin * 
</VirtualHost>

2, mod_jk: httpd 模块

a, 下载mod_jk源码包,编译httpd插件

文档:
https://tomcat.apache.org/connectors-doc/

#解压后,进入native目录
[root@c7-docker native]# yum install -y  httpd-devel #获取apxs可执行文件
[root@c7-docker native]# ./configure   --with-apxs=/usr/bin/apxs 
#./configure --with-apache=/home/apache24/httpd-2.4.12

[root@c7-docker native]# ll /usr/lib64/httpd/modules/mod_jk.so
-rwxr-xr-x 1 root root 1566328 Feb 26 15:39 /usr/lib64/httpd/modules/mod_jk.so

[root@c7-docker native]# ls apache-2.0/
bldjk54.qclsrc  config.m4  Makefile.apxs     Makefile.in  mod_jk.a  mod_jk.la  mod_jk.o
bldjk.qclsrc    Makefile   Makefile.apxs.in  Makefile.vc  mod_jk.c  mod_jk.lo  mod_jk.so

[root@c7-docker native]# head /etc/httpd/conf.modules.d/00-proxy.conf
# This file configures all the proxy modules:
LoadModule jk_module   modules/mod_jk.so

[root@c7-docker native]# httpd -M |grep jk
 jk_module (shared)

b, 配置mod_jk

文档:
https://tomcat.apache.org/connectors-doc/common_howto/quick.html
https://tomcat.apache.org/tomcat-4.0-doc/config/ajp.html
workers.properties 配置:https://tomcat.apache.org/connectors-doc/reference/workers.html

[root@c7-docker conf]# cat /etc/httpd/conf.d/a.conf
# Load mod_jk
LoadModule jk_module   modules/mod_jk.so
# Configure mod_jk
JkShmFile     /var/log/httpd/mod_jk.shm
JkWorkersFile /etc/httpd/conf/jk-workers.properties
JkLogFile /var/log/httpd/mod_jk.log
JkLogLevel info
#
Listen 82
<VirtualHost *:82>
  DocumentRoot /www/82
  JkMount /* ajp13
  #JkMount /*.jsp ajp13
  #JkMount /servlet/* ajp13
  Header set Access-Control-Allow-Origin *
</VirtualHost>


[root@c7-docker conf]# cat /etc/httpd/conf/jk-workers.properties
workers.tomcat_home=/opt/apache-tomcat-8.5.63
workers.java_home=/usr/java/default
ps=/
worker.list=ajp12, ajp13
# Definition for Ajp13 worker
worker.ajp13.port=8009
worker.ajp13.host=127.0.0.1
worker.ajp13.type=ajp13
# worker "ajp13" uses connections, which will stay no more than 10mn in the connection pool
worker.ajp13.connection_pool_timeout=600
# worker "ajp13" ask operating system to send KEEP-ALIVE signal on the connection
worker.ajp13.socket_keepalive=1
######### lb 多个后台tomcat  ##########
[root@c7-docker conf]# cat /etc/httpd/conf.d/a.conf
# Load mod_jk
LoadModule jk_module   modules/mod_jk.so
# Configure mod_jk
JkShmFile     /var/log/httpd/mod_jk.shm
JkWorkersFile /etc/httpd/conf/jk-workers.properties
JkLogFile /var/log/httpd/mod_jk.log
JkLogLevel info
#
Listen 82
<VirtualHost *:82>
  DocumentRoot /www/82
  JkMount /* lbcluster
  JkMount /jkstatus  stat1
  #JkMount /*.jsp ajp13
  #JkMount /servlet/* ajp13
  Header set Access-Control-Allow-Origin *
</VirtualHost>


[root@c7-docker conf]# cat /etc/httpd/conf/jk-workers.properties
workers.tomcat_home=/opt/apache-tomcat-8.5.63
workers.java_home=/usr/java/default
ps=/
worker.list = lbcluster,stat1
worker.basic.socket_keepalive=1
worker.basic.connect_timeout=10000

# Definition for Ajp13 worker
worker.lbcluster.type = lb
worker.lbcluster.sticky_session = 0
worker.lbcluster.balance_workers = TomcatA, TomcatB
#
worker.stat1.type = status
#
worker.TomcatA.type = ajp13
worker.TomcatA.host = 192.168.56.6
worker.TomcatA.port = 8009
worker.TomcatA.lbfactor = 1
#
worker.TomcatB.type = ajp13
worker.TomcatB.host = 127.0.0.1
worker.TomcatB.port = 8010
worker.TomcatB.lbfactor = 1


#tomcat server.xml 
[root@c7-docker conf]# cat /opt/apache-tomcat-8.5.63/conf/server.xml:jvmRoute="TomcatB"
 <Connector port="8009" protocol="AJP/1.3"
       address="0.0.0.0"
       maxHttpHeaderSize="8192"
       enableLookups="false"
       connectionTimeout="20000"
       URIEncoding="utf-8"
       acceptCount="1000"
       redirectPort="8443"
       secretRequired=""
       secret=""/>
       
 <!-- You should set jvmRoute to support load-balancing via AJP ie :jvmRoute="jvm1"  -->
    <Engine name="Catalina" defaultHost="localhost" jvmRoute="TomcatB">	


#查看mod_jk日志
[root@c7-docker ROOT]# tailf /var/log/httpd/mod_jk.log
[Wed Mar 03 14:16:10.045 2021] [19101:139632599426816] [info] ajp_connect_to_endpoint::jk_ajp_common.c (1064): (TomcatB) Failed opening socket to (192.168.56.117:8010) (errno=111)
[Wed Mar 03 14:16:10.045 2021] [19101:139632599426816] [error] ajp_send_request::jk_ajp_common.c (1724): (TomcatB) connecting to backend failed. Tomcat is probably not started or is listening on the wrong port (errno=111)
[Wed Mar 03 14:16:10.045 2021] [19101:139632599426816] [info] ajp_service::jk_ajp_common.c (2774): (TomcatB) sending request to tomcat failed (recoverable), because of error during request sending (attempt=2)
[Wed Mar 03 14:16:10.045 2021] [19101:139632599426816] [error] ajp_service::jk_ajp_common.c (2795): (TomcatB) connecting to tomcat failed (rc=-3, errors=1, client_errors=0).
[Wed Mar 03 14:16:10.045 2021] [19101:139632599426816] [info] service::jk_lb_worker.c (1600): service failed, worker TomcatB is in error state
[Wed Mar 03 14:16:10.045 2021] [19101:139632599426816] [info] service::jk_lb_worker.c (1652): Forcing recovery once for 2 workers
[Wed Mar 03 14:23:14.893 2021] [27857:140686857304256] [info] init_jk::mod_jk.c (3591): mod_jk/1.2.48 initialized

猜你喜欢

转载自blog.csdn.net/eyeofeagle/article/details/114259928