19.5.2. 配置 mod_cluster 子系统

在管理控制台里,mod_cluster 选项是 Web 子系统配置区域里的一部分。点击 Configuration 标签页。如果你使用的是受管域,请从左上角的 Profile 选单里选择正确的配置集。在默认情况下,hafull-ha 配置集都启用了 mod_cluster 子系统。如果您使用的是独立服务器,您需要使用 standalone-hastandalone-full-ha 配置集来启动服务器。展开 Web 菜单并选择 mod_cluster。下表解释了这些选项。首先是总体配置,然后是会话、Web 上下文、代理、SSL 和网络的配置。每项配置在 mod_cluster 屏幕里都有单独的标签页。

注意

mod_cluster 配置页只对启用了 HA 群集子系统的配置集可见。这些配置集包括用于受管域的 hafull-ha,或者用于独立服务器的 standalone-hastandalone-full-ha

表 19.4. mod_cluster 配置选项

选项 描述 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)

表 19.5. mod_cluster 会话配置选项

选项 描述 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)

表 19.6. mod_cluster 的 Web Context 上下文配置选项

选项 描述 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 应该忽略的用逗号隔开的上下文列表。如果没有指定主机,会假定主机是 localhostROOT 表示 Web 应用程序的根上下文。默认值是 ROOT,invoker,jbossws,juddi,console
/subsystem=modcluster/mod-cluster-config=configuration/:write-attribute(name=excluded-contexts,value="ROOT,invoker,jbossws,juddi,console")

表 19.7. mod_cluster 的代理配置选项

选项 描述 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 在哪寻找加密连接的信息。

表 19.8. mod_cluster 的 SSL 配置选项

选项 描述 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 与之通讯的几个不同类型的服务的不同的超时行为。

表 19.9. 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 应用程序前是否耗尽会话。
DEFAULT
如果 Web 应用程序是非分布式的,在 Web 应用程序卸载以前耗尽会话。
ALWAYS
在 Web 应用程序(即使是非分布式 Web 应用程序)卸载以前总是耗尽会话。
NEVER
在 Web 应用程序(即使是非分布式 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 线程的配置,它可以是 ThreadsPerChild1
profile=full-ha/subsystem=modcluster/mod-cluster-config=configuration/:write-attribute(name=smax,value=ThreadsPerChild)
TTL
超出 SMAX 的空闲连接可存活的时间(秒),默认为 60。
当没有定义 nodeTimeout 时,ProxyTimeout 指令 Proxy 将被使用。如果没有定义 ProxyTimeout,服务器的 Timeout 将被使用。其默认值是 300 秒。nodeTimeoutProxyTimeoutTimeout 都是在套接字级别设置的。
/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 来确定负载度量。下面展示了动态提供者选项及可能的负载度量。

表 19.10. mod_cluster 的动态负载提供者选项

选项 描述 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)