HTTP 连接器和负载平衡指南 5.6
用于红帽 JBoss Web 服务器 5.6
摘要
mod_cluster
和 mod_jk
connector 模块以及 Red Hat JBoss Core Services Apache HTTP 服务器提供的其它模块的负载平衡解决方案。
对红帽文档提供反馈
我们感谢您对我们的技术内容的反馈,并且鼓励您告诉我们您的想法。如果您想添加注释、提供见解、更正错误甚至提问问题,您可以在文档中直接这样做。
您必须有一个红帽帐户并登录到客户门户。
要从客户门户提交文档反馈,请执行以下操作:
- 选择 多页 HTML 格式。
- 单击文档右上角的" 反馈 "按钮。
- 突出显示您要提供反馈的文本部分。
- 单击突出显示的文本旁边的 添加反馈 对话框。
- 在页面右侧的文本框中输入您的反馈,然后单击 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_proxy
和 mod_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_
jkmod_jk.conf.sample
、worker.properties.sample
和 uriworkermap.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
您可以通过在
文件中指定配置设置,将 Apache HTTP 服务器配置为加载 mod_jk。
mod_jk
.conf
您还可以执行以下可选配置步骤:
-
除了
JkMount
指令外,您还可以使用JkMountFile
指令指定挂载点的配置文件。配置文件包含用于 Tomcat 转发的多个 URL 映射。 - 您可以配置作为负载均衡器运行的 Apache HTTP 服务器,以记录处理请求的每个 worker 节点的详情。如果您需要对负载均衡器进行故障排除,这很有用。
流程
-
前往
JBCS_HOME/httpd/conf.d
目录。 创建一个名为
mod_jk.conf
的新文件,并输入以下配置详情:Load mod_jk module Specify the filename of the mod_jk lib Where to find workers.properties Where to put jk logs Set the jk log level [debug/error/info] Select the log format JkOptions indicates to send SSL KEY SIZE JkRequestLogFormat Mount your applications 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 Add jkstatus for managing runtime data
# 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 Copied! 重要确保
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
。可选:要使用
JkMountFile
指令指定挂载点的配置文件,请执行以下步骤:-
前往
JBCS_HOME/httpd/conf.d/
目录。 -
创建名为
uriworkermap.properties
的文件。 指定您要转发和 worker 名称的 URL。
例如:
Simple worker configuration file Mount the Servlet context to the ajp13 worker
# Simple worker configuration file # Mount the Servlet context to the ajp13 worker /application=loadbalancer /application/*=loadbalancer
Copy to Clipboard Copied! 注意所需语法的格式是:
/URL=WORKER_NAME
前面的示例将
mod_jk
配置为将/application
的请求转发到 JBoss Web Server Tomcat 后端。在
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
# 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 Copied!
-
前往
可选:要启用 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 容器之间的粘性会话。
先决条件
-
熟悉
workers.properties
指令 的格式。 -
您已将 Apache HTTP 服务器配置为加载
mod_jk
。
流程
-
前往
JBCS_HOME/httpd/conf.d/
目录。 -
创建名为
workers.properties
的文件。 输入以下配置详情:
Define list of workers that will be used for mapping requests Define Node1 modify the host as your host IP or DNS name. Define Node2 modify the host as your host IP or DNS name. Load-balancing behavior Status worker for managing load balancer
# 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 Copied! 注意在前面的示例中,确保将
主机
、端口
和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" />
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
除了启用了 AJP 的连接器外,还必须在每个 worker 节点的引擎中为 jvmRoute
属性配置唯一值:
流程
要为每个 worker 节点的引擎中的
jvmRoute
属性配置唯一值,请输入以下详情:<Engine name="Catalina" jvmRoute="node1" >
<Engine name="Catalina" jvmRoute="node1" >
Copy to Clipboard Copied! 重要确保
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
- 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 |
---|---|
| 共享内存管理器模块通过多个 Apache HTTP 服务器进程共享实时工作程序节点信息。 |
| Cluster Manager 模块接收和确认来自 worker 节点的消息,包括节点注册、节点加载数据和节点应用程序生命周期事件。 |
| Proxy Balancer 模块处理到集群节点的请求路由。Proxy Balancer 根据集群中的应用程序位置、每个集群节点的当前状态和 Session ID(如果请求是已建立的会话的一部分)选择适当的目标节点。 |
| Proxy Advertisement 模块通过 UDP 多播消息广播代理服务器的存在。服务器公告消息包含 IP 地址和端口号,代理服务器正在侦听来自希望加入负载平衡集群的 worker 节点的响应。 |
3.2. mod_cluster
字符限制
mod_cluster
模块使用共享内存来保留节点描述。共享内存是在 Apache HTTP 服务器启动时创建的,每个项目的结构是固定的。
当您定义代理服务器和 worker 节点属性时,请确定您遵循以下字符限制:
属性 | 最大字符限制 | Description |
---|---|---|
别名长度 | 100 个字符 |
alias 对应于对应虚拟主机的网络名称;名称在 |
上下文长度 | 40 个字符 |
例如,如果 |
balancer 名称长度 | 40 个字符 |
这是 |
| 80 个字符 |
< |
域名长度 | 20 个字符 |
这是 |
节点的主机名长度 | 64 个字符 |
这是 < |
节点的端口长度 | 7 个字符 |
这是 < |
节点的方案长度 | 6 个字符 |
这是连接器的协议。可能的值有 |
Cookie 名称长度 | 30 个字符 |
这是会话 ID 的标头 Cookie 名称。默认值为 |
路径名称长度 | 30 个字符 |
这是会话 ID 的参数名称。默认值为 |
会话 ID 长度 | 120 个字符 |
会话 ID 的格式如下: |
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
的负载平衡代理服务器时,还必须为管理频道配置虚拟主机。
先决条件
-
已安装 Apache HTTP 服务器并为安装配置了
mod_cluster
模块。如需更多信息,请参阅 Red Hat JBoss Core Services Apache HTTP Server 安装指南。 - 为代理服务器监听器指定的端口必须为传入的 TCP 连接打开。
流程
打开
mod_cluster
配置文件。注意mod_cluster
配置文件通常位于JBCS_HOME/httpd/conf.d/mod_cluster.conf
目录中。要为代理服务器创建
Listen
指令,请在mod_cluster.conf
文件中输入以下行:Listen IP_ADDRESS:PORT_NUMBER
Listen IP_ADDRESS:PORT_NUMBER
Copy to Clipboard Copied! 注意在前面的示例中,将
IP_ADDRESS
替换为代理服务器用来与 worker 节点通信的服务器网络接口地址,并将PORT_NUMBER
替换为代理服务器侦听的端口。确保为传入 TCP 连接打开端口。
要创建虚拟主机,请在
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>
<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 Copied! 注意在前面的示例中,将
IP_ADDRESS
和PORT_NUMBER
替换为您为Listen
指令指定的服务器网络接口和端口号的地址。此地址和端口组合仅用于
mod_cluster
管理消息。此地址和端口组合不用于常规流量。
有关配置 mod_jk
并启动 Apache HTTP 服务器服务的详情,请查看 Red Hat JBoss Core Services Apache HTTP Server 安装指南。
3.5.1. 禁用服务器公告
代理服务器使用 UDP 多播来公告其自身。AdvertiseFrequency
指令指示服务器默认每 10 秒发送服务器广告消息。服务器广告信息包含您在 VirtualHost
定义中指定的 IP_ADDRESS
和 PORT_NUMBER
。配置为响应服务器公告的 worker 节点,使用此信息在代理服务器中注册。如果要阻止 worker 节点使用代理服务器注册,您可以选择性地禁用服务器公告。
当代理服务器和 worker 节点之间有 UDP 多播时,服务器公告会添加 worker 节点,而无需在代理服务器上进行进一步配置。服务器公告只需要在 worker 节点上进行最少的配置。
先决条件
流程
打开
mod_cluster
配置文件。注意mod_cluster
配置文件通常位于JBCS_HOME/httpd/conf.d/mod_cluster.conf
目录中。在
VirtualHost
定义中添加以下指令:ServerAdvertise Off
ServerAdvertise Off
Copy to Clipboard Copied! 注意如果禁用服务器广告,或者代理服务器和 worker 节点之间无法看到 UDP 多播,您可以使用静态代理服务器列表配置 worker 节点。在这两种情况下,您不需要使用 worker 节点列表配置代理服务器。
3.5.2. 记录 worker 节点详情
当您配置使用 mod_cluster
的负载均衡代理服务器时,您可以选择将 Apache HTTP 服务器配置为记录处理请求的每个 worker 节点的详细信息。如果需要对负载均衡器进行故障排除,请记录 worker 节点详情。
先决条件
流程
打开
mod_cluster
配置文件。注意mod_cluster
配置文件通常位于JBCS_HOME/httpd/conf.d/mod_cluster.conf
目录中。在您的 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.
%{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 Copied!
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
功能。
流程
要为 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" />
<Listener className="org.jboss.modcluster.container.catalina.standalone.ModClusterListener" advertise="true" stickySession="true" stickySessionForce="false" stickySessionRemove="true" />
Copy to Clipboard Copied! 要为 worker 节点指定唯一身份,请编辑
JWS_HOME/tomcat <VERSION> /conf/server.xml
文件,将jvmRoute
属性和值添加到Engine
元素中:<Engine name="Catalina" defaultHost="localhost" jvmRoute="worker01">
<Engine name="Catalina" defaultHost="localhost" jvmRoute="worker01">
Copy to Clipboard Copied! 要配置
STATUS MCMP
消息频率,请修改org.jboss.modcluster.container.catalina.status-frequency
Java 系统属性。例如:
-Dorg.jboss.modcluster.container.catalina.status-frequency=6
-Dorg.jboss.modcluster.container.catalina.status-frequency=6
Copy to Clipboard Copied! 注意Tomcat worker 节点会定期将包含其当前负载状态的状态信息发送到 Apache HTTP 服务器负载均衡器。这些消息的默认频率是 10 秒。如果您有数百个 worker 节点,则
STATUS MCMP
信息可能会增加 Apache HTTP 服务器网络上的流量拥塞。您可以通过修改
org.jboss.modcluster.container.catalina.status-frequency
Java 系统属性来配置MCMP
消息频率。默认情况下,属性接受以十秒为单位指定的值。例如,将 属性设置为1
表示 10 秒。在前面的示例中,属性设为6
,即 60 秒。可选:要为代理服务器公告配置防火墙,请完成以下步骤之一,在 worker 节点的防火墙中为 UDP 连接打开端口
23364
:Red Hat Enterprise Linux 7:
firewall-cmd --permanent --zone=public --add-port=23364/udp
firewall-cmd --permanent --zone=public --add-port=23364/udp
Copy to Clipboard Copied! 对于使用 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"'
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 Copied! 注意当代理服务器使用
mod_cluster
时,代理服务器可以使用 UDP 多播来公告自身。大多数操作系统防火墙默认阻止服务器广告功能。要启用服务器公告并接收这些多播信息,您可以在 worker 节点的防火墙上打开 UDP 连接的端口23364
,如上例中所示。
Red Hat Enterprise Linux 6 不再被支持,随后从文档中被删除。
3.7. 配置 worker 节点以使用静态代理服务器列表操作
服务器公告允许 worker 节点动态发现并注册到代理服务器。如果禁用 UDP 多播,或者服务器广告被禁用,您必须使用静态代理服务器地址和端口配置 JBoss Web 服务器 worker 节点。
先决条件
流程
-
打开
JWS_HOME/tomcat <VERSION> /conf/server.xml
文件。 要定义
mod_cluster
侦听器并禁用动态代理发现,请添加或更改ModCluster
的 Listener 元素。Listener
例如:
<Listener className="org.jboss.modcluster.container.catalina.standalone.ModClusterListener" advertise="false" stickySession="true" stickySessionForce="false" stickySessionRemove="true"/>
<Listener className="org.jboss.modcluster.container.catalina.standalone.ModClusterListener" advertise="false" stickySession="true" stickySessionForce="false" stickySessionRemove="true"/>
Copy to Clipboard Copied! 注意确保将
advertise
属性设置为false
。要创建静态代理服务器列表,请通过以以下格式添加以逗号分隔的代理列表来更新
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"/>
<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 Copied!
第 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)。
流程
要安装
mod_ssl
,请输入以下命令:yum install jbcs-httpd24-mod_ssl
# yum install jbcs-httpd24-mod_ssl
Copy to Clipboard Copied! 指定 SSL 配置设置:
-
打开
JBCS_HOME/httpd/conf.d/ssl.conf
文件。 为
ServerName
、SSLCertificateFile
和SSLCertificateKeyFile
输入详情。例如:
<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
<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 Copied! 注意-
ServerName
必须与与 SSL 证书关联的通用名称(CN)匹配。如果ServerName
与 CN 不匹配,客户端浏览器会显示域名不匹配错误。 -
SSLCertificateFile
指定到 SSL 证书文件的路径。 -
SSLCertificateKeyFile
指定与 SSL 证书关联的私钥文件的路径。
-
-
打开
-
验证
Listen
指令是否与部署的httpd
服务的主机名或 IP 地址匹配。 要重启 Apache HTTP 服务器,请输入以下命令:
service jbcs-httpd24-httpd restart
# service jbcs-httpd24-httpd restart
Copy to Clipboard Copied!
4.3. 在 Apache HTTP 服务器中使用 OCSP
您可以使用在线证书状态协议(OCSP)与 Apache HTTP 服务器安全连接。
先决条件
流程
配置证书颁发机构。
注意确保您的 CA 可以发布 OCSP 证书。CA 必须能够在证书中添加以下属性:
[ usr_cert ] ... authorityInfoAccess=OCSP;URI:http://<HOST>:<PORT> ... [ v3_OCSP ] basicConstraints = CA:FALSE keyUsage = nonRepudiation, digitalSignature, keyEncipherment extendedKeyUsage = OCSP Signing
[ usr_cert ] ... authorityInfoAccess=OCSP;URI:http://<HOST>:<PORT> ... [ v3_OCSP ] basicConstraints = CA:FALSE keyUsage = nonRepudiation, digitalSignature, keyEncipherment extendedKeyUsage = OCSP Signing
Copy to Clipboard Copied! 在前面的示例中,将
HOST
和PORT
替换为您要配置的 OCSP 响应者的详细信息。- 配置 OCSP 响应器。
4.4. 配置 Apache HTTP 服务器以验证 OCSP 证书
您可以通过在 ssl_conf
文件中定义 OCSP 设置,将 Apache HTTP 服务器配置为验证 OCSP 证书。
流程
-
打开
JBCS_HOME/httpd/conf.d/ssl.conf
文件。 为您的部署指定适当的 OCSP 配置详情。
例如:
Require valid client certificates (mutual auth) Enable OCSP
# Require valid client certificates (mutual auth) SSLVerifyClient require SSLVerifyDepth 3 # Enable OCSP SSLOCSPEnable on SSLOCSPDefaultResponder http://<HOST>:<PORT> SSLOCSPOverrideResponder on
Copy to Clipboard Copied! 注意前面的示例演示了如何启用客户端证书的 OCSP 验证。在前面的示例中,将 <
HOST>
; 和 <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
# openssl ocsp -issuer cacert.crt -cert client.cert -url http://HOST:PORT -CA ocsp_ca.cert -VAfile ocsp.cert
Copy to Clipboard Copied! 在前面的命令中,请确定指定了以下详情:
-
使用
-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 设置为代理服务器。
流程
-
前往
JBCS_HOME/httpd/conf.d/
目录。 -
创建名为
mod_cluster.conf
的文件。 输入以下配置详情:
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>
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 Copied! 注意前面的示例演示了如何将 JBoss Core Services 设置为侦听
localhost
的代理服务器。
5.2. 配置 Tomcat worker 节点
当您将 JBoss Core Services 配置为使用 mod_cluster
时,您必须通过将 Listener
元素添加到 server.xml
文件中来配置 Tomcat worker 节点。
先决条件
流程
-
打开
JWS_HOME/tomcat <VERSION> /conf/server.xml
文件。 添加以下
Listener
元素:<Listener className="org.jboss.modcluster.container.catalina.standalone.ModClusterListener" advertise="true"/>
<Listener className="org.jboss.modcluster.container.catalina.standalone.ModClusterListener" advertise="true"/>
Copy to Clipboard Copied!
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
/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 Copied! 注意前面的示例演示了为
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
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 Copied! 要创建
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
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 Copied! 要创建
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
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 Copied! 要创建测试用户
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
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 Copied!
6.2. 配置 Kerberos 客户端
当您配置 Kerberos 验证时,您必须执行以下步骤来配置 Kerberos 客户端:
-
指定
krb5.conf
文件中的配置设置。 -
在
JBCS_HOME/httpd/conf
文件中创建一个密钥选项卡。 - 为密钥选项卡分配权限。
-
确保
/etc/hosts
文件中包含localhost
。
先决条件
流程
指定
krb5.conf
文件中的配置设置:-
进入
/etc
目录。 -
创建名为
krb5.conf
的文件。 输入以下配置详情:
[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
[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 Copied!
-
进入
要创建密钥标签页:
-
打开
JBCS_HOME/httpd/conf
文件。 输入以下详情:
ktutil
# 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 Copied! 重要环境变量不会在
ktutil
提示符中扩展。您必须替换JBCS_HOME
变量的完整路径。
-
打开
要将正确的组和权限应用到密钥标签页,以 root 用户身份输入以下命令:
chgrp apache JBCS_HOME/httpd/conf/krb5.keytab chmod 640 JBCS_HOME/httpd/conf/krb5.keytab
# chgrp apache JBCS_HOME/httpd/conf/krb5.keytab # chmod 640 JBCS_HOME/httpd/conf/krb5.keytab
Copy to Clipboard Copied! 确保
/etc/hosts
文件中包含以下主机配置:127.0.0.1 localhost
127.0.0.1 localhost
Copy to Clipboard Copied!
6.3. 配置 mod_auth_kerb
当您配置 Kerberos 身份验证时,您必须通过在 auth_kerb.conf
文件中指定设置来配置 mod_auth_kerb
。
先决条件
流程
-
前往
JBCS_HOME/httpd/conf.d/
目录。 -
创建名为
auth_kerb.conf
的文件。 输入以下配置详情:
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
# # 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 Copied!
环境变量不会在配置文件中扩展。在前面的示例中,确保您替换了 JBCS_HOME
变量的完整路径。
6.4. 测试 Kerberos 身份验证
当您配置 Kerberos 身份验证时,可以使用测试页面来测试 Kerberos 身份验证。
先决条件
流程
要创建测试页面,请执行以下步骤:
-
进入
JBCS_HOME/httpd/www/html/kerberostest
目录。 -
创建名为
auth_kerb_page.html
的测试页面。 输入以下详情:
<html> <body> <h1>mod_auth_kerb successfully authenticated!</h1> </body> </html>
<html> <body> <h1>mod_auth_kerb successfully authenticated!</h1> </body> </html>
Copy to Clipboard Copied!
-
进入
-
可选:在
JBCS_HOME/httpd/conf/httpd.conf
文件中,将日志级别设置为调试。 - 启动 Apache HTTP 服务器。如需更多信息,请参阅 Red Hat JBoss Core Services Apache HTTP Server 安装指南。
要为测试用户启动 Kerberos 验证
hnelson
,请输入以下命令:kinit hnelson
$ kinit hnelson
Copy to Clipboard Copied! 要查看测试用户 hnel
son 的详情
,请输入以下命令:klist
$ klist
Copy to Clipboard Copied! 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
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 Copied!
验证
要测试 Kerberos 验证,请输入以下命令:
curl --negotiate -u : http://localhost/kerberostest/auth_kerb_page.html
$ curl --negotiate -u : http://localhost/kerberostest/auth_kerb_page.html
Copy to Clipboard Copied! 如果 Kerberos 身份验证正常工作,
curl
命令会生成以下输出:<html> <body> <h1>mod_auth_kerb successfully authenticated!</h1> </body> </html>
<html> <body> <h1>mod_auth_kerb successfully authenticated!</h1> </body> </html>
Copy to Clipboard Copied!
附录 A. Apache HTTP 服务器代理模块
本节包含 mod_cluster
包括的 Apache HTTP 服务器代理模块的扩展定义。
A.1. Mod_manager
模块和指令
集群管理器模块 mod_manager
接收和确认来自节点的消息,包括 worker 节点注册、工作程序节点加载数据和 worker 节点应用生命周期事件。
LoadModule manager_module modules/mod_manager.so
LoadModule manager_module modules/mod_manager.so
为 mod_manager
可配置的指令
<VirtualHost>
元素中的可配置指令如下:
- EnableMCPMReceive
-
允许
虚拟主机
)。向 Apache HTTP 服务器配置添加一个从节点接收
mod_cluster 协议消息(MCPMEnableMCPMReceive
指令,以允许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>
<Location $LOCATION> SetHandler mod_cluster-manager Require ip 127.0.0.1 </Location>
Copy to Clipboard Copied! 访问浏览器中
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
LoadModule proxy_cluster_module modules/mod_proxy_cluster.so
适用于 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/
ProxyPass /requested/ http://worker.local.com/
Copy to Clipboard Copied! ProxyPassMatch
使用正则表达式来匹配代理 URL 应应用到的本地路径。对于任一指令,
!
表示指定的路径为本地,并且对该路径的请求不应路由到远程服务器。例如,以下指令指定gif
文件应在本地提供:ProxyPassMatch ^(/.*\.gif)$ !
ProxyPassMatch ^(/.*\.gif)$ !
Copy to Clipboard Copied!
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
LoadModule advertise_module modules/mod_advertise.so
适用于 mod_advertise
的可配置指令
mod_advertise
模块可以通过以下指令进行配置:
- ServerAdvertise
定义如何使用广告机制。
默认值为
Off
。当设置为Off
时,代理不会公告其位置。当设置为
On
时,公告机制用于告知 worker 节点向这个代理发送状态信息。您还可以使用以下语法指定主机名和端口:ServerAdvertise On http://HOSTNAME :PORT/
.这只有在使用基于名称的虚拟主机或未定义虚拟主机时才需要。- AdvertiseGroup
定义要在其上公告的多播地址。其语法为
AdvertiseGroup ADDRESS:PORT
,ADDRESS
必须与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 ADDRESS :PORT
.这允许在具有多个 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_01
、Node_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 服务器之间通信的首选工作程序类型。其他值包括
lb
和status
。有关 AJPv13 的详细信息,请参阅 Apache Tomcat 连接器 - AJP 协议参考。
worker.properties 的连接
指令
- host
worker 的主机名或 IP 地址。worker 节点必须支持 ajp13 协议堆栈。默认值为
localhost
。您可以通过在主机名或 IP 地址后附加端口号,将 port 指令指定为 host 指令
的一部分
。例如:worker.node1.host=192.168.2.1:8009
或worker.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 节点配置
配置值在以下情况下发送到代理:
- 服务器启动过程中
- 当通过公告机制检测到代理时
- 在重置代理配置时进行错误恢复
价值 | Default(默认) | Description |
---|---|---|
| true | 指定以后对给定会话的请求是否应该路由到同一节点(如果可能)。 |
| false |
指定如果负载均衡器无法将请求路由到其卡住的节点,则 Apache HTTP 服务器代理是否应该删除会话粘性。如果 |
| true |
指定如果负载均衡器无法将请求路由到其卡住的节点,则 Apache HTTP 服务器代理是否应该返回错误。如果 |
| -1 |
指定 worker 可用于处理请求的秒数。当平衡器的所有工作程序都不可用时,mod_cluster 将在一段时间后( |
| 1 |
指定 Apache HTTP 服务器代理在中止前尝试向 worker 发送给定请求的次数。最小值为 |
| false | 指定数据包刷新是启用或禁用的。 |
| -1 |
指定在清除数据包前要等待的时间。值 |
| 10 | 等待(以秒为单位)用于 ping 的 pong 答案的时间。 |
|
指定软最大空闲连接计数。最大值由 Apache HTTP 服务器线程配置(thread | |
| 60 |
指定超过 |
| -1 |
指定在返回错误前,mod_cluster 会在返回错误前等待后端服务器响应的时间(以秒为单位)。mod_cluster 始终在转发请求前使用 |
| mycluster | 指定负载均衡器的名称。 |
|
指定同一负载平衡组中 |
附录 D. mod_cluster
代理和代理发现配置属性
下表包含 mod_cluster
代理和代理发现配置属性的属性和信息。
属性 | 属性 | 默认值 |
---|---|---|
proxy-list |
| |
proxy-url |
| |
advertise |
| true |
advertise-security-key |
| |
exclude-contexts |
| |
auto-enable-contexts |
| true |
stop-context-timeout |
| 10 秒(以秒为单位) |
socket-timeout |
| 20 秒(以毫秒为单位) |
如果未定义 nodeTimeout
,则使用 ProxyTimeout
指令 Proxy
。如果没有定义 ProxyTimeout
,则使用
服务器超时(默认为 JBCS httpd.conf 中的 120 秒)。node Timeout
、ProxyTimeout
和 Timeout
设置在套接字级别。
属性 | 属性 | 默认值 |
---|---|---|
sticky-session |
| true |
sticky-session-remove |
| false |
sticky-session-force |
| true |
node-timeout |
| -1 |
max-attempts |
| 1 |
flush-packets |
| false |
flush-wait |
| -1 |
ping |
| 10(秒) |
SMAX |
| -1(使用默认值) |
ttl |
| -1(使用默认值) |
domain |
| |
load-balancing-group |
|
附录 E. 载入 Tomcat 的配置
当您要在 Apache Tomcat 中使用 mod_cluster
时,您可以配置以下额外属性来加载指标。
属性 | 默认值 | Description |
---|---|---|
loadMetricClass |
|
实施 |
loadMetricCapacity | 1 |
通过 load |
loadHistory | 9 | 负载均衡因子计算中必须考虑的历史负载值的数量。 |
loadDecayFactor | 2 | 历史负载值大幅降低的因子。 |