HTTP 连接器和负载平衡指南 5.6


Red Hat JBoss Web Server 5.6

用于红帽 JBoss Web 服务器 5.6

摘要

安装并配置使用 mod_clustermod_jkconnector 模块以及 Red Hat JBoss Core Services Apache HTTP 服务器提供的其它模块的负载平衡解决方案。

对红帽文档提供反馈

我们感谢您对我们的技术内容的反馈,并且鼓励您告诉我们您的想法。如果您想添加注释、提供见解、更正错误甚至提问问题,您可以在文档中直接这样做。

注意

您必须有一个红帽帐户并登录到客户门户。

要从客户门户提交文档反馈,请执行以下操作:

  1. 选择 多页 HTML 格式。
  2. 单击文档右上角的" 反馈 "按钮。
  3. 突出显示您要提供反馈的文本部分。
  4. 单击突出显示的文本旁边的 添加反馈 对话框。
  5. 在页面右侧的文本框中输入您的反馈,然后单击 Submit

每次提交反馈时,我们会自动创建跟踪问题。点击 Submit 并开始监视问题或添加更多注释后,打开显示的链接。

感谢您的反馈。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。我们从这四个术语开始:master、slave、黑名单和白名单。由于此项工作十分艰巨,这些更改将在即将推出的几个发行版本中逐步实施。有关更多详情,请参阅我们的首席技术官 Chris Wright 提供的消息

第 1 章 HTTP 连接器模块

Red Hat JBoss Core Services 包括两个不同的 HTTP 连接器模块,可用于负载均衡到一组后端 servlet 容器的 HTTP 请求:

  • Apache Tomcat 连接器(mod_jk) 支持将 HTTP 请求负载平衡到一组 servlet 容器,同时维护粘性会话并通过 Apache JServ Protocol(AJP)进行通信。
  • JBoss HTTP 连接器(mod_cluster) 是一个比 mod_jk 更高级的负载均衡器。mod_cluster 模块提供 mod_jk 和其他功能,如实时负载均衡计算、应用生命周期控制、自动代理发现和多个协议支持。

HTTP 连接器和负载均衡指南描述了如何安装和配置 mod_proxymod_cluster 连接器。本指南还提供有关 在线证书状态协议(OCSP) 的信息,它包含了一组 使用 mod_auth_kerb 的基本负载均衡和 Kerberos 验证 工作示例。

重要

本指南中显示的大部分文件和目录路径是在 Red Hat Enterprise Linux 上安装 JBoss Core Services。对于其他平台,请使用正确的安装路径,如 JBoss 核心服务 安装指南中的 指定。

第 2 章 使用 Apache Tomcat 连接器进行负载均衡(mod_jk)

Apache Tomcat 连接器 mod_jk 是一个插件,它允许 Apache HTTP 服务器将 Web 请求转发到后端 servlet 容器。mod_jk 模块还允许 Apache HTTP 服务器在维护粘性会话的同时将请求负载平衡到一组 servlet 容器。

2.1. mod_jk 安装

mod_jk 模块包含在 JBoss Core Services 安装的 Apache HTTP Server 部分中。

您可以按照 Red Hat JBoss Core Services Apache HTTP Server 安装指南 中的步骤下载并安装适用于您的操作系统的 Apache HTTP 服务器。

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

您可以将 Apache HTTP 服务器配置为使用 mod_jk 将请求负载平衡到一组 servlet 容器。这个设置包括后端 worker 节点的配置。

红帽 JBoss Core Services 在 JBCS_HOME/httpd/conf.d/ 目录中提供了 mod_ jk 的示例配置文件。这些示例配置文件名为 mod_jk.conf.sampleworker.properties.sampleuriworkermap.properties.sample。要使用这些示例而不是创建自己的配置文件,您可以删除 .sample 扩展,并根据需要修改文件内容。

注意

您还可以使用红帽客户门户网站上的 Load Balancer 配置工具,为 mod_jk 和 Tomcat worker 节点快速生成最佳配置模板。

当您将 Load Balancer Configuration 工具用于 JBoss Web Server 5.6 时,请确保选择 2.4.x 作为 Apache 版本,然后选择 Tomcat 作为后端配置。

2.3. 将 Apache HTTP 服务器配置为加载 mod_jk

您可以通过在 mod_jk.conf 文件中指定配置设置,将 Apache HTTP 服务器配置为加载 mod_jk。

您还可以执行以下可选配置步骤:

  • 除了 JkMount 指令外,您还可以使用 JkMountFile 指令指定挂载点的配置文件。配置文件包含用于 Tomcat 转发的多个 URL 映射。
  • 您可以配置作为负载均衡器运行的 Apache HTTP 服务器,以记录处理请求的每个 worker 节点的详情。如果您需要对负载均衡器进行故障排除,这很有用。

流程

  1. 前往 JBCS_HOME/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>
    Copy to Clipboard
    重要

    确保 LoadModule 指令引用您已安装的 mod_jk 原生二进制文件。

    注意

    JkMount 指令指定 Apache HTTP 服务器可以转发到 mod_jk 模块的 URL。根据 JkMount 指令的配置,mod_jk 会将接收的 URL 转发到正确的 servlet 容器。

    要启用 Apache HTTP 服务器直接提供静态内容(或 PHP 内容),且只使用 Java 应用程序的负载均衡器,前面的配置示例指定 Apache HTTP 服务器仅向 mod_jk 负载均衡器发送请求。

    或者,您可以通过在 JkMount 指令中指定 /*,将 Apache HTTP 服务器配置为将所有 URL 转发到 mod_jk

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

    1. 前往 JBCS_HOME/httpd/conf.d/ 目录。
    2. 创建名为 uriworkermap.properties 的文件。
    3. 指定您要转发和 worker 名称的 URL。

      例如:

      # Simple worker configuration file
      
      # Mount the Servlet context to the ajp13 worker
      /application=loadbalancer
      /application/*=loadbalancer
      Copy to Clipboard
      注意

      所需语法的格式是: /URL=WORKER_NAME

      前面的示例将 mod_jk 配置为将 /application 的请求转发到 JBoss Web Server Tomcat 后端。

    4. JBCS_HOME/httpd/conf.d/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
      Copy to Clipboard
  4. 可选:要启用 Apache HTTP 服务器日志,请执行以下步骤之一:

    • JkRequestLogFormat 指令中包含 %w,如上一步中有关 mod_jk.conf 设置所示。
    • 通过在 Apache HTTP 服务器 LogFormat(s)中包含 %{JK_WORKER_NAME}n 记录要使用的 mod_jk worker 名称。

2.4. 在 mod_jk中配置 worker 节点

您可以配置多个 worker 节点,以处理 Apache HTTP 服务器转发到 servlet 容器的请求。

此流程中的示例演示了如何在加权轮循配置中定义两个 mod_jk worker 节点,它使用两个 servlet 容器之间的粘性会话。

先决条件

流程

  1. 前往 JBCS_HOME/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
    
    # 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
    
    # 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
    Copy to Clipboard
    注意

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

2.5. 配置 Tomcat 以使用 mod_jk

Tomcat 配置为默认从 mod_jk 接收 Apache JServ Protocol(AJP)流量。但是,在将 worker 节点用于 mod_jk 之前,您必须执行一个额外的配置步骤。

JBCS_HOME/tomcat <VERSION> /conf/server.xml 文件中默认配置 AJP 连接器:

<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
Copy to Clipboard

除了启用了 AJP 的连接器外,还必须在每个 worker 节点的引擎中为 jvmRoute 属性配置唯一值:

流程

  • 要为每个 worker 节点的引擎中的 jvmRoute 属性配置唯一值,请输入以下详情:

    <Engine name="Catalina" jvmRoute="node1" >
    Copy to Clipboard
    重要

    确保 jvmRoute 属性值与 worker .properties 文件中指定的 worker 名称匹配。

第 3 章 使用 JBoss HTTP 连接器进行负载平衡(mod_cluster)

mod_cluster 连接器是降低 JBoss EAP 和 JBoss Web 服务器 Tomcat 的配置、智能负载平衡解决方案。mod_cluster 模块基于最初由 JBoss mod_cluster 社区项目开发的技术。

3.1. JBoss HTTP 连接器(mod_cluster)

mod_cluster 模块负载均衡到 JBoss EAP 和 JBoss Web Server Tomcat 工作节点的 HTTP 请求。mod_cluster 模块使用 Apache HTTP 服务器作为代理服务器。

mod_cluster的主要功能

mod_cluster 连接器与 mod_jk 连接器相比有几个优点:

  • 启用 mod_cluster 模块后,mod_cluster 管理协议(MCMP)是 Tomcat 服务器和 Apache HTTP 服务器之间的额外连接。Tomcat 服务器使用 MCMP 使用一组自定义 HTTP 方法,将服务器端负载图和生命周期事件传输至 Apache HTTP 服务器。
  • 使用 mod_cluster 的动态配置 Apache HTTP 服务器允许 Tomcat 服务器加入负载平衡安排,无需手动配置。
  • Tomcat 服务器执行负载计算,而不是依赖于 Apache HTTP 服务器。这使得负载均衡指标比其他连接器更准确。
  • mod_cluster 连接器提供细粒度应用程序生命周期控制。每个 Tomcat 服务器将 web 应用程序上下文生命周期事件转发到 Apache HTTP 服务器。这些生命周期事件包括告知 Apache HTTP 服务器启动或停止特定上下文的路由请求。这可防止最终用户因为不可用资源而看到 HTTP 错误。
  • 您可以使用 Apache JServ Protocol(AJP)、HJP)、Harv)或使用 mod_cluster 的 Hypertext 传输协议 Secure(HTTPS)传输。

mod_cluster 组件

在代理服务器中,mod_cluster 由四个 Apache 模块组成:

组件Description

mod_cluster_slotmem.so

共享内存管理器模块通过多个 Apache HTTP 服务器进程共享实时工作程序节点信息。

mod_manager.so

Cluster Manager 模块接收和确认来自 worker 节点的消息,包括节点注册、节点加载数据和节点应用程序生命周期事件。

mod_proxy_cluster.so

Proxy Balancer 模块处理到集群节点的请求路由。Proxy Balancer 根据集群中的应用程序位置、每个集群节点的当前状态和 Session ID(如果请求是已建立的会话的一部分)选择适当的目标节点。

mod_advertise.so

Proxy Advertisement 模块通过 UDP 多播消息广播代理服务器的存在。服务器公告消息包含 IP 地址和端口号,代理服务器正在侦听来自希望加入负载平衡集群的 worker 节点的响应。

3.2. mod_cluster 字符限制

mod_cluster 模块使用共享内存来保留节点描述。共享内存是在 Apache HTTP 服务器启动时创建的,每个项目的结构是固定的。

当您定义代理服务器和 worker 节点属性时,请确定您遵循以下字符限制:

属性最大字符限制Description

别名长度

100 个字符

alias 对应于对应虚拟主机的网络名称;名称在 Host 元素中定义。

上下文长度

40 个字符

例如,如果 myapp.war 已部署到 /myapp 中,则 /myapp 包含在上下文中。

balancer 名称长度

40 个字符

这是 mbean 中的 balancer 属性。

JVMRoute 字符串长度

80 个字符

< Engine> 元素中的 JVMRoute

域名长度

20 个字符

这是 mbean 中的域属性。

节点的主机名长度

64 个字符

这是 < Connector> 元素中的主机名 地址。

节点的端口长度

7 个字符

这是 < Connector> 元素中的 port 属性。例如: 8009 为 4 个字符。

节点的方案长度

6 个字符

这是连接器的协议。可能的值有 httphttpsajp

Cookie 名称长度

30 个字符

这是会话 ID 的标头 Cookie 名称。默认值为 JSESSIONID,它基于 org.apache.catalina.Globals.SESSION_COOKIE_NAME 属性。

路径名称长度

30 个字符

这是会话 ID 的参数名称。默认值为 JSESSIONID,它基于 org.apache.catalina.Globals.SESSION_PARAMETER_NAME 属性。

会话 ID 长度

120 个字符

会话 ID 的格式如下:BE81FAA969BF64C8EC2B6600457EAAAA.node01

3.3. mod_cluster 安装

mod_cluster 模块包含在 JBoss Core Services 安装的 Apache HTTP Server 部分中。

您可以按照 Red Hat JBoss Core Services Apache HTTP Server 安装指南 中的步骤下载并安装适用于您的操作系统的 Apache HTTP 服务器。

3.4. 使用 mod_cluster时的 Apache HTTP 服务器负载均衡配置

在 JBoss Web Server 2.1 及更高版本中,默认情况下为 Apache HTTP 服务器正确配置了 mod_cluster。有关设置自定义配置的更多信息,请参阅配置 基本代理服务器

注意

您还可以使用红帽客户门户网站上的 Load Balancer Configuration 工具为 mod_cluster 和 Tomcat worker 节点快速生成最佳配置模板。

当您将 Load Balancer Configuration 工具用于 JBoss Web Server 5.6 时,请确保选择 2.4.x 作为 Apache 版本,然后选择 Tomcat 作为后端配置。

3.5. 配置基本代理服务器

您可以将 Apache HTTP 服务器配置为作为代理服务器,转发 web 客户端和后端 web 服务器之间的请求和响应。您必须配置代理服务器监听器从后端 worker 节点接收连接请求和响应。当您要配置使用 mod_cluster 的负载平衡代理服务器时,还必须为管理频道配置虚拟主机。

先决条件

流程

  1. 打开 mod_cluster 配置文件。

    注意

    mod_cluster 配置文件通常位于 JBCS_HOME/httpd/conf.d/mod_cluster.conf 目录中。

  2. 要为代理服务器创建 Listen 指令,请在 mod_cluster.conf 文件中输入以下行:

    Listen IP_ADDRESS:PORT_NUMBER
    Copy to Clipboard
    注意

    在前面的示例中,将 IP_ADDRESS 替换为代理服务器用来与 worker 节点通信的服务器网络接口地址,并将 PORT_NUMBER 替换为代理服务器侦听的端口。

    确保为传入 TCP 连接打开端口。

  3. 要创建虚拟主机,请在 mod_cluster.conf 文件中输入以下详情:

    <VirtualHost IP_ADDRESS:PORT_NUMBER>
    
       <Directory />
          Require ip IP_ADDRESS
       </Directory>
    
       KeepAliveTimeout 60
       MaxKeepAliveRequests 0
    
       ManagerBalancerName mycluster
       AdvertiseFrequency 5
       EnableMCPMReceive On
    
    </VirtualHost>
    Copy to Clipboard
    注意

    在前面的示例中,将 IP_ADDRESSPORT_NUMBER 替换为您为 Listen 指令指定的服务器网络接口和端口号的地址。

    此地址和端口组合仅用于 mod_cluster 管理消息。此地址和端口组合不用于常规流量。

有关配置 mod_jk 并启动 Apache HTTP 服务器服务的详情,请查看 Red Hat JBoss Core Services Apache HTTP Server 安装指南

3.5.1. 禁用服务器公告

代理服务器使用 UDP 多播来公告其自身。AdvertiseFrequency 指令指示服务器默认每 10 秒发送服务器广告消息。服务器广告信息包含您在 VirtualHost 定义中指定的 IP_ADDRESSPORT_NUMBER。配置为响应服务器公告的 worker 节点,使用此信息在代理服务器中注册。如果要阻止 worker 节点使用代理服务器注册,您可以选择性地禁用服务器公告。

注意

当代理服务器和 worker 节点之间有 UDP 多播时,服务器公告会添加 worker 节点,而无需在代理服务器上进行进一步配置。服务器公告只需要在 worker 节点上进行最少的配置。

流程

  1. 打开 mod_cluster 配置文件。

    注意

    mod_cluster 配置文件通常位于 JBCS_HOME/httpd/conf.d/mod_cluster.conf 目录中。

  2. VirtualHost 定义中添加以下指令:

    ServerAdvertise Off
    Copy to Clipboard
    注意

    如果禁用服务器广告,或者代理服务器和 worker 节点之间无法看到 UDP 多播,您可以使用静态代理服务器列表配置 worker 节点。在这两种情况下,您不需要使用 worker 节点列表配置代理服务器。

3.5.2. 记录 worker 节点详情

当您配置使用 mod_cluster 的负载均衡代理服务器时,您可以选择将 Apache HTTP 服务器配置为记录处理请求的每个 worker 节点的详细信息。如果需要对负载均衡器进行故障排除,请记录 worker 节点详情。

流程

  1. 打开 mod_cluster 配置文件。

    注意

    mod_cluster 配置文件通常位于 JBCS_HOME/httpd/conf.d/mod_cluster.conf 目录中。

  2. 在您的 Apache HTTP Server LogFormat 指令中添加以下详情:

    %{BALANCER_NAME}e ::
    The name of the balancer that served the request.
    
    %{BALANCER_WORKER_NAME}e ::
    The name of the worker node that served the request.
    Copy to Clipboard

3.6. 在 mod_cluster中配置 Tomcat worker 节点

使用 mod_cluster 时,您可以将 Tomcat worker 节点配置为只以非集群模式运行的 JBoss Web Server Tomcat 服务。在这种情况下,在计算负载平衡因时,一次只能使用一个负载指标。

注意

JBoss Web Server Tomcat worker 节点只支持 mod_cluster 功能的子集。JBoss EAP 提供了完整 mod_cluster 功能。

流程

  1. 要为 Tomcat 添加监听程序,请在 JWS_HOME/tomcat <VERSION> /conf/server.xml 文件中的其他 Listener 元素下添加以下 Listener 元素:

    <Listener className="org.jboss.modcluster.container.catalina.standalone.ModClusterListener" advertise="true" stickySession="true" stickySessionForce="false" stickySessionRemove="true" />
    Copy to Clipboard
  2. 要为 worker 节点指定唯一身份,请编辑 JWS_HOME/tomcat &lt;VERSION&gt; /conf/server.xml 文件,将 jvmRoute 属性和值添加到 Engine 元素中:

    <Engine name="Catalina" defaultHost="localhost" jvmRoute="worker01">
    Copy to Clipboard
  3. 要配置 STATUS MCMP 消息频率,请修改 org.jboss.modcluster.container.catalina.status-frequency Java 系统属性。

    例如:

    -Dorg.jboss.modcluster.container.catalina.status-frequency=6
    Copy to Clipboard
    注意

    Tomcat worker 节点会定期将包含其当前负载状态的状态信息发送到 Apache HTTP 服务器负载均衡器。这些消息的默认频率是 10 秒。如果您有数百个 worker 节点,则 STATUS MCMP 信息可能会增加 Apache HTTP 服务器网络上的流量拥塞。

    您可以通过修改 org.jboss.modcluster.container.catalina.status-frequency Java 系统属性来配置 MCMP 消息频率。默认情况下,属性接受以十秒为单位指定的值。例如,将 属性设置为 1 表示 10 秒。在前面的示例中,属性设为 6,即 60 秒。

  4. 可选:要为代理服务器公告配置防火墙,请完成以下步骤之一,在 worker 节点的防火墙中为 UDP 连接打开端口 23364

    • Red Hat Enterprise Linux 7:

      firewall-cmd --permanent --zone=public --add-port=23364/udp
      Copy to Clipboard
    • 对于使用 PowerShell 的 Microsoft Windows

      Start-Process "$psHome\powershell.exe" -Verb Runas -ArgumentList '-command "NetSh Advfirewall firewall add rule name="UDP Port 23364" dir=in  action=allow protocol=UDP localport=23364"'
      Start-Process "$psHome\powershell.exe" -Verb Runas -ArgumentList '-command "NetSh Advfirewall firewall add rule name="UDP Port 23364" dir=out action=allow protocol=UDP localport=23364"'
      Copy to Clipboard
      注意

      当代理服务器使用 mod_cluster 时,代理服务器可以使用 UDP 多播来公告自身。大多数操作系统防火墙默认阻止服务器广告功能。要启用服务器公告并接收这些多播信息,您可以在 worker 节点的防火墙上打开 UDP 连接的端口 23364,如上例中所示。

重要

Red Hat Enterprise Linux 6 不再被支持,随后从文档中被删除。

3.7. 配置 worker 节点以使用静态代理服务器列表操作

服务器公告允许 worker 节点动态发现并注册到代理服务器。如果禁用 UDP 多播,或者服务器广告被禁用,您必须使用静态代理服务器地址和端口配置 JBoss Web 服务器 worker 节点。

流程

  1. 打开 JWS_HOME/tomcat &lt;VERSION&gt; /conf/server.xml 文件。
  2. 要定义 mod_cluster 侦听器并禁用动态代理发现,请添加或更改 ModCluster Listener 的 Listener 元素。

    例如:

    <Listener className="org.jboss.modcluster.container.catalina.standalone.ModClusterListener" advertise="false" stickySession="true" stickySessionForce="false" stickySessionRemove="true"/>
    Copy to Clipboard
    注意

    确保将 advertise 属性设置为 false

  3. 要创建静态代理服务器列表,请通过以以下格式添加以逗号分隔的代理列表来更新 proxyList 属性:IP_ADDRESS:端口,IP_ADDRESS:PORT

    例如:

    <Listener className="org.jboss.modcluster.container.catalina.standalone.ModClusterListener" advertise="false" stickySession="true" stickySessionForce="false" stickySessionRemove="true" proxyList="10.33.144.3:6666,10.33.144.1:6666"/>
    Copy to Clipboard

第 4 章 使用 OCSP 保护连接

在线证书状态协议(OCSP)是一种技术,它允许 Web 浏览器和 Web 服务器通过安全连接进行通信。加密的数据从一侧发送,并在处理前由另一端解密。Web 浏览器和 Web 服务器都加密和解密数据。

4.1. 在线证书状态协议

当 Web 浏览器和 Web 服务器通过安全连接进行通信时,服务器将以证书的形式提供一组凭据。然后,浏览器验证证书并发送证书状态信息的请求。服务器会使用当前、过期或未知的证书状态进行响应。

证书包含以下类型的信息:

  • 通信语法
  • 控制信息(如启动时间、结束时间和地址信息)以访问在线证书状态协议(OCSP)响应器。

Web 服务器使用 OCSP 响应程序检查证书状态。您可以将 Web 服务器配置为使用证书或另一个 OCSP 响应者中列出的 OCSP 响应者。OCSP 允许过期证书的宽限期,允许在有限时间内访问服务器,然后再续订证书。

OCSP 解决了旧的证书撤销列表(CRL)方法的限制。

4.2. 为 SSL 连接配置 Apache HTTP 服务器

您可以通过安装 mod_ssl 软件包并在 ssl.conf 文件中指定配置设置,将 Apache HTTP 服务器配置为支持 SSL 连接。

先决条件

  • 您已生成 SSL 证书和私钥。
  • 您知道 SSL 证书和私钥文件的位置。
  • 您已获取与 SSL 证书关联的通用名称(CN)。

流程

  1. 要安装 mod_ssl,请输入以下命令:

    # yum install jbcs-httpd24-mod_ssl
    Copy to Clipboard
  2. 指定 SSL 配置设置:

    1. 打开 JBCS_HOME/httpd/conf.d/ssl.conf 文件。
    2. ServerNameSSLCertificateFileSSLCertificateKeyFile 输入详情。

      例如:

      <VirtualHost _default_:443>
      ServerName www.example.com:443
      SSLCertificateFile /opt/rh/jbcs-httpd24/root/etc/pki/tls/certs/localhost.crt
      SSLCertificateKeyFile /opt/rh/jbcs-httpd24/root/etc/pki/tls/private/localhost.key
      Copy to Clipboard
      注意
      • ServerName 必须与与 SSL 证书关联的通用名称(CN)匹配。如果 ServerName 与 CN 不匹配,客户端浏览器会显示域名不匹配错误。
      • SSLCertificateFile 指定到 SSL 证书文件的路径。
      • SSLCertificateKeyFile 指定与 SSL 证书关联的私钥文件的路径。
  3. 验证 Listen 指令是否与部署的 httpd 服务的主机名或 IP 地址匹配。
  4. 要重启 Apache HTTP 服务器,请输入以下命令:

    # service jbcs-httpd24-httpd restart
    Copy to Clipboard

4.3. 在 Apache HTTP 服务器中使用 OCSP

您可以使用在线证书状态协议(OCSP)与 Apache HTTP 服务器安全连接。

流程

  1. 配置证书颁发机构。

    注意

    确保您的 CA 可以发布 OCSP 证书。CA 必须能够在证书中添加以下属性:

    [ usr_cert ]
    ...
    authorityInfoAccess=OCSP;URI:http://<HOST>:<PORT>
    ...
    [ v3_OCSP ]
    basicConstraints = CA:FALSE
    keyUsage = nonRepudiation, digitalSignature, keyEncipherment
    extendedKeyUsage = OCSP Signing
    Copy to Clipboard

    在前面的示例中,将 HOSTPORT 替换为您要配置的 OCSP 响应者的详细信息。

  2. 配置 OCSP 响应器。

4.4. 配置 Apache HTTP 服务器以验证 OCSP 证书

您可以通过在 ssl_conf 文件中定义 OCSP 设置,将 Apache HTTP 服务器配置为验证 OCSP 证书。

流程

  1. 打开 JBCS_HOME/httpd/conf.d/ssl.conf 文件。
  2. 为您的部署指定适当的 OCSP 配置详情。

    例如:

    # Require valid client certificates (mutual auth)
    SSLVerifyClient require
    SSLVerifyDepth  3
    # Enable OCSP
    SSLOCSPEnable on
    SSLOCSPDefaultResponder http://<HOST>:<PORT>
    SSLOCSPOverrideResponder on
    Copy to Clipboard
    注意

    前面的示例演示了如何启用客户端证书的 OCSP 验证。在前面的示例中,将 < HOST&gt; 和 & lt;PORT > 替换为默认的 OCSP Responder 的 IP 地址和端口。

4.5. 验证 Apache HTTP 服务器的 OCSP 配置

您可以使用 OpenSSL 命令行工具验证 Apache HTTP 服务器的 OCSP 配置。

流程

  • 在命令行中,以以下格式输入 openssl 命令:

    # openssl ocsp -issuer cacert.crt -cert client.cert -url http://HOST:PORT -CA ocsp_ca.cert -VAfile ocsp.cert
    Copy to Clipboard

    在前面的命令中,请确定指定了以下详情:

    • 使用 -issuer 选项指定 CA 证书。
    • 使用 -cert 选项指定您要验证的客户端证书。
    • 使用 -url 选项指定 HTTP 服务器验证证书(OCSP)。
    • 使用 -CA 选项指定是验证 Apache HTTP 服务器证书的 CA 证书。
    • 使用 -VAfile 选项指定 OCSP 响应程序证书。

第 5 章 使用 mod_cluster进行负载平衡的配置示例

您可以将 JBoss Core Services 配置为使用 mod_cluster 连接器在 Red Hat Enterprise Linux 系统中进行负载均衡。

当您要配置使用 mod_cluster 的负载均衡解决方案时,您必须执行以下任务:

5.1. 将 JBoss Core Services 设置为代理服务器

当您将 JBoss Core Services 配置为使用 mod_cluster 时,您必须通过在 mod_cluster.conf 文件中指定配置详情将 JBoss Core Services 设置为代理服务器。

流程

  1. 前往 JBCS_HOME/httpd/conf.d/ 目录。
  2. 创建名为 mod_cluster.conf 的文件。
  3. 输入以下配置详情:

    LoadModule proxy_cluster_module modules/mod_proxy_cluster.so
    LoadModule cluster_slotmem_module modules/mod_cluster_slotmem.so
    LoadModule manager_module modules/mod_manager.so
    LoadModule advertise_module modules/mod_advertise.so
    
    MemManagerFile cache/mod_cluster
    
    <IfModule manager_module>
      Listen 6666
      <VirtualHost *:6666>
        <Directory />
          Require ip 127.0.0.1
        </Directory>
        ServerAdvertise on
        EnableMCPMReceive
        <Location /mod_cluster_manager>
          SetHandler mod_cluster-manager
          Require ip 127.0.0.1
       </Location>
      </VirtualHost>
    </IfModule>
    Copy to Clipboard
    注意

    前面的示例演示了如何将 JBoss Core Services 设置为侦听 localhost 的代理服务器。

5.2. 配置 Tomcat worker 节点

当您将 JBoss Core Services 配置为使用 mod_cluster 时,您必须通过将 Listener 元素添加到 server.xml 文件中来配置 Tomcat worker 节点。

流程

  1. 打开 JWS_HOME/tomcat &lt;VERSION&gt; /conf/server.xml 文件。
  2. 添加以下 Listener 元素:

    <Listener className="org.jboss.modcluster.container.catalina.standalone.ModClusterListener" advertise="true"/>
    Copy to Clipboard

5.3. 定义 iptables 防火墙规则示例

当您将 JBoss Core Services 配置为使用 mod_cluster 时,您必须使用 iptables 定义防火墙规则。

流程

  • 使用 iptables 定义一组防火墙规则。

    例如:

    /sbin/iptables -I INPUT 5 -p udp -d 224.0.1.0/24 -j ACCEPT -m comment --comment "mod_cluster traffic"
    /sbin/iptables -I INPUT 6 -p udp -d 224.0.0.0/4 -j ACCEPT -m comment --comment "JBoss Cluster traffic"
    /sbin/iptables -I INPUT 9 -p udp -s 192.168.1.0/24 -j ACCEPT -m comment --comment "cluster subnet for inter-node communication"
    /sbin/iptables -I INPUT 10 -p tcp -s 192.168.1.0/24 -j ACCEPT -m comment --comment "cluster subnet for inter-node communication"
    /etc/init.d/iptables save
    Copy to Clipboard
    注意

    前面的示例演示了为 192.168.1.0/24 子网上的集群节点定义防火墙规则。

第 6 章 使用 mod_auth_kerb进行 Kerberos 验证的配置示例

您可以使用 JBoss Core Services Apache HTTP 服务器和 Red Hat Enterprise Linux 上的 mod_auth_kerb 模块来配置 Kerberos 身份验证。

当要配置 Kerberos 身份验证时,您必须执行以下任务:

6.1. 先决条件

  • 您已使用通用安全服务(GSS)协商支持安装了 curl 命令行工具。
  • 您已配置并运行 Kerberos 或 LDAP 服务器(如 ApacheDS)在与 JBoss Core Services 相同的主机上运行。
  • 如果您使用 LDAP 服务器,已经创建了名为 krbtgt 的 LDAP 用户、LDAP 和HTTP,以及名为 hnelson 的测试 LDAP 用户。

    • 要创建 krbtgt 用户,请输入以下详情:

      dn: uid=krbtgt,ou=Users,dc=example,dc=com
      objectClass: top
      objectClass: person
      objectClass: inetOrgPerson
      objectClass: krb5principal
      objectClass: krb5kdcentry
      cn: KDC Service
      sn: Service
      uid: krbtgt
      userPassword: secret
      krb5PrincipalName: krbtgt/EXAMPLE.COM@EXAMPLE.COM
      krb5KeyVersionNumber: 0
      Copy to Clipboard
    • 要创建 ldap 用户,请输入以下详情:

      dn: uid=ldap,ou=Users,dc=example,dc=com
      objectClass: top
      objectClass: person
      objectClass: inetOrgPerson
      objectClass: krb5principal
      objectClass: krb5kdcentry
      cn: LDAP
      sn: Service
      uid: ldap
      userPassword: randall
      krb5PrincipalName: ldap/localhost@EXAMPLE.COM
      krb5KeyVersionNumber: 0
      Copy to Clipboard
    • 要创建 HTTP 用户,请输入以下详情:

      dn: uid=HTTP,ou=Users,dc=example,dc=com
      objectClass: top
      objectClass: person
      objectClass: inetOrgPerson
      objectClass: krb5principal
      objectClass: krb5kdcentry
      cn: HTTP
      sn: Service
      uid: HTTP
      userPassword: secretpwd
      krb5PrincipalName: HTTP/localhost@EXAMPLE.COM
      krb5KeyVersionNumber: 0
      Copy to Clipboard
    • 要创建测试用户 hnelson,请输入以下详情:

      dn: uid=hnelson,ou=Users,dc=example,dc=com
      objectClass: top
      objectClass: person
      objectClass: inetOrgPerson
      objectClass: krb5principal
      objectClass: krb5kdcentry
      cn: Horatio Nelson
      sn: Nelson
      uid: hnelson
      userPassword: secret
      krb5PrincipalName: hnelson@EXAMPLE.COM
      krb5KeyVersionNumber: 0
      Copy to Clipboard

6.2. 配置 Kerberos 客户端

当您配置 Kerberos 验证时,您必须执行以下步骤来配置 Kerberos 客户端:

  1. 指定 krb5.conf 文件中的配置设置。
  2. JBCS_HOME/httpd/conf 文件中创建一个密钥选项卡。
  3. 为密钥选项卡分配权限。
  4. 确保 /etc/hosts 文件中包含 localhost

流程

  1. 指定 krb5.conf 文件中的配置设置:

    1. 进入 /etc 目录。
    2. 创建名为 krb5.conf 的文件。
    3. 输入以下配置详情:

      [logging]
        default = FILE:/var/log/krb5libs.log
        kdc = FILE:/var/log/krb5kdc.log
        admin_server = FILE:/var/log/kadmind.log
      
      [libdefaults]
        default_realm = EXAMPLE.COM
        default_tgs_enctypes = des-cbc-md5,des3-cbc-sha1-kd
        default_tkt_enctypes = des-cbc-md5,des3-cbc-sha1-kd
        dns_lookup_realm = false
        dns_lookup_kdc = false
        allow_weak_crypto = yes
        ticket_lifetime = 24h
        renew_lifetime = 7d
        forwardable = yes
      
      [realms]
        EXAMPLE.COM = {
          kdc = localhost:60088
          admin_server = localhost:60088
        }
      
      [domain_realm]
        .example.com = EXAMPLE.COM
        example.com = EXAMPLE.COM
      Copy to Clipboard
  2. 要创建密钥标签页:

    1. 打开 JBCS_HOME/httpd/conf 文件。
    2. 输入以下详情:

      # ktutil
      ktutil: addent -password -p HTTP/localhost@EXAMPLE.COM -k 0 -e des-cbc-md5
      Password for HTTP/localhost@EXAMPLE.COM: secretpwd
      ktutil: list
      slot KVNO Principal
      ---- ---- ---------------------------------------------------------------------
         1    0               HTTP/localhost@EXAMPLE.COM
      ktutil: wkt JBCS_HOME/httpd/conf/krb5.keytab
      ktutil: quit
      Copy to Clipboard
      重要

      环境变量不会在 ktutil 提示符中扩展。您必须替换 JBCS_HOME 变量的完整路径。

  3. 要将正确的组和权限应用到密钥标签页,以 root 用户身份输入以下命令:

    # chgrp apache JBCS_HOME/httpd/conf/krb5.keytab
    # chmod 640 JBCS_HOME/httpd/conf/krb5.keytab
    Copy to Clipboard
  4. 确保 /etc/hosts 文件中包含以下主机配置:

    127.0.0.1 localhost
    Copy to Clipboard

6.3. 配置 mod_auth_kerb

当您配置 Kerberos 身份验证时,您必须通过在 auth_kerb.conf 文件中指定设置来配置 mod_auth_kerb

流程

  1. 前往 JBCS_HOME/httpd/conf.d/ 目录。
  2. 创建名为 auth_kerb.conf 的文件。
  3. 输入以下配置详情:

    #
    # The mod_auth_kerb module implements Kerberos authentication over HTTP, following the "Negotiate" protocol.
    #
    
    # The LoadModule statement is done in conf.d/10-auth_kerb.conf
    # LoadModule auth_kerb_module modules/mod_auth_kerb.so
    
    <Location /kerberostest>
      AuthType Kerberos
      AuthName "Kerberos Login"
      KrbMethodNegotiate On
      KrbMethodK5Passwd Off
      KrbAuthRealms EXAMPLE.COM
      KrbServiceName HTTP
      Krb5KeyTab $JBCS_HOME/httpd/krb5.keytab
      require valid-user
    </Location>
    Copy to Clipboard
重要

环境变量不会在配置文件中扩展。在前面的示例中,确保您替换了 JBCS_HOME 变量的完整路径。

6.4. 测试 Kerberos 身份验证

当您配置 Kerberos 身份验证时,可以使用测试页面来测试 Kerberos 身份验证。

流程

  1. 要创建测试页面,请执行以下步骤:

    1. 进入 JBCS_HOME/httpd/www/html/kerberostest 目录。
    2. 创建名为 auth_kerb_page.html 的测试页面。
    3. 输入以下详情:

      <html>
      <body>
          <h1>mod_auth_kerb successfully authenticated!</h1>
      </body>
      </html>
      Copy to Clipboard
  2. 可选:在 JBCS_HOME/httpd/conf/httpd.conf 文件中,将日志级别设置为调试。
  3. 启动 Apache HTTP 服务器。如需更多信息,请参阅 Red Hat JBoss Core Services Apache HTTP Server 安装指南
  4. 要为测试用户启动 Kerberos 验证 hnelson,请输入以下命令:

    $ kinit hnelson
    Copy to Clipboard
  5. 要查看测试用户 hnel son 的详情,请输入以下命令:

    $ klist
    Copy to Clipboard

    klist 命令生成以下输出类型:

    Ticket cache: FILE:/tmp/krb5cc_18602
    Default principal: hnelson@EXAMPLE.COM
    
    Valid starting     Expires            Service principal
    06/03/13 14:21:13  06/04/13 14:21:13  krbtgt/EXAMPLE.COM@EXAMPLE.COM
    renew until 06/10/13 14:21:13
    Copy to Clipboard

验证

  • 要测试 Kerberos 验证,请输入以下命令:

    $ curl --negotiate -u : http://localhost/kerberostest/auth_kerb_page.html
    Copy to Clipboard

    如果 Kerberos 身份验证正常工作,curl 命令会生成以下输出:

    <html>
    <body>
        <h1>mod_auth_kerb successfully authenticated!</h1>
    </body>
    </html>
    Copy to Clipboard

附录 A. Apache HTTP 服务器代理模块

本节包含 mod_cluster 包括的 Apache HTTP 服务器代理模块的扩展定义。

A.1. Mod_manager 模块和指令

集群管理器模块 mod_manager 接收和确认来自节点的消息,包括 worker 节点注册、工作程序节点加载数据和 worker 节点应用生命周期事件。

LoadModule manager_module modules/mod_manager.so
Copy to Clipboard

mod_manager可配置的指令

<VirtualHost> 元素中的可配置指令如下:

EnableMCPMReceive
允许 虚拟主机 从节点接收 mod_cluster 协议消息(MCPM )。向 Apache HTTP 服务器配置添加一个 EnableMCPMReceive 指令,以允许 mod_cluster 正常运行。EnableMCPMReceive 必须添加到 VirtualHost 配置中配置 公告 的位置。
MaxMCMPMaxMessSize
定义 mod_cluster 管理协议 (MCMP) 消息的最大大小。默认值从其他 Max 指令计算。最小值为 1024
AllowDisplay
切换 mod_cluster-manager 主页上的额外显示。默认值为 off,这会使只有版本信息显示在 mod_cluster-manager 主页中。
AllowCmd
使用 mod_cluster-manager URL 切换命令的权限。默认值为 on, 它允许命令。
ReduceDisplay
切换 mod_cluster-manager 页面上显示的信息的减少。减少信息后,页面中可以显示更多节点。默认值为 off,它允许显示所有可用的信息。
MemManagerFile
定义 mod_manager 存储配置详细信息的文件的位置。mod_manager 还将此位置用于共享内存和锁定文件生成的密钥。这必须是绝对路径名称。建议此路径位于本地驱动器中,而不是 NFS 共享。默认值为 /logs/
Maxcontext
将使用的上下文的最大 mod_cluster 数。默认值为 100
Maxnode
使用的最大工作程序节点 mod_cluster。默认值为 20
Maxhost
将要使用的最大主机数量(别名)mod_cluster.这也是负载均衡器的最大数量。默认值为 20
Maxsessionid
存储的最大活跃会话标识符数。当该会话在五分钟内未收到任何信息时,会话将被视为不活动。这仅用于演示和调试目的。默认值为 0,它会禁用此逻辑。
ManagerBalancerName
worker 节点不提供负载均衡器名称时要使用的负载均衡器名称。默认值为 mycluster
PersistSlots
如果设置为 on,则 节点、别名和上下文将保留在 文件中。默认值为 off
CheckNonce

当设置为 on 时,将检查会话标识符,以确保其唯一且之前未发生。默认值为 on

注意

将此指令设置为 off 可能会导致您的服务器受到重播攻击。

SetHandler mod_cluster-manager

定义一个处理程序,以显示集群中 worker 节点的信息。这在 Location 元素中定义:

<Location $LOCATION>
  SetHandler mod_cluster-manager
  Require ip 127.0.0.1
</Location>
Copy to Clipboard

访问浏览器中 Location 元素中定义的 $LOCATION 时,您将看到类似如下的内容:(在这种情况下,$LOCATION 也定义为 mod_cluster-handler。)

传输 的对应于发送到 worker 节点的 POST 数据。连接 对应于请求此状态页面时处理的请求数。会话 与活跃会话的数量对应。Maxsessionid 为 0 时不存在此字段。

A.2. Mod_proxy_cluster 模块和指令

Proxy Balancer 模块 mod_proxy_cluster 负责处理请求到集群节点的路由。Proxy Balancer 选择根据集群中的应用程序位置、每个集群节点的当前状态和 Session ID(如果请求是已建立的会话的一部分)将请求转发到的适当节点。

LoadModule proxy_cluster_module modules/mod_proxy_cluster.so
Copy to Clipboard

适用于 mod_proxy_cluster的可配置指令

您还可以在 <VirtualHost> 元素中配置 以下指令来更改负载平衡行为。

CreateBalancers

定义如何在 Apache HTTP 服务器虚拟主机中创建负载平衡器。以下值在 CreateBalancers 中有效:

  • 0:在 Apache HTTP 服务器中定义的所有虚拟主机中创建负载平衡器。记得在 ProxyPass 指令中配置负载均衡器。
  • 1:不要创建均衡器。在使用此值时,还必须在 ProxyPass or ProxyPass Match 中定义负载均衡器名称。
  • 2:仅创建主服务器。这是 CreateBalancers 的默认值。
UseAlias

定义是否检查定义的 Alias 是否与 ServerName 对应。以下值对 UseAlias 有效:

  • 0:忽略来自 worker 节点的别名信息。这是 UseAlias 的默认值。
  • 1:验证定义的别名是否与 worker 节点的服务器名称对应。
LBstatusRecalTime
定义代理计算工作程序节点状态间隔(以秒为单位)。默认间隔为 5 秒。
ProxyPassMatch; ProxyPass

ProxyPass 将远程服务器映射到本地服务器命名空间中。如果本地服务器有地址,如 http://local.com/,以下 ProxyPass 指令会将 http://local.com/requested/file1 的本地请求转换为 http://worker.local.com/file1 的代理请求。

ProxyPass /requested/ http://worker.local.com/
Copy to Clipboard

ProxyPassMatch 使用正则表达式来匹配代理 URL 应应用到的本地路径。

对于任一指令,! 表示指定的路径为本地,并且对该路径的请求不应路由到远程服务器。例如,以下指令指定 gif 文件应在本地提供:

ProxyPassMatch ^(/.*\.gif)$ !
Copy to Clipboard

A.3. Mod_advertise 模块和指令

Proxy Advertisement 模块 mod_advertise 通过 UDP 多播消息广播代理服务器是否存在。服务器公告消息包含 IP 地址和端口号,代理正在侦听希望加入负载平衡群集的节点的响应。

mod_advertise 模块必须与 VirtualHost 元素中的 mod_manager 模块定义。在以下示例中,mod_advertise 模块的标识符是 advertise_module

LoadModule advertise_module modules/mod_advertise.so
Copy to Clipboard

适用于 mod_advertise的可配置指令

mod_advertise 模块可以通过以下指令进行配置:

ServerAdvertise

定义如何使用广告机制。

默认值为 Off。当设置为 Off 时,代理不会公告其位置。

当设置为 On 时,公告机制用于告知 worker 节点向这个代理发送状态信息。您还可以使用以下语法指定主机名和端口:ServerAdvertise On http://HOSTNAMEPORT/.这只有在使用基于名称的虚拟主机或未定义虚拟主机时才需要。

AdvertiseGroup

定义要在其上公告的多播地址。其语法为 AdvertiseGroup ADDRESS:PORT,ADDR ESS 必须与 AdvertiseGroupAddress 对应,PORT 必须与 worker 节点上的 AdvertisePort 对应。

如果您的 worker 节点基于 JBoss EAP,并且在启动时使用 -u 参数,则默认的 AdvertiseGroupAddress 是通过 -u 交换机传递的值。

默认值为 224.0.1.105:23364。如果没有指定端口,端口默认为 23364

AdvertiseFrequency
多播消息公告 IP 地址和端口之间的间隔(以秒为单位)。默认值为 10
AdvertiseSecurityKey
定义用于在 JBoss Web 服务器中识别 mod_cluster 的字符串。默认情况下,不会设置这个指令,也不会发送任何信息。
AdvertiseManagerUrl
定义工作程序节点用于向代理服务器发送信息的 URL。默认情况下,不会设置这个指令,也不会发送任何信息。
AdvertiseBindAddress
定义要向其发送多播消息的地址和端口。其语法为 AdvertiseBindAddress ADDRESSPORT.这允许在具有多个 IP 地址的机器上指定地址。默认值为 0.0.0.0:23364

A.4. mod_proxy 模块和指令

mod_proxy 模块是一个标准的 Apache HTTP Server 模块,它允许服务器充当通过 Apache JServ Protocol(AJP)、FTP、CONNECT(用于 SSL)和 HTTP 协议传输的数据的代理。mod_proxy 模块不需要额外的配置。mod_proxy 模块的标识符是 proxy_module

mod_proxy 的可配置指令(如 ProxyIOBufferSize )用于配置 mod_cluster 模块。

A.5. Mod_proxy_ajp 模块和指令

mod_proxy_ajp 模块是一个标准 Apache HTTP 服务器模块,它支持 Apache JServ Protocol(AJP)代理。如果要使用 mod_proxy _ ajp,也需要 mod_proxy 模块。

A.6. Mod_cluster_slotmem 模块和指令

mod_cluster_slotmem 模块是一个共享内存提供程序,用于创建和管理数据集在"slots"中组织的共享内存段。

mod_cluster_slotmem 模块不需要任何配置指令。

附录 B. Worker.properties 文件

Apache HTTP 服务器工作程序节点是映射到 mod_jk 负载平衡器的 servlet 容器。worker 节点在 JBCS_HOME/httpd/conf/workers.properties 中定义。此文件指定不同 servlet 容器所处的位置,以及如何在这些容器之间负载平衡调用。

B.1. Worker.properties 概述

workers.properties 文件包含全局属性部分和 worker 属性部分。

全局属性
本节包含适用于所有 worker 的指令。
Worker Properties
本节包含适用于每个 worker 的指令。

每个节点都使用 worker 属性命名约定来定义。工作程序名称只能包含小写字母、大写字母、数字和特定的特殊字符(_ /)。

worker 属性的结构是 worker。WORKER_NAME.DIRECTIVE.

worker
所有 worker 属性的常量前缀。
WORKER_NAME
提供给 worker 的任意名称。例如: node1、node_01Node_1
指令
所需的特定指令。

B.2. workers.properties 指令

workers.properties 文件指令分为全局、强制、连接和负载平衡分类。

worker.properties全局指令
worker.list

指定 mod_jk 使用的 worker 名称列表。此列表中的 worker 可用于映射请求。

注意

不受负载均衡器管理的单个节点配置必须设置为 worker.list=WORKER_NAME

worker.properties的必要指令
type

指定 worker 的类型,它决定适用于 worker 的指令。默认值为 ajp13,这是用于 Web 服务器和 Apache HTTP 服务器之间通信的首选工作程序类型。

其他值包括 lbstatus

有关 AJPv13 的详细信息,请参阅 Apache Tomcat 连接器 - AJP 协议参考

worker.properties 的连接指令
host

worker 的主机名或 IP 地址。worker 节点必须支持 ajp13 协议堆栈。默认值为 localhost

您可以通过在主机名或 IP 地址后附加端口号,将 port 指令指定为 host 指令 的一部分。例如: worker.node1.host=192.168.2.1:8009worker.node1.host=node1.example.com:8009

端口
侦听定义的协议请求的远程服务器实例的端口号。默认值为 8009,这是 AJPv13 worker 的默认监听端口。
ping_mode

指定针对当前网络运行状况探测连接的条件。

该探测使用空的 AJPv13 数据包 进行 CPing,并在指定的超时内返回 CPong

您可以使用 指令标志的组合来指定条件。标志不是用逗号分开的。例如,设置了正确的指令标志是 worker.node1.ping_mode=CI

c(连接)
在连接到服务器后,指定连接被探测一次。您可以使用 connect_timeout 指令指定超时,否则使用 ping_timeout 的值。
P(预置)
指定在向服务器发送每个请求之前,连接会被探测。您可以使用 prepost_timeout 指令指定超时,否则使用 ping_timeout 的值。
i(互换)
指定在常规的内部维护周期内探测连接。您可以使用 connection_ping_interval 指令指定每个间隔之间的空闲时间,否则使用 ping_timeout 的值。
A(全部)
最常用的设置,它指定应用了所有指令标志。有关 \*_timeout 高级指令的详情,请参考 Apache Tomcat 连接器 - 参考指南
ping_timeout
指定等待 CPing 连接探测回答 的时间(请参阅 ping_mode)。默认值为 10000 (毫秒)。
worker.properties 的负载均衡指令
lbfactor

指定单个 worker 的负载均衡因素,且只为负载均衡器的成员 worker 指定。

与集群中的其他 worker 相比,这个指令定义了分配给 worker 的 HTTP 请求负载的相对数量。

应用此指令的一个常见示例是您要区分处理能力高于集群中的其他服务器。例如,如果您要求 worker 负载比其他工作程序要花费三倍,请指定 worker。WORKER_NAME.lbfactor=3

balance_workers
指定负载均衡器必须管理的 worker 节点。该指令可以多次用于同一负载平衡器,由 workers.properties 文件中指定的以逗号分隔的 worker 名称列表组成。
sticky_session

指定对 SESSION ID 的 worker 的请求是否路由到同一 worker。默认值为 0( false)。当设置为 1 (true)时,会启用负载均衡器持久性。

例如,如果您指定了 worker.loadbalancer.sticky_session=0,则每个请求会在集群中的每个节点之间负载平衡。换句话说,同一会话的不同请求可以根据服务器负载前往不同的服务器。

如果您指定了 worker.loadbalancer.sticky_session=1,每个会话都会持久(已锁定)到一台服务器,直到会话终止为止,前提是该服务器可用。

附录 C. Worker 节点配置

配置值在以下情况下发送到代理:

  • 服务器启动过程中
  • 当通过公告机制检测到代理时
  • 在重置代理配置时进行错误恢复
表 C.1. Tomcat 的代理配置值
价值Default(默认)Description

stickySession

true

指定以后对给定会话的请求是否应该路由到同一节点(如果可能)。

stickySessionRemove

false

指定如果负载均衡器无法将请求路由到其卡住的节点,则 Apache HTTP 服务器代理是否应该删除会话粘性。如果 stickySessionfalse,则忽略此属性。

stickySessionForce

true

指定如果负载均衡器无法将请求路由到其卡住的节点,则 Apache HTTP 服务器代理是否应该返回错误。如果 stickySessionfalse,则忽略此属性。

workerTimeout

-1

指定 worker 可用于处理请求的秒数。当平衡器的所有工作程序都不可用时,mod_cluster 将在一段时间后(workerTimeout / 100)重试,以查找可用的工作程序。值 -1 表示 Apache HTTP 服务器不会等待 worker 可用,并在没有 worker 可用时返回错误。

maxAttempts

1

指定 Apache HTTP 服务器代理在中止前尝试向 worker 发送给定请求的次数。最小值为 1 :在中止前尝试一次。

flushPackets

false

指定数据包刷新是启用或禁用的。

flushWait

-1

指定在清除数据包前要等待的时间。值 -1 表示永久等待。

ping

10

等待(以秒为单位)用于 ping 的 pong 答案的时间。

smax

 

指定软最大空闲连接计数。最大值由 Apache HTTP 服务器线程配置(threadsPerChild1)决定。

ttl

60

指定超过 smax 阈值时(以秒为单位)空闲连接的保留时间。

nodeTimeout

-1

指定在返回错误前,mod_cluster 会在返回错误前等待后端服务器响应的时间(以秒为单位)。mod_cluster 始终在转发请求前使用 cping/cpong。mod_cluster 使用的 connectiontimeout 值是 ping 值。

balancer

mycluster

指定负载均衡器的名称。

loadBalancingGroup

 

指定同一负载平衡组中 jvmRoutes 之间的负载平衡。loadBalancingGroup 在概念上相当于 mod_jk 域指令。

附录 D. mod_cluster 代理和代理发现配置属性

下表包含 mod_cluster 代理和代理发现配置属性的属性和信息。

表 D.1. mod_cluster的代理发现配置属性
属性属性默认值

proxy-list

proxyList

 

proxy-url

proxyURL

 

advertise

advertise

true

advertise-security-key

advertiseSecurityKey

 

exclude-contexts

excludedContexts

 

auto-enable-contexts

autoEnableContexts

true

stop-context-timeout

stopContextTimeout

10 秒(以秒为单位)

socket-timeout

nodeTimeout

20 秒(以毫秒为单位)

注意

如果未定义 nodeTimeout,则使用 ProxyTimeout 指令 Proxy。如果没有定义 ProxyTimeout则使用服务器超时(默认为 JBCS httpd.conf 中的 120 秒)。node TimeoutProxyTimeoutTimeout 设置在套接字级别。

表 D.2. mod_cluster的代理配置属性
属性属性默认值

sticky-session

stickySession

true

sticky-session-remove

stickySessionRemove

false

sticky-session-force

stickySessionForce

true

node-timeout

workerTimeout

-1

max-attempts

maxAttempts

1

flush-packets

flushPackets

false

flush-wait

flushWait

-1

ping

ping

10(秒)

SMAX

smax

-1(使用默认值)

ttl

ttl

-1(使用默认值)

domain

loadBalancingGroup

 

load-balancing-group

loadBalancingGroup

 

附录 E. 载入 Tomcat 的配置

当您要在 Apache Tomcat 中使用 mod_cluster 时,您可以配置以下额外属性来加载指标。

表 E.1. 负载配置
属性默认值Description

loadMetricClass

org.jboss.modcluster.load.metric.impl.BusyConnectorsLoadMetric

实施 org.jboss.load.metric.LoadMetric 的对象的类名称。

loadMetricCapacity

1

通过 load MetricClass 属性定义的 load 指标 的容量。

loadHistory

9

负载均衡因子计算中必须考虑的历史负载值的数量。

loadDecayFactor

2

历史负载值大幅降低的因子。

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2025 Red Hat, Inc.