19.5.2. 配置 mod_cluster 子系统
在管理控制台里,
mod_cluster
选项是 Web 子系统配置区域里的一部分。点击 Configuration 标签页。如果你使用的是受管域,请从左上角的 Profile 选单里选择正确的配置集。在默认情况下,ha
和 full-ha
配置集都启用了 mod_cluster
子系统。如果您使用的是独立服务器,您需要使用 standalone-ha
或 standalone-full-ha
配置集来启动服务器。展开 Web 菜单并选择 mod_cluster。下表解释了这些选项。首先是总体配置,然后是会话、Web 上下文、代理、SSL 和网络的配置。每项配置在 mod_cluster 屏幕里都有单独的标签页。
注意
mod_cluster 配置页只对启用了 HA 群集子系统的配置集可见。这些配置集包括用于受管域的
ha
和 full-ha
,或者用于独立服务器的 standalone-ha
和 standalone-full-ha
。
选项 | 描述 | CLI 命令 |
---|---|---|
Load Balancing Group |
如果它不为 null,请求会被发送到专门的负载平衡器上的负载平衡组。如果您不想使用负载平衡组,请将其留空。它默认是没被设置的。
|
/subsystem=modcluster/mod-cluster-config=configuration/:write-attribute(name=load-balancing-group,value=myGroup) |
Balancer |
平衡器的名称。它必须匹配 HTTPD 代理的配置。
|
/subsystem=modcluster/mod-cluster-config=configuration/:write-attribute(name=balancer,value=myBalancer) |
Advertise Socket |
用于群集广告的套接字绑定的名称。
|
/subsystem=modcluster/mod-cluster-config=configuration/:write-attribute(name=advertise-socket,value=modcluster) |
Advertise Security Key |
包含用于广告的安全密钥的字符串。
|
/subsystem=modcluster/mod-cluster-config=configuration/:write-attribute(name=advertise-security-key,value=myKey) |
Advertise |
是否启用广告。默认为
true 。
|
/subsystem=modcluster/mod-cluster-config=configuration/:write-attribute(name=advertise,value=true) |
选项 | 描述 | CLI 命令 |
---|---|---|
Sticky Session |
是否对请求使用 Sticky Session。这意味着在客户连接至专有的群集节点后,进一步的通讯将路由至相同的节点,除非这个节点不可用。它默认为
true ,也是我们推荐的设置。
|
/subsystem=modcluster/mod-cluster-config=configuration/:write-attribute(name=sticky-session,value=true) |
Sticky Session Force |
如果为
true ,如果初始节点不可用,请求不会重定向到新的群集节点。相反,系统会报告失败。默认值为 false 。
|
/subsystem=modcluster/mod-cluster-config=configuration/:write-attribute(name=sticky-session-force,value=false) |
Sticky Session Remove |
在失效切换时删除会话信息。默认值为
false 。
|
/subsystem=modcluster/mod-cluster-config=configuration/:write-attribute(name=sticky-session-remove,value=false) |
选项 | 描述 | CLI 命令 |
---|---|---|
Auto Enable Contexts |
是否默认添加新的上下文到
mod_cluster 。默认值是 true 。如果您修改这个默认值来设置手动启用上下文,Web 应用程序将用 enable() MBean 方法、 或者通过 mod_cluster (它是一个运行在虚拟主机和端口的 HTTPD 代理上的 Web 应用程序)启用它的上下文。
|
/subsystem=modcluster/mod-cluster-config=configuration/:write-attribute(name=auto-enable-contexts,value=true) |
Excluded Contexts | mod_cluster 应该忽略的用逗号隔开的上下文列表。如果没有指定主机,会假定主机是 localhost 。ROOT 表示 Web 应用程序的根上下文。默认值是 ROOT,invoker,jbossws,juddi,console 。
|
/subsystem=modcluster/mod-cluster-config=configuration/:write-attribute(name=excluded-contexts,value="ROOT,invoker,jbossws,juddi,console") |
选项 | 描述 | CLI 命令 |
---|---|---|
Proxy URL |
如果指定,MCMP 命令的 URL 里将预置它的值。
|
/subsystem=modcluster/mod-cluster-config=configuration/:write-attribute(name=proxy-url,value=myhost) |
Proxy List |
A comma-separated list of httpd proxy addresses, in the format
hostname:port . This indicates the list of proxies that the mod_cluster process will attempt to communicate with initially.
|
/subsystem=modcluster/mod-cluster-config=configuration/:write-attribute(name=proxy-list,value="127.0.0.1,127.0.0.2") |
配置
mod_cluster
的 SSL 通讯
在默认情况下,mod_cluster
通讯基于未加密的 HTTP 链接上。如果您设置连接器模式为 HTTPS
(请参考 表 19.5 “mod_cluster
会话配置选项”),下面的设置将告诉 mod_cluster
在哪寻找加密连接的信息。
选项 | 描述 | CLI 命令 |
---|---|---|
ssl |
是否启用 SSL。默认值为
false 。
|
/subsystem=modcluster/mod-cluster-config=configuration/ssl=configuration/:write-attribute(name=ssl,value=true) |
Key Alias |
密钥别名,当创建证书时进行选择。
|
/subsystem=modcluster/mod-cluster-config=configuration/ssl=configuration/:write-attribute(name=key-alias,value=jboss) |
Key Store |
包含客户证书的密钥库的位置
|
/subsystem=modcluster/mod-cluster-config=configuration/ssl=configuration/:write-attribute(name=key-store,value=System.getProperty("user.home") + "/.keystore") |
Key Store Type |
密钥库的类型
|
/subsystem=modcluster/mod-cluster-config=configuration/ssl=configuration/:write-attribute(name=key-store-type,value=JKS) |
Key Store Provider |
密钥库供应商。
|
/subsystem=modcluster/mod-cluster-config=configuration/ssl=configuration/:write-attribute(name=key-store-provider,value=IBMJCE) |
Password |
密码,当创建证书时进行选择。
|
/subsystem=modcluster/mod-cluster-config=configuration/ssl=configuration/:write-attribute(name=password,value=changeit) |
Trust Algorithm |
信任管理工厂的算法。
|
/subsystem=modcluster/mod-cluster-config=configuration/ssl=configuration/:write-attribute(name=trust-algorithm,value=PKIX) |
Cert File |
证书文件的位置。
|
/subsystem=modcluster/mod-cluster-config=configuration/ssl=configuration/:write-attribute(name=ca-certificate-file,value=${user.home}/jboss.crt) |
CRL File |
证书撤销列表文件。
|
/subsystem=modcluster/mod-cluster-config=configuration/ssl=configuration/:write-attribute(name=ca-crl-file,value=${user.home}/jboss.crl) |
Max Certificate Length |
信任库里的存储的证书的最大长度。默认为
5 。
|
/subsystem=modcluster/mod-cluster-config=configuration/ssl=configuration/:write-attribute(name=trust-max-cert-length,value=5) |
Key File |
证书的密钥文件的位置。
|
/subsystem=modcluster/mod-cluster-config=configuration/ssl=configuration/:write-attribute(name=certificate-key-file,value=${user.home}/.keystore) |
Cipher Suite |
允许的加密密文套件
|
/subsystem=modcluster/mod-cluster-config=configuration/ssl=configuration/:write-attribute(name=cipher-suite,value=ALL) |
Certificate Encoding Algorithms |
密钥管理工厂的算法。
|
/subsystem=modcluster/mod-cluster-config=configuration/ssl=configuration/:write-attribute(name=encoding-algorithms,value=ALL) |
Revocation URL |
证书授权撤销列表的 URL。
|
/subsystem=modcluster/mod-cluster-config=configuration/ssl=configuration/:write-attribute(name=ca-revocation-url,value=jboss.crl) |
Protocol |
启用的 SSL 协议。
|
/subsystem=modcluster/mod-cluster-config=configuration/ssl=configuration/:write-attribute(name=protocol,value=SSLv3) |
配置
mod_cluster
网络选项
可用的 mod_cluster
网络选项控制 mod_cluster
与之通讯的几个不同类型的服务的不同的超时行为。
选项 | 描述 | CLI 命令 |
---|---|---|
Node Timeout |
节点的代理连接的超时时间(秒)。这是
mod_cluster 在返回错误前等待后台响应的时间。它对应工作节点的 mod_proxy 文档里描述的超时时间。-1 表示不会超时。请注意,在转发请求前 mod_cluster 总是使用 cping/cpong,而 mod_cluster 使用的 connectiontimeout 值时一个 Ping 值。
|
/subsystem=modcluster/mod-cluster-config=configuration/:write-attribute(name=node-timeout,value=-1) |
Socket Timeout |
等待 HTTPD 代理到 MCMP 命令的响应并标记代理为错误状态的超时时间(毫秒)。
|
/subsystem=modcluster/mod-cluster-config=configuration/:write-attribute(name=socket-timeout,value=20) |
Stop Context Timeout |
等待上下文(分布式上下文的待定请求完成;或非分布式上下文的活动会话销毁/过期)干净关闭的时间,它按照 stopContextTimeoutUnit 指定的单元衡量。
|
/subsystem=modcluster/mod-cluster-config=configuration/:write-attribute(name=stop-context-timeout,value=10) |
Session Draining Strategy |
在卸载 Web 应用程序前是否耗尽会话。
|
/subsystem=modcluster/mod-cluster-config=configuration/:write-attribute(name=session-draining-strategy,value=DEFAULT) |
Max Attempts |
在放弃前,HTTP 代理试图发送给定请求到工作节点的最大次数。最小值是
1 ,表示只尝试一次。mod_proxy 的默认值也是 1,表示不尽心重试。
|
/subsystem=modcluster/mod-cluster-config=configuration/:write-attribute(name=max-attempts,value=1) |
Flush Packets |
是否启用 Web 服务器的数据包冲刷。默认值为
false 。
|
/subsystem=modcluster/mod-cluster-config=configuration/:write-attribute(name=flush-packets,value=false) |
Flush Wait |
在冲刷数据包到 Web 服务器前等待的时间(秒)。默认值是
-1 ,-1 表示在冲刷数据包前无限期地等待。
|
/subsystem=modcluster/mod-cluster-config=configuration/:write-attribute(name=flush-wait,value=-1) |
Ping |
等待群集节点响应的时间(秒)。默认值为
10 秒。
|
/subsystem=modcluster/mod-cluster-config=configuration/:write-attribute(name=ping,value=10) |
SMAX |
最大的 soft 空闲连接数目(和 mod_proxy 文档里的
smax 相同)。最大值取决于 httpd 线程的配置,它可以是 ThreadsPerChild 或1 。
|
profile=full-ha/subsystem=modcluster/mod-cluster-config=configuration/:write-attribute(name=smax,value=ThreadsPerChild) |
TTL |
超出 SMAX 的空闲连接可存活的时间(秒),默认为 60。
当没有定义
nodeTimeout 时,ProxyTimeout 指令 Proxy 将被使用。如果没有定义 ProxyTimeout ,服务器的 Timeout 将被使用。其默认值是 300 秒。nodeTimeout 、ProxyTimeout 和 Timeout 都是在套接字级别设置的。
|
/subsystem=modcluster/mod-cluster-config=configuration/:write-attribute(name=ttl,value=-1) |
Node Timeout |
等待外部 Web 服务器的可用 Workder 进程处理请求的时间(秒)。默认值是
-1 ,表示 mod_cluster 会无限期地等待 HTTPD 工作节点处理请求。
|
/subsystem=modcluster/mod-cluster-config=configuration/:write-attribute(name=node-timeout,value=-1) |
mod_cluster
的负载提供者配置选项
下面的 mod_cluster
配置选项在管理控制台里是不可用的,只能用 CLI 命令行来设置。
如果未定义动态负载处理器,简单的负载处理器将被使用。它赋予每个群集成员负载因子
1
,并均匀地分布负载而不用考虑任何负载平衡算法。要添加它,请使用下列 CLI 命令:
/subsystem=modcluster/mod-cluster-config=configuration/simple-load-provider:add
您可以配置动态的加载提供者使用不同的算法来确定哪个群集节点接收下一个请求。您可以创建自己的加载提供者以满足环境的需要,而且您可以通过 CLI 同时添加多个活动的负载度量。默认的动态加载提供者使用
busyness
来确定负载度量。下面展示了动态提供者选项及可能的负载度量。
选项 | 描述 | CLI 命令 |
---|---|---|
Decay |
历史度量影响力消退的因子
|
/subsystem=modcluster/mod-cluster-config=configuration/dynamic-load-provider=configuration/:write-attribute(name=decay,value=2) |
History |
确定负载时考虑历史负载度量记录的数量。
|
/subsystem=modcluster/mod-cluster-config=configuration/dynamic-load-provider=configuration/:write-attribute(name=history,value=9) |
Load Metric |
JBoss EAP 6 的动态负载提供者附带的默认加载度量是
busyness ,它通过处理请求的线程池里的线程数量计算工作节点的负载。您可以通过和实际负载相除来设置这个度量的容量:calculated_load / capacity。您可以在动态负载提供者里设置多个负载度量。
|
/subsystem=modcluster/mod-cluster-config=configuration/dynamic-load-provider=configuration/load-metric=busyness/:write-attribute(name=capacity,value=1.0) /subsystem=modcluster/mod-cluster-config=configuration/dynamic-load-provider=configuration/load-metric=busyness/:write-attribute(name=type,value=busyness) /subsystem=modcluster/mod-cluster-config=configuration/dynamic-load-provider=configuration/load-metric=busyness/:write-attribute(name=weight,value=1) |
负载度量算法
- cpu
cpu
负载度量使用了平均 CPU 负载来确定哪个群集节点接受下一个工作负荷。- mem
mem
负载度量将空闲的原生内存用作负载度量。我们不鼓励使用这个度量,因为它提供的是包含缓冲和缓存的值,所以在内存管理良好的系统里它总是一个非常低的值。- heap
heap
负载度量使用 heap 用度来确定哪个群集接受下一个工作负荷。- sessions
session
负载度量使用活动会话的数量作为度量。- requests
requests
负载度量使用了客户请求的数量来确定哪个群集节点接受下一个工作负荷。例如,1000 表示 1000 个请求/秒会被认作“满负荷”。- send-traffic
send-traffic
负载度量使用了从工作节点发送到客户的流量。例如,默认的 512 表示如果平均的转出流量是 512KB/s 或更高时节点应该被当作满负荷状态。- receive-traffic
- receive-traffic 负载度量使用了从客户发送到工作节点的流量。例如,默认的 1024 表示如果平均的转入流量是 1024KB/s 或更高时节点应该被当作满负荷状态。
- busyness
- 这个度量代表了服务于请求的线程池的线程的数量。
例 19.1. 添加负载度量
要添加负载度量,请使用
add-metric
命令。
/subsystem=modcluster/mod-cluster-config=configuration/:add-metric(type=sessions)
例 19.2. 设置现有度量的值
要设置现有度量的值,请使用
write-attribute
命令。
/subsystem=modcluster/mod-cluster-config=configuration/dynamic-load-provider=configuration/load-metric=cpu/:write-attribute(name="weight",value="3")
例 19.3. 修改现有度量的值
要修改现有度量的值,请使用
write-attribute
命令。
/subsystem=modcluster/mod-cluster-config=configuration/dynamic-load-provider=configuration/load-metric=cpu/:write-attribute(name="type",value="busyness")
例 19.4. 删除现有度量
要删除现有的度量,请使用
remove-metric
命令。
/subsystem=modcluster/mod-cluster-config=configuration/:remove-metric(type=sessions)