2.2. 使用 mod_jk 时 Apache HTTP 服务器负载均衡配置
您可以将 Apache HTTP 服务器配置为使用 mod_jk
连接器将请求负载平衡到一组 servlet 容器。此设置包括后端 worker 节点的配置。
根据您是否通过 Red Hat JBoss Core Services (JBCS)或使用 Red Hat Enterprise Linux (RHEL) Application Streams 安装 mod_jk
,请考虑以下指南:
-
JBCS 在
JBCS_HOME/httpd/conf.d/ 目录中提供
的示例配置文件。mod_
jk -
RHEL 在
/etc/httpd/conf.d/
目录中提供了mod_jk
的示例配置文件。
mod_jk 的示例配置文件名为
、mod_jk
.conf.sampleworker.properties.sample
、uriworkermap.properties.sample
。要使用这些示例而不是创建自己的配置文件,您可以删除 .sample
扩展,并根据需要修改文件内容。
您还可以使用红帽客户门户网站中的 Load Balancer 配置工具,快速为 mod_jk
和 Tomcat worker 节点生成最佳配置模板。当您将 Load Balancer Configuration 工具用于 Apache HTTP Server 2.4.51 时,请确保选择 2.4.x
作为 Apache 版本,然后选择 Tomcat/JWS
作为后端配置。
Red Hat JBoss Core Services 2.4.51 不支持将非升级的连接连接到后端 WebSocket 服务器。这意味着,当您为 mod_proxy_wstunnel
模块配置 ProxyPass
指令时,您必须确保 upgrade 参数没有设置为 NONE
。有关 mod_proxy_wstunnel
的更多信息,请参阅 Apache 文档。
2.2.1. 将 Apache HTTP 服务器配置为加载 mod_jk
您可以通过在 mod_jk.conf
文件中指定配置设置,将 Apache HTTP 服务器配置为加载 mod_jk
。根据您使用的 Apache HTTP 服务器分发,配置文件的位置会有所不同。
您还可以执行以下可选配置步骤:
-
除了
JkMount
指令外,您还可以使用JkMountFile
指令来指定挂载点的配置文件。配置文件包含多个 Tomcat 转发的 URL 映射。 - 您可以配置作为负载均衡器功能的 Apache HTTP 服务器,以记录处理请求的每个 worker 节点的详细信息。如果您需要对负载均衡器进行故障排除,这非常有用。
先决条件
- 已安装 Apache HTTP 服务器。
-
如果您使用 Application Streams 安装 Apache HTTP 服务器的 RHEL 发行版,您已 手动安装
mod_jk
。
流程
进入 Apache HTTP 服务器配置目录:
-
如果您使用 JBCS Apache HTTP 服务器,请转到
JBCS_HOME/httpd/conf.d
目录。 -
如果您使用 RHEL Apache HTTP 服务器,请转到
/etc/httpd/conf.d
目录。
-
如果您使用 JBCS Apache HTTP 服务器,请转到
创建名为
mod_jk.conf
的新文件,并输入以下配置详情:# Load mod_jk module # Specify the filename of the mod_jk lib LoadModule jk_module modules/mod_jk.so # Where to find workers.properties JkWorkersFile conf.d/workers.properties # Where to put jk logs JkLogFile logs/mod_jk.log # Set the jk log level [debug/error/info] JkLogLevel info # Select the log format JkLogStampFormat "[%a %b %d %H:%M:%S %Y]" # JkOptions indicates to send SSL KEY SIZE JkOptions +ForwardKeySize +ForwardURICompat -ForwardDirectories # JkRequestLogFormat JkRequestLogFormat "%w %V %T" # Mount your applications JkMount /application/* loadbalancer # Add shared memory. # This directive is present with 1.2.10 and # later versions of mod_jk, and is needed for # for load balancing to work properly JkShmFile logs/jk.shm # Add jkstatus for managing runtime data <Location /jkstatus/> JkMount status Require ip 127.0.0.1 </Location>
重要确保
LoadModule
指令引用您安装的mod_jk
原生二进制文件。注意JkMount
指令指定 Apache HTTP 服务器可以转发到mod_jk
模块的 URL。根据JkMount
指令的配置,mod_jk
将收到的 URL 转发到正确的 servlet 容器。要启用 Apache HTTP 服务器直接提供静态内容(或 PHP 内容),且只对 Java 应用程序使用负载均衡器,前面的配置示例指定,Apache HTTP 服务器仅向
mod_jk
负载均衡器使用 URL/application/*
发送请求。另外,您还可以将 Apache HTTP 服务器配置为将所有 URL 转发到
mod_jk
,方法是在JkMount
指令中指定/*
。可选: 要使用
JkMountFile
指令为挂载点指定配置文件,请执行以下步骤:进入 Apache HTTP 服务器配置目录:
-
如果您使用 JBCS Apache HTTP 服务器,请转到
JBCS_HOME/httpd/conf.d
目录。 -
如果您使用 RHEL Apache HTTP 服务器,请转到
/etc/httpd/conf.d
目录。
-
如果您使用 JBCS Apache HTTP 服务器,请转到
-
创建名为
uriworkermap.properties
的文件。 指定您要转发的 URL 和 worker 名称。
例如:
# Simple worker configuration file # Mount the Servlet context to the ajp13 worker /application=loadbalancer /application/*=loadbalancer
注意所需的语法格式为:
/URL=WORKER_NAME
前面的示例将
mod_jk
配置为将/application
的请求转发到 JBoss Web Server Tomcat 后端。在
mod_jk.conf
文件中,输入以下指令:# Use external file for mount points. # It will be checked for updates each 60 seconds. # The format of the file is: /url=worker # /examples/*=loadbalancer JkMountFile conf.d/uriworkermap.properties
可选: 要启用 Apache HTTP 服务器日志记录,请执行以下步骤之一:
-
在
JkRequestLogFormat
指令中包含%w
,如上一步中有关mod_jk.conf
设置所示。 -
通过在 Apache HTTP Server
LogFormat
(s)中包含%{JK_WORKER_NAME}n
,记录您要使用的mod_jk
worker 的名称。
-
在
其他资源
2.2.2. 在 mod_jk
中配置 worker 节点
您可以通过在 worker .properties
文件中指定设置,将多个 worker 节点配置为处理 Apache HTTP 服务器转发到 servlet 容器的请求。根据您使用的 Apache HTTP 服务器分发,配置文件的位置会有所不同。
此流程中的示例演示了如何在加权循环配置中定义两个 mod_jk
worker 节点,该配置使用两个 servlet 容器之间的粘性会话。
先决条件
-
您熟悉
worker.properties
指令的格式。 -
您已将 Apache HTTP 服务器配置为加载
mod_jk
。
流程
进入 Apache HTTP 服务器配置目录:
-
如果您使用 JBCS Apache HTTP 服务器,请转到
JBCS_HOME/httpd/conf.d
目录。 -
如果您使用 RHEL Apache HTTP 服务器,请转到
/etc/httpd/conf.d
目录。
-
如果您使用 JBCS Apache HTTP 服务器,请转到
-
创建名为
workers.properties
的文件。 输入以下配置详情:
# Define list of workers that will be used # for mapping requests worker.list=loadbalancer,status # Define Node1 # modify the host as your host IP or DNS name. worker.node1.port=8009 worker.node1.host=node1.mydomain.com worker.node1.type=ajp13 worker.node1.ping_mode=A worker.node1.lbfactor=1 worker.node1.secret=<YourSecret> # Define Node2 # modify the host as your host IP or DNS name. worker.node2.port=8009 worker.node2.host=node2.mydomain.com worker.node2.type=ajp13 worker.node2.ping_mode=A worker.node2.lbfactor=1 worker.node1.secret=<YourSecret> # Load-balancing behavior worker.loadbalancer.type=lb worker.loadbalancer.balance_workers=node1,node2 worker.loadbalancer.sticky_session=1 # Status worker for managing load balancer worker.status.type=status
注意在前面的示例中,确保将
host
、port
和secret
设置替换为与您的环境相关的值。重要使用 Tomcat AJP Connector 时,需要
secret
属性。您可以在workers.properties
文件中指定 worker 节点或负载均衡器的secret
属性。例如:worker.<WORKER_NAME>.secret=<YOUR_AJP_SECRET>
在上例中,将
<WORKER_NAME>
和<YOUR_AJP_SECRET>
替换为与您环境相关的值。
2.2.3. 配置 JBoss Web 服务器以使用 mod_jk
默认情况下,JBoss Web 服务器配置为接收来自 mod_jk
连接器的 Apache JServ 协议(AJP)流量。在 JBoss Web Server 主机上,在 JWS_HOME/tomcat <VERSION> /conf/server.xml
文件中默认配置 AJP 连接器。
但是,要使用带有 mod_jk
的 worker 节点,您必须执行以下附加配置步骤:
-
在 JBoss Web Server 主机上,在
server.xml
文件中,您必须在每个 worker 节点的 Engine 中为jvmRoute
属性配置唯一值。 在 Apache HTTP Server 主机上,在
worker.properties
文件中,您必须为 worker 节点或负载均衡器指定secret
属性。根据您使用的 Apache HTTP 服务器分发,worker.properties
文件的位置会有所不同。注意使用 Tomcat AJP 连接器时需要
secret
属性。
流程
在 JBoss Web Server 主机上,为每个 worker 节点的 Engine 中为
jvmRoute
属性配置唯一值:-
打开
JWS_HOME/tomcat_<VERSION>_/conf/server.xml
文件。 输入以下详情:
<Engine name="Catalina" jvmRoute="node1" >
重要确保
jvmRoute
属性值与您在 Apache HTTP 服务器主机上worker.properties
文件中指定的 worker 名称匹配。
-
打开
在 Apache HTTP Server 主机上,为 worker 节点或负载均衡器指定
secret
属性:进入 Apache HTTP 服务器配置目录:
-
如果您使用 JBCS Apache HTTP 服务器,请转到
JBCS_HOME/httpd/conf.d
目录。 -
如果您使用 RHEL Apache HTTP 服务器,请转到
/etc/httpd/conf.d
目录。
-
如果您使用 JBCS Apache HTTP 服务器,请转到
-
打开
workers.properties
文件。 确保
secret
属性以以下格式指定:worker.<WORKER_NAME>.secret=<YOUR_AJP_SECRET>`
注意确保将 <
WORKER_NAME>
; 和 <YOUR_AJP_SECRET
> 替换为适合您环境的值。注意如果您使用
ProxyPass
指令在负载均衡器上设置secret
,负载均衡器的所有成员都会继承这个secret
。例如:<Proxy balancer://mycluster>` BalancerMember ajp://node1:8009 route=node1 secret=YOUR_AJP_SECRET BalancerMember ajp://node2:8009 route=node2 secret=YOUR_AJP_SECRET </Proxy> ProxyPass /example/ balancer://mycluster/example/ stickysession=JSESSIONID|jsessionid