搜索

2.2. 使用 mod_jk 时 Apache HTTP 服务器负载均衡配置

download PDF

您可以将 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.sampleuriworkermap.properties.sample。要使用这些示例而不是创建自己的配置文件,您可以删除 .sample 扩展,并根据需要修改文件内容。

注意

您还可以使用红帽客户门户网站中的 Load Balancer 配置工具,快速为 mod_jk 和 Tomcat worker 节点生成最佳配置模板。当您将 Load Balancer Configuration 工具用于 Apache HTTP Server 2.4.57 时,请确保选择 2.4.x 作为 Apache 版本,然后选择 Tomcat/JWS 作为后端配置。

注意

Red Hat JBoss Core Services 2.4.57 不支持将非升级的连接连接到后端 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 节点的详细信息。如果您需要对负载均衡器进行故障排除,这非常有用。

先决条件

流程

  1. 进入 Apache HTTP 服务器配置目录:

    • 如果您使用 JBCS Apache HTTP 服务器,请转到 JBCS_HOME/httpd/conf.d 目录。
    • 如果您使用 RHEL Apache HTTP 服务器,请转到 /etc/httpd/conf.d 目录。
  2. 创建名为 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 指令中指定 /*

  3. 可选: 要使用 JkMountFile 指令为挂载点指定配置文件,请执行以下步骤:

    1. 进入 Apache HTTP 服务器配置目录:

      • 如果您使用 JBCS Apache HTTP 服务器,请转到 JBCS_HOME/httpd/conf.d 目录。
      • 如果您使用 RHEL Apache HTTP 服务器,请转到 /etc/httpd/conf.d 目录。
    2. 创建名为 uriworkermap.properties 的文件。
    3. 指定您要转发的 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 后端。

    4. 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
  4. 可选: 要启用 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 容器之间的粘性会话。

先决条件

流程

  1. 进入 Apache HTTP 服务器配置目录:

    • 如果您使用 JBCS Apache HTTP 服务器,请转到 JBCS_HOME/httpd/conf.d 目录。
    • 如果您使用 RHEL Apache HTTP 服务器,请转到 /etc/httpd/conf.d 目录。
  2. 创建名为 workers.properties 的文件。
  3. 输入以下配置详情:

    # 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
    注意

    在前面的示例中,确保将 hostportsecret 设置替换为与您的环境相关的值。

    重要

    使用 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 属性。

流程

  1. 在 JBoss Web Server 主机上,为每个 worker 节点的 Engine 中为 jvmRoute 属性配置唯一值:

    1. 打开 JWS_HOME/tomcat_<VERSION>_/conf/server.xml 文件。
    2. 输入以下详情:

      <Engine name="Catalina" jvmRoute="node1" >
      重要

      确保 jvmRoute 属性值与您在 Apache HTTP 服务器主机上 worker.properties 文件中指定的 worker 名称匹配。

  2. 在 Apache HTTP Server 主机上,为 worker 节点或负载均衡器指定 secret 属性:

    1. 进入 Apache HTTP 服务器配置目录:

      • 如果您使用 JBCS Apache HTTP 服务器,请转到 JBCS_HOME/httpd/conf.d 目录。
      • 如果您使用 RHEL Apache HTTP 服务器,请转到 /etc/httpd/conf.d 目录。
    2. 打开 workers.properties 文件。
    3. 确保 secret 属性以以下格式指定:

      worker.<WORKER_NAME>.secret=<YOUR_AJP_SECRET>`
      注意

      确保将 < WORKER_NAME&gt; 和 < 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
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.