2.2. 使用 mod_jk 时 Apache HTTP 服务器负载均衡配置
您可以将 Apache HTTP 服务器配置为使用 mod_jk 连接器将请求负载平衡到一组 servlet 容器。此设置包括后端 worker 节点的配置。
根据您是通过 Red Hat JBoss Core Services (JBCS)安装 mod_jk 还是使用 Red Hat Enterprise Linux (RHEL) Application Streams,请考虑以下指南:
-
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.62 时,请确保选择 2.4.x 作为 Apache 版本,然后选择 Tomcat/JWS 作为后端配置。
Red Hat JBoss Core Services 2.4.62 不支持将非升级的连接隧道到后端 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_jkworker 的名称。
-
在
2.2.2. 在 mod_jk中配置 worker 节点 复制链接链接已复制到粘贴板!
您可以通过在 workers.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 服务器主机上,在 JWS_HOME/tomcat <VERSION> /conf/server.xml 文件中默认配置 AJP 连接器。
但是,要将 worker 节点与 mod_jk 搭配使用,您必须执行以下额外的配置步骤:
-
在 JBoss Web Server 主机上,在
server.xml文件中,您必须在每个 worker 节点的 Engine 中为jvmRoute属性配置唯一值。 在 Apache HTTP 服务器主机上,在
worker.properties文件中,您必须为 worker 节点或负载均衡器指定secret属性。根据您使用的 Apache HTTP 服务器分发,worker.properties文件的位置会有所不同。注意使用 Tomcat AJP 连接器时需要
secret属性。
流程
在 JBoss Web 服务器主机上,在每个 worker 节点的 Engine 中为
jvmRoute属性配置唯一值:-
打开
JWS_HOME/tomcat_<VERSION>_/conf/server.xml文件。 输入以下详情:
<Engine name="Catalina" jvmRoute="node1" >重要确保
jvmRoute属性值与您在 Apache HTTP Server 主机上worker.properties文件中指定的 worker 名称匹配。
-
打开
在 Apache HTTP 服务器主机上,为 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