Apache HTTP 服务器连接器和负载均衡指南
用于 Red Hat JBoss Core Services 2.4.37
摘要
mod_cluster
和 mod_jk
connector 模块以及 Red Hat JBoss Core Services 提供的其它模块的负载均衡解决方案。
对红帽文档提供反馈
我们非常感谢您对我们的技术内容提供反馈,并鼓励您告诉我们您的想法。如果您想添加评论,提供见解、纠正拼写错误甚至询问问题,您可以在文档中直接这样做。
您必须有一个红帽帐户并登录到客户门户网站。
要从客户门户网站提交文档反馈,请执行以下操作:
- 选择 Multi-page 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
和其他功能,如实时负载均衡计算、应用生命周期控制、自动代理发现和多个协议支持。
Apache HTTP 服务器连接器和负载均衡指南描述了如何安装和配置 mod_proxy
和 mod_cluster
连接器。本指南还提供有关 在线证书状态协议(OCSP) 的信息,它包含了一组 使用 mod_auth_kerb 的基本负载均衡和 Kerberos 验证 工作示例。
本指南中显示的大部分文件和目录路径是在 Red Hat Enterprise Linux 上安装 JBoss Core Services。对于其他平台,请使用正确的安装路径,如 JBoss 核心服务 安装指南中的 指定。
Red Hat Enterprise Linux 6 不再被支持,并随后从文档中被删除。
第 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 节点快速生成最佳配置模板。
当您为 Apache HTTP 服务器 2.4.37 使用 Load Balancer Configuration 工具时,请确保选择 2.4.x
作为 Apache 版本,然后选择 Tomcat
作为后端配置。
当在 Red Hat Enterprise Linux 8 上安装 Apache HTTP Server(httpd
)时,基础操作系统模块位于 /usr/lib64/httpd/modules
目录中。Red Hat JBoss Core Services 模块目前位于 /opt/rh/jbcs/root/usr/lib64/httpd/modules
目录中。
红帽 JBoss Core Services 模块包括 mod_jk
、mod_cluster
、mod_rt
和 mod_bmx
。这些模块遵循用于命名、目录和前缀的所有红帽 JBoss 核心服务规则。如果要使用这些模块,请创建或修改配置文件以添加 LoadModule
命令。例如:
LoadModule jk_module /opt/rh/jbcs/root/usr/lib64/httpd/modules/mod_jk.so
另外,您还可以在 JBCS_HOME/httpd/conf.d
目录中包括已安装的 Red Hat JBoss Core Services 模块的目录。
考虑由 JBoss Core Services 和 Red Hat Enterprise Linux 提供的 httpd
实现之间的以下区别:
-
您可以从存档文件或 RPM 软件包安装 JBoss Core Services
httpd
。 -
您还可以在 Windows Server 环境中安装 JBoss Core Services
httpd
。 -
JBoss Core Services
httpd
不提供或支持mod_php
模块。Red Hat Enterprise Linuxhttpd
支持mod_php
模块。 -
JBoss Core Services
httpd
提供mod_jk
和mod_cluster
负载均衡器模块。Red Hat Enterprise Linuxhttpd
不提供mod_jk
和mod_cluster
模块。
JBoss Core Services httpd
的用例是使用代理连接到后端。您可以使用 mod_jk
、mod_proxy_cluster
或 mod_proxy
作为代理。在由 Red Hat JBoss Core Services 和 Red Hat Enterprise Linux 提供的 httpd
实现中,这些模块之间没有区别。
自 2.4.37 服务包 10 发布以来,Red Hat JBoss Core Services 不支持将非升级连接连接到后端 WebSockets 服务器。这意味着,当您为 mod_proxy_wstunnel
模块配置 ProxyPass
指令时,您必须确保 upgrade 参数未设置为 NONE
。有关 mod_proxy_wstunnel
的更多信息,请参阅 Apache 文档。
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 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
负载均衡器发送请求。或者,您可以通过在
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 /application=loadbalancer /application/*=loadbalancer
注意所需语法的格式是:
/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 JkMountFile conf.d/uriworkermap.properties
-
前往
可选: 要启用 Apache HTTP 服务器日志,请执行以下步骤之一:
-
在
JkRequestLogFormat
指令中包含%w
,如上一步中有关mod_jk.conf
设置所示。 -
通过在 Apache HTTP 服务器
LogFormat
(s)中包含%{JK_WORKER_NAME}n
记录要使用的mod_jk
worker 名称。
-
在
其他资源
- Apache Tomcat Connectors - Web Server HowTo: mod_jk Directives
- Apache HTTP 服务器文档:日志文件
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 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
注意在前面的示例中,确保将
主机
、端口
和secret
设置替换为与您的环境相关的值。重要使用 Tomcat AJP 连接器时需要
secret
属性。您可以为 worker 节点或 worker.properties
文件中的负载均衡器指定secret
属性。例如:worker.<WORKER_NAME>.secret=<YOUR_AJP_SECRET>
在前面的示例中,将 <
;WORKER_NAME&
gt; 和 <YOUR_AJP_SECRET
> 替换为与您的环境相关的值。
2.5. 配置 Tomcat 以使用 mod_jk
Tomcat 配置为默认从 mod_jk
接收 Apache JServ Protocol(AJP)流量。但是,在将 worker 节点用于 mod_jk
时,您必须执行以下额外配置步骤:
- 配置 AJP 连接器。默认情况下不配置 AJP 连接器。
-
为每个 worker 节点的引擎中配置
jvmRoute
属性的唯一值。 -
指定 worker 节点或负载均衡器的
secret
属性。使用 Tomcat AJP 连接器时需要secret
属性。
流程
要配置 AJP 连接器,请执行以下步骤:
-
打开
JBCS_HOME/tomcat <VERSION> /conf/server.xml
文件。 在
server.xml
文件中,输入以下行:<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
-
打开
要为每个 worker 节点的引擎中的
jvmRoute
属性配置唯一值,请输入以下详情:<Engine name="Catalina" jvmRoute="node1" >
重要确保
jvmRoute
属性值与 worker.properties 文件中指定的 worker
名称匹配。要为 worker 节点或负载均衡器指定
secret
属性,请执行以下步骤:-
打开
JBCS_HOME/httpd/conf.d/workers.properties
文件。 在
worker.properties
文件中,确保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
-
打开
第 3 章 使用 JBoss HTTP 连接器进行负载平衡(mod_cluster
)
mod_cluster
连接器是一个减少配置、智能负载均衡解决方案,适用于 JBoss EAP 和 Apache HTTP 服务器 Tomcat。mod_cluster
模块基于最初由 JBoss mod_cluster
社区项目开发的技术。
3.1. JBoss HTTP 连接器(mod_cluster
)
mod_cluster
模块对 JBoss EAP 和 Apache HTTP 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 模块组成:
组件 | 描述 |
---|---|
| Shared Memory Manager 模块与多个 Apache HTTP 服务器进程共享实时 worker 节点信息。 |
| Cluster Manager 模块接收和确认来自 worker 节点的消息,包括节点注册、节点加载数据和节点应用程序生命周期事件。 |
| Proxy Balancer 模块处理到集群节点的请求路由。Proxy Balancer 根据集群中的应用程序位置、每个集群节点的当前状态以及 Session ID(请求是已建立的会话的一部分)选择适当的目的地节点。 |
| Proxy Advertisement 模块通过 UDP 多播消息广播代理服务器是否存在。服务器广告信息包含来自要加入负载平衡集群的 worker 节点的 IP 地址和端口号。 |
其他资源
3.2. mod_cluster
字符限制
mod_cluster
模块使用共享内存来保留节点描述。共享内存是在 Apache HTTP 服务器启动时创建的,每个项目的结构已被修复。
当您定义代理服务器和 worker 节点属性时,请确定您遵循以下字符限制:
属性 | 最大字符限制 | 描述 |
---|---|---|
别名长度 | 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 服务器负载均衡配置
在 Apache HTTP Server 2.1 及更高版本中,默认情况下为 Apache HTTP 服务器正确配置了 mod_cluster
。有关设置自定义配置的更多信息,请参阅配置 基本代理服务器。
您还可以使用红帽客户门户网站上的 Load Balancer Configuration 工具为 mod_cluster
和 Tomcat worker 节点快速生成最佳配置模板。
当您为 Apache HTTP 服务器 2.4.37 使用 Load Balancer Configuration 工具时,请确保选择 2.4.x
作为 Apache 版本,然后选择 Tomcat
作为后端配置。
当在 Red Hat Enterprise Linux 8 上安装 Apache HTTP Server(httpd
)时,基础操作系统模块位于 /usr/lib64/httpd/modules
目录中。Red Hat JBoss Core Services 模块目前位于 /opt/rh/jbcs/root/usr/lib64/httpd/modules
目录中。
红帽 JBoss Core Services 模块包括 mod_jk
、mod_cluster
、mod_rt
和 mod_bmx
。这些模块遵循用于命名、目录和前缀的所有红帽 JBoss 核心服务规则。如果要使用这些模块,请创建或修改配置文件以添加 LoadModule
命令。例如:
LoadModule jk_module /opt/rh/jbcs/root/usr/lib64/httpd/modules/mod_jk.so
另外,您还可以在 JBCS_HOME/httpd/conf.d
目录中包括已安装的 Red Hat JBoss Core Services 模块的目录。
-
如果要使用
mod_proxy_cluster
模块,您必须启用mod_proxy
模块并禁用mod_proxy_balancer
模块。 -
如果您希望
mod_proxy_cluster
使用 Apache JServ Protocol(AJP),您必须启用proxy_ajp_module
。 -
使用 AJPSecret
your_secret
为 AJP 后端提供 secret。如果your_secret
不与后端配置的值不匹配,后端会为通过代理发送的任何请求发送503
错误响应。
自 2.4.37 服务包 10 发布以来,Red Hat JBoss Core Services 不支持将非升级连接连接到后端 websocket 服务器。这意味着,当您为 mod_proxy_wstunnel 模块配置 ProxyPass 指令时,您必须确保 upgrade 参数未设置为 NONE。有关 mod_proxy_wstunnel 的更多信息,请参阅 Apache 文档。
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
注意在前面的示例中,将
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>
注意在前面的示例中,将
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
注意如果禁用服务器广告,或者代理服务器和 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.
3.6. 在 mod_cluster
中配置 Tomcat worker 节点
使用 mod_cluster
时,您可以将 Tomcat worker 节点配置为仅以非集群模式运行的 Apache HTTP Server Tomcat 服务。在这种情况下,在计算负载均衡因时,一次只能使用一个负载指标。
Apache HTTP 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" />
要为 worker 节点指定唯一身份,请编辑
JWS_HOME/tomcat <VERSION> /conf/server.xml
文件,将jvmRoute
属性和值添加到Engine
元素中:<Engine name="Catalina" defaultHost="localhost" jvmRoute="worker01">
要配置
STATUS MCMP
消息频率,请修改org.jboss.modcluster.container.catalina.status-frequency
Java 系统属性。例如:
-Dorg.jboss.modcluster.container.catalina.status-frequency=6
注意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
对于使用 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"'
注意当代理服务器使用
mod_cluster
时,代理服务器可以使用 UDP 多播来公告自身。大多数操作系统防火墙默认阻止服务器广告功能。要启用服务器公告并接收这些多播信息,您可以在 worker 节点的防火墙上打开 UDP 连接的端口23364
,如上例中所示。
Red Hat Enterprise Linux 6 不再被支持,并随后从文档中被删除。
3.7. 配置 worker 节点以使用静态代理服务器列表操作
服务器公告允许 worker 节点动态发现并注册到代理服务器。如果禁用 UDP 多播,或者服务器广告被禁用,您必须使用静态代理服务器地址和端口配置 Apache HTTP 服务器 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"/>
注意确保将
advertise
属性设置为false
。要创建静态代理服务器列表,请通过以以下格式添加以逗号分隔的代理列表来更新
proxyList
属性:IP_ADDRESS:PORT,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"/>
第 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
指定 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
注意-
ServerName
必须与与 SSL 证书关联的通用名称(CN)匹配。如果ServerName
与 CN 不匹配,客户端浏览器会显示域名不匹配错误。 -
SSLCertificateFile
指定到 SSL 证书文件的路径。 -
SSLCertificateKeyFile
指定与 SSL 证书关联的私钥文件的路径。
-
-
打开
-
验证
Listen
指令是否与部署的httpd
服务的主机名或 IP 地址匹配。 要重启 Apache HTTP 服务器,请输入以下命令:
# service jbcs-httpd24-httpd restart
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
在前面的示例中,将
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) SSLVerifyClient require SSLVerifyDepth 3 # Enable OCSP SSLOCSPEnable on SSLOCSPDefaultResponder http://<HOST>:<PORT> SSLOCSPOverrideResponder on
注意前面的示例演示了如何启用客户端证书的 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
在前面的命令中,请确定指定了以下详情:
-
使用
-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>
注意前面的示例演示了如何将 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"/>
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
注意前面的示例演示了为
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
要创建
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
要创建
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
要创建测试用户
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
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
-
进入
要创建密钥标签页:
-
打开
JBCS_HOME/httpd/conf
文件。 输入以下详情:
# 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
重要环境变量不会在
ktutil
提示符中扩展。您必须替换JBCS_HOME
变量的完整路径。
-
打开
要将正确的组和权限应用到密钥标签页,以 root 用户身份输入以下命令:
# chgrp apache JBCS_HOME/httpd/conf/krb5.keytab # chmod 640 JBCS_HOME/httpd/conf/krb5.keytab
确保
/etc/hosts
文件中包含了以下主机配置:127.0.0.1 localhost
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 <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>
环境变量不会在配置文件中扩展。在前面的示例中,确保您替换了 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>
-
进入
-
可选:在
JBCS_HOME/httpd/conf/httpd.conf
文件中,将日志级别设置为调试。 - 启动 Apache HTTP 服务器。如需更多信息,请参阅 Red Hat JBoss Core Services Apache HTTP Server 安装指南。
要为测试用户启动 Kerberos 验证
hnelson
,请输入以下命令:$ kinit hnelson
要查看测试用户 hnel
son 的详情
,请输入以下命令:$ klist
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
验证
要测试 Kerberos 验证,请输入以下命令:
$ curl --negotiate -u : http://localhost/kerberostest/auth_kerb_page.html
如果 Kerberos 身份验证正常工作,
curl
命令会生成以下输出:<html> <body> <h1>mod_auth_kerb successfully authenticated!</h1> </body> </html>
6.5. 其他资源(或后续步骤)
附录 A. Apache HTTP 服务器代理模块
本节包含 mod_cluster
包括的 Apache HTTP 服务器代理模块的扩展定义。
A.1. Mod_manager
模块和指令
集群管理器模块 mod_manager
接收和确认来自节点的消息,包括 worker 节点注册、worker 节点加载数据和 worker 节点应用程序生命周期事件。
LoadModule manager_module modules/mod_manager.so
为 mod_manager
可配置的指令
< VirtualHost>
元素中的可配置指令如下:
- EnableMCPMReceive
-
允许
VirtualHost
从节点接收 mod_cluster Protocol 消息(MCPM)。
向 Apache HTTP 服务器配置添加一个EnableMCPMReceive
指令,以允许mod_cluster
正确运行。在配置了广播
的位置,必须在VirtualHost
配置中添加EnableMCPMReceive
。 - 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
-
将将使用的最大 worker 节点 mod_cluster。默认值为
20
。 - Maxhost
-
将使用最多的主机数(别名)mod_cluster。这也是负载均衡器的最大数量。默认值为
20
。 - Maxsessionid
-
存储的活跃会话标识符的最大数量。如果会话没有从该会话收到任何信息(五分钟)时,会话被视为不活跃。这仅用于演示和调试目的。默认值为
0,
它禁用这个逻辑。 - ManagerBalancerName
-
当 worker 节点不提供负载均衡器名称时,要使用的负载均衡器的名称。默认值为
mycluster
。 - PersistSlots
-
当设置为
上的
时,节点、别名和上下文则会保留在文件中。默认值为off
。 - CheckNonce
在
上
设置为 时,会检查会话标识符以确保它们是唯一的且之前没有发生。默认值在上
。注意将这个指令设置为
off
可能会使服务器存在易受回放攻击。- SetHandler mod_cluster-manager
定义一个处理程序来显示集群中 worker 节点的信息。这在
Location
元素中定义:<Location $LOCATION> SetHandler mod_cluster-manager Require ip 127.0.0.1 </Location>
当访问浏览器中在
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
适用于 mod_proxy_cluster
的可配置指令
您还可以在 < VirtualHost> 元素中
配置以下指令来更改负载均衡行为。
- CreateBalancers
定义如何在 Apache HTTP 服务器虚拟主机中创建负载均衡器。在
CreateBalancers
中,以下值有效:-
0
:在 Apache HTTP 服务器中定义的所有虚拟主机中创建负载均衡器。记得在ProxyPass
指令中配置负载均衡器。 -
1:
不要创建负载均衡器。使用此值时,还必须在ProxyPass
或ProxyPassMatch
中定义负载均衡器名称。 -
2:
仅创建主服务器。这是CreateBalancers
的默认值。
-
- UseAlias
定义是否可检查定义的
Alias
是否与ServerName
对应。以下值对UseAlias
有效:-
0
:忽略 worker 节点的别名信息。这是UseAlias
的默认值。 -
1:
验证定义的别名对应于 worker 节点的服务器名称。
-
- LBstatusRecalTime
-
定义代理计算 worker 节点状态的时间间隔(以秒为单位)。默认间隔为
5
秒。 - ProxyPassMatch; ProxyPass
ProxyPass
将远程服务器映射到本地服务器命名空间中。如果本地服务器有地址,如http://local.com/
,以下ProxyPass
指令会将http://local.com/requested/file1
的本地请求转换为http://worker.local.com/file1
的代理请求。ProxyPass /requested/ http://worker.local.com/
ProxyPassMatch
使用正则表达式匹配应应用 URL 的本地路径。对于任一指令,
!
表示指定的路径为本地路径,并且该路径的请求不应路由到远程服务器。例如,以下指令指定应在本地提供gif
文件。ProxyPassMatch ^(/.*\.gif)$ !
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
适用于 mod_advertise
的可配置指令
mod_advertise
模块可以通过以下指令进行配置:
- ServerAdvertise
定义广告机制的用法。
默认值为
Off
。当设置为Off
时,代理不会公告其位置。当设置为
On
时,广告机制用于告知 worker 节点向此代理发送状态信息。您还可以使用以下语法指定主机名和端口:ServerAdvertise On http://HOSTNAME:PORT/
.这只有在使用基于名称的虚拟主机或者未定义虚拟主机时才需要。- AdvertiseGroup
定义要公告的多播地址。语法是
AdvertiseGroup ADDRESS:PORT
,电子邮件地址必须与AdvertiseGroupAddress
对应,PORT
必须与 worker 节点上的AdvertisePort
对应。如果您的 worker 节点是基于 JBoss EAP,并且在启动时使用
-u
开关,则默认的AdvertiseGroupAddress
是通过-u
切换传递的值。默认值为
224.0.1.105:23364
。如果没有指定端口,则端口默认为23364
。- AdvertiseFrequency
-
多播消息之间的时间间隔(以秒为单位)广告 IP 地址和端口。默认值为
10
。 - AdvertiseSecurityKey
-
定义用于在 Apache HTTP 服务器中识别
mod_cluster
的字符串。默认情况下不设置这个指令,不会发送任何信息。 - AdvertiseManagerUrl
- 定义 worker 节点应该用来向代理服务器发送信息的 URL。默认情况下不设置这个指令,不会发送任何信息。
- AdvertiseBindAddress
-
定义发送多播消息的地址和端口。语法是 Advertise
BindAddress ADDRESS:PORT
。这允许在具有多个 IP 地址的机器中指定地址。默认值为0.0.0.0:23364
。
A.4. mod_proxy
模块和指令
mod_proxy
模块是一个标准的 Apache HTTP Server 模块,它允许服务器充当通过 AJP(Apache JServe Protocol)、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 服务器模块,它支持 AJP(Apache JServe Protocol)代理。如果要使用 mod_proxy
_ ajp,也需要 mod_proxy
模块。此外,在使用 Tomcat AJP 连接器时,需要 secret
属性。使用以下命令可将 secret
属性添加到 ProxyPass
设置中:
ProxyPass /example/ ajp://localhost:8009/example/ secret=YOUR_AJP_SECRET
如果您在负载均衡器上设置 secret
,其所有成员都会继承这个 secret
。
A.6. Mod_cluster_slotmem
模块和指令
mod_cluster_slotmem
模块是一个共享内存提供程序,用于创建和管理数据集在"slots"中组织的共享内存段。
mod_cluster_slotmem
模块不需要任何配置指令。
附录 B. Worker.properties
文件
Apache HTTP 服务器 worker 节点是映射到 mod_jk
负载均衡器的 servlet 容器。worker 节点在 JBCS_HOME/httpd/conf/workers.properties
中定义。此文件指定不同的 servlet 容器所处的位置,以及如何在它们之间进行负载平衡调用。
B.1. Worker.properties
概述
workers.properties
文件包含全局属性部分和 worker 属性部分。
- 全局属性
- 本节包含应用到所有 worker 的指令。
- worker 属性
- 本节包含适用于每个单独 worker 的指令。
每个节点使用 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 服务器之间的通信的首选 worker 类型。其他值包括
lb
和status
。有关 AJPv13 的详情,请查看 Apache Tomcat 连接器 - AJP 协议参考。
worker.properties 的连接
指令
- 主机
worker 的主机名或 IP 地址。worker 节点必须支持 ajp13 协议堆栈。默认值为
localhost
。您可以将
port
指令指定为 host 指令的一部分,方法是在主机名或 IP 地址后附加端口号。例如:worker.node1.host=192.168.2.1:8009
或worker.node1.host=node1.example.com:8009
。- port
-
侦听定义的协议请求的远程服务器实例的端口号。默认值为
8009
,这是 AJPv13 worker 的默认监听端口。 - ping_mode
指定在其当前网络健康状态中探测到哪些连接的条件。
该探测为
CP
使用空的 AJPv13 数据包,并在指定的超时内要求返回CPong
。您可以使用指令标记的组合来指定条件。标志不是用逗号分开。例如,设置正确的指令标记是
worker.node1.ping_mode=CI
。- c(connect)
-
指定连接在连接到服务器后探测一次。您可以使用
connect_timeout
指令指定超时,否则将使用ping_timeout
的值。 - P(prepost)
-
指定连接在向服务器发送每个请求前被探测。您可以使用
prepost_timeout
指令指定超时,否则将使用ping_timeout
的值。 - I(interval)
-
指定在常规内部维护周期内会探测连接。您可以使用
connection_ping_interval
指令指定每个间隔之间的空闲时间,否则使用ping_timeout
的值。 - A(全部)
-
最常用的设置,用于指定应用所有指令标记。有关
\*_timeout
高级指令的详情,请查看 Apache Tomcat Connector - 参考指南。
- ping_timeout
-
指定
CPong
回答连接探测的时间(请参阅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. 多处理模块(MPM)
Red Hat JBoss Core Services 包括了各种多处理模块(MPM)。您可以使用这些 MPMs 自定义 Apache HTTP 服务器响应传入请求。
C.1. MPMs 概述
Red Hat Enterprise Linux 和 Microsoft Windows 都提供了多处理模块(MPM)。
MPMs for Red Hat Enterprise Linux
prefork
-
prefork
MPM 实现非线程的预派生 Web 服务器。单个控制进程负责启动子进程,在到达时侦听传入连接和服务它们。每个请求都由一个进程处理,确保每个请求被隔离,且不会影响任何其他请求。 worker
-
worker
MPM 实现混合多进程、多线程服务器。每个子进程都会创建一个固定数量的服务器线程,允许服务器处理大量系统资源的请求。 event
-
事件
MPM 基于worker
MPM,但允许通过将某些处理工作传递给监听器线程来同时提供额外的请求,从而释放 worker 线程来为新请求服务。
Microsoft Windows 的 MPM
winnt
-
winnt
MPM 是 Windows 系统唯一可用的。它使用单一控制过程,启动单一进程来为传入请求创建线程。
C.2. 切换 MPM
服务器根据 JBCS_HOME/httpd/conf.modules.d/00-mpm.conf
文件中的 LoadModule
指令选择 MPM。您可以通过从 00-mpm.conf
文件中的 LoadModule
指令中删除注释字符(#
)来选择一个特定的 MPM。
默认情况下会选择 prefork
MPM。例如:
# prefork MPM: Implements a non-threaded, pre-forking web server # See: http://httpd.apache.org/docs/2.4/mod/prefork.html LoadModule mpm_prefork_module modules/mod_mpm_prefork.so
流程
编辑
JBCS_HOME/httpd/conf.modules.d/00-mpm.conf
,为prefork
MPM 的LoadModule
指令添加注释(#
)字符。例如:# prefork MPM: Implements a non-threaded, pre-forking web server # See: http://httpd.apache.org/docs/2.4/mod/prefork.html #LoadModule mpm_prefork_module modules/mod_mpm_prefork.so
在同一个
00-mpm.conf
文件中,从您要切换到的 MPM 的LoadModule
指令中删除注释(#
)字符。这些行直接位于prefork
MPM 下。例如,要加载
worker
MPM,请从worker
MPM 的LoadModule
指令中删除注释(#
)字符:# worker MPM: Multi-Processing Module implementing a hybrid # multi-threaded multi-process web server # See: http://httpd.apache.org/docs/2.4/mod/worker.html LoadModule mpm_worker_module modules/mod_mpm_worker.so
要验证 MPM 是否已正确配置,请输入以下命令:
$ sbin/apachectl -V
这个命令显示当前 MPM。例如:
Server MPM: worker
附录 D. Worker 节点配置
配置值会在以下情况下发送到代理:
- 服务器启动过程中
- 当通过公告机制检测到代理时
- 在重置代理配置时进行错误恢复
表 D.1. Tomcat 的代理配置值
值 | 默认 | 描述 |
---|---|---|
| true | 指定给定会话的后续请求是否应该路由到同一节点(如果可能)。 |
| false |
如果负载均衡器无法将请求路由到卡的节点,则指定 Apache HTTP 服务器代理是否应该删除会话粘性。如果 |
| true |
如果负载均衡器无法将请求路由到它卡的节点,则指定 Apache HTTP 服务器代理是否应该返回错误。如果 |
| -1 |
指定等待 worker 可以用来处理请求的秒数。当一个负载均衡器的所有 worker 都不可用时,mod_cluster 将在同时( |
| 1 |
指定 Apache HTTP 服务器代理试图向 worker 发送给定请求的次数,然后再中止。最小值为 |
| false | 指定数据包清除是启用还是禁用。 |
| -1 |
指定在清除数据包前等待的时间。值 |
| 10 | 等待(以秒为单位)等待(以秒为单位)对 ping 进行 pong 答案。 |
|
指定软最大闲置连接数。最大的值由 Apache HTTP 服务器线程配置( | |
| 60 |
指定闲置连接的时间(以秒为单位)会保留超过 |
| -1 |
指定在返回错误前,mod_cluster 会等待后端服务器响应的时间(以秒为单位)。mod_cluster 始终使用 |
| mycluster | 指定负载均衡器的名称。 |
|
指定同一负载均衡组内 |
附录 E. mod_cluster
代理和代理发现配置属性
下表包含 mod_cluster
代理和代理发现配置属性的属性和信息。
表 E.1. mod_cluster
的代理发现配置属性
属性 | 属性 | 默认值 |
---|---|---|
proxy-list |
| |
proxy-url |
| |
公告 |
| true |
advertise-security-key |
| |
excluded-contexts |
| |
auto-enable-contexts |
| true |
stop-context-timeout |
| 10 秒(以秒为单位) |
socket-timeout |
| 20 秒(以毫秒为单位) |
当未定义 nodeTimeout
时,会使用
指令 Proxy。如果没有定义 Proxy
TimeoutProxyTimeout
,则使用服务器超时(超时
)(在 JBCS httpd.conf 中默认使用120 秒)。nodeTimeout
、Proxy
和 Timeout 在套接字级别上设置。
Timeout
表 E.2. mod_cluster
的代理配置属性
属性 | 属性 | 默认值 |
---|---|---|
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 |
|
附录 F. 载入 Tomcat 的配置
当您要在 Apache Tomcat 中使用 mod_cluster
时,您可以配置以下额外属性来加载指标。
表 F.1. 载入 Tomcat 的配置
属性 | 默认值 | 描述 |
---|---|---|
loadMetricClass |
|
实施 |
loadMetricCapacity | 1 |
通过 |
loadHistory | 9 | 在负载均衡因计算中必须考虑的历史负载值数 |
loadDecayFactor | 2 | 历史负载值降低的因素 |