Citrix ADC

对微软 Exchange 服务器进行负载平衡

本文档提供了使用 Citrix ADC 设备对 Microsoft Exchange 服务器进行负载平衡的推荐配置示例。

Citrix ADM 样书简化了 Exchange 的 Citrix ADC 负载平衡配置。有关详细信息,请参阅 微软 Exchange 样书

注意:

使用单个负载平衡虚拟服务器无法实现 Microsoft Exchange 的负载平衡。相反,请遵循本文档中提供的推荐配置。

微软 Exchange 2016 和更新版本的差异

  • 您无需在 Exchange 2016 上配置静态远程过程调用 (RPC) 端口,因为不使用 RPC 端口。

  • 在 Exchange 2016 中,所有名为 “适用于 2016 年以下版本的 Exchange” 的部分都不是必需的。

  • 如果您已经配置了任何非 2016 年版本并迁移到 2016 年,则无需将其删除。因为即使它们存在也没有问题。

注意事项

  • 对于 2016 年以下的 Exchange 服务器的远程过程调用 (RPC),必须将 Exchange CAS 服务器配置为静态端口分配。有关详细信息,请参阅 Exchange 2010 客户端访问服务器:配置静态 RPC 端口 Microsoft 文档。

  • 此配置假设使用 Citrix ADC 设备进行 SSL 卸载。有关更多信息,请参阅 如何在 Exchange 2010 中配置 SSL 卸载或在 Exchange 2013 .aspx 中配置 SSL 卸载)。

  • 如果不想使用 Citrix ADC 设备的 SSL 卸载功能,请将服务组 CAS_servicegroup_http 和监视器更改为类型 SSL 并将其绑定到端口 443

  • 浪涌保护与微软 Exchange 不兼容。不要在与 Microsoft Exchange 相关的任何服务或服务组上启用它。启用浪涌保护会导致连接和可靠性问题。

  • 用正确的信息替换以下变量:

    • {HTTP 公共 IP} — 公共 Exchange HTTP 终端节点的 IP 地址
    • {RPC 公有 IP} — 公共 Exchange RPC 终端节点的 IP 地址(可以与 HTTP 公有 IP 相同)
    • {Timeout} — 所需的超时(以秒为单位)。建议长达标准工作轮班时间(即 8 小时)
    • {pertimeOut} — 所需的超时(以分钟为单位)。必须与之前的超时设置对应。
    • {AB 端口} —RPC 地址簿 TCP 端口(通常为 59601)
    • {CA 端口} —RPC 客户端访问 TCP 端口(通常为 59600)
    • {cerTKey} —SSL 证书密钥
    • {CAS-1 服务器} — CAS 服务器的 IP 地址
    • {CAS-2 服务器} — CAS 服务器的 IP 地址

适用于所有版本的 Microsoft Exchange 服务器的推荐配置示例

服务组:

add serviceGroup CAS_servicegroup_http HTTP -maxClient 0 -maxReq 0 -cip DISABLED -usip NO -SP OFF -useproxyport YES -cltTimeout {Timeout} -svrTimeout {Timeout} -CKA NO -TCPB NO -CMP YES
add serviceGroup CAS_servicegroup_rpc_epm TCP -maxClient 0 -maxReq 0 -cip DISABLED -usip NO -SP OFF -useproxyport YES -cltTimeout {Timeout} -svrTimeout {Timeout} -CKA NO -TCPB NO -CMP NO
bind serviceGroup CAS_servicegroup_http {CAS-1 Server} 80 -CustomServerID ""None""
bind serviceGroup CAS_servicegroup_http {CAS-2 Server} 80 -CustomServerID ""None""
bind serviceGroup CAS_servicegroup_rpc_epm {CAS-1 Server} 135 -CustomServerID ""None""
bind serviceGroup CAS_servicegroup_rpc_epm {CAS-2 Server} 135 -CustomServerID ""None""
<!--NeedCopy-->

监视器:

add lb monitor CAS_monitor_rpc_epm TCP -LRTM ENABLED -destPort 135
set lb monitor http-ecv HTTP-ECV -recv 403 -LRTM DISABLED
bind serviceGroup CAS_servicegroup_http -monitorName http-ecv
bind serviceGroup CAS_servicegroup_rpc_epm -monitorName CAS_monitor_rpc_epm
<!--NeedCopy-->

负载平衡虚拟服务器:

add lb vserver CAS_vserver_owa SSL 0.0.0.0 0 -persistenceType COOKIEINSERT -timeout {PersTimeout} -lbMethod LEASTCONNECTION -cltTimeout {Timeout}
add lb vserver CAS_vserver_as SSL 0.0.0.0 0 -persistenceType RULE -timeout {PersTimeout} -lbMethod LEASTCONNECTION -rule "HTTP.REQ.HEADER("Authorization")" -cltTimeout {Timeout}
add lb vserver CAS_vserver_oa SSL 0.0.0.0 0 -timeout {PersTimeout} -lbMethod LEASTCONNECTION -cltTimeout {Timeout}
add lb vserver CAS_vserver_ews SSL 0.0.0.0 0 -timeout {PersTimeout} -lbMethod LEASTCONNECTION -cltTimeout {Timeout}
add lb vserver CAS_vserver_ad SSL 0.0.0.0 0 -timeout {PersTimeout} -lbMethod LEASTCONNECTION -cltTimeout {Timeout}
set ssl vserver CAS_vserver_owa -sslRedirect ENABLED
bind ssl vserver CAS_vserver_owa -certkeyName {CertKey}
bind ssl vserver CAS_vserver_oab -certkeyName {CertKey}
bind ssl vserver CAS_vserver_as -certkeyName {CertKey}
bind ssl vserver CAS_vserver_oa -certkeyName {CertKey}
bind ssl vserver CAS_vserver_ews -certkeyName {CertKey}
bind ssl vserver CAS_vserver_ad -certkeyName {CertKey}
bind lb vserver CAS_vserver_owa CAS_servicegroup_http
bind lb vserver CAS_vserver_oab CAS_servicegroup_http
bind lb vserver CAS_vserver_as CAS_servicegroup_http
bind lb vserver CAS_vserver_oa CAS_servicegroup_http
bind lb vserver CAS_vserver_ews CAS_servicegroup_http
bind lb vserver CAS_vserver_ad CAS_servicegroup_http
add lb vserver CAS_vserver_rpc_epm TCP {RPC Public IP} 135 -timeout {PersTimeout} -cltTimeout {Timeout} -comment "vserver for RPC End Point Mapper"
bind lb vserver CAS_vserver_rpc_epm CAS_servicegroup_rpc_epm
<!--NeedCopy-->

持久性组:

add lb group CAS_persistency_group_sourceip
bind lb group CAS_persistency_group_sourceip CAS_vserver_oa
bind lb group CAS_persistency_group_sourceip CAS_vserver_oab
bind lb group CAS_persistency_group_sourceip CAS_vserver_ews
bind lb group CAS_persistency_group_sourceip CAS_vserver_ad
bind lb group CAS_persistency_group_sourceip CAS_vserver_rpc_epm
set lb group CAS_persistency_group_sourceip -persistenceType SOURCEIP -timeout {PersTimeout}
<!--NeedCopy-->

HTTP 服务的内容切换:

add cs vserver CAS_vserver_cs SSL {Public IP} 443 -cltTimeout {Timeout} -caseSensitive OFF -comment "Exchange CS VServer"
bind ssl vserver CAS_vserver_cs -certkeyName {CertKey}
add cs action CAS_action_cs_owa -targetLBVserver CAS_vserver_owa
add cs action CAS_action_cs_oab -targetLBVserver CAS_vserver_oab
add cs action CAS_action_cs_as -targetLBVserver CAS_vserver_as
add cs action CAS_action_cs_oa -targetLBVserver CAS_vserver_oa
add cs action CAS_action_cs_ews -targetLBVserver CAS_vserver_ews
add cs action CAS_action_cs_autodiscover -targetLBVserver CAS_vserver_ad
add cs policy CAS_policy_cs_owa -rule "HTTP.REQ.URL.SET_TEXT_MODE(IGNORECASE).STARTSWITH("/owa")" -action CAS_action_cs_owa
add cs policy CAS_vserver_oab -rule "HTTP.REQ.URL.SET_TEXT_MODE (IGNORECASE).STARTSWITH("/OAB")"
add cs policy CAS_policy_cs_as -rule "HTTP.REQ.URL.SET_TEXT_MODE(IGNORECASE).STARTSWITH("/Microsoft-Server-ActiveSync")" -action CAS_action_cs_as
add cs policy CAS_policy_cs_autodiscover -rule "HTTP.REQ.URL.SET_TEXT_MODE(IGNORECASE).STARTSWITH("/Autodiscover")" -action CAS_action_cs_autodiscover
add cs policy CAS_policy_cs_oa -rule "HTTP.REQ.URL.SET_TEXT_MODE(IGNORECASE).STARTSWITH("/rpc")" -action CAS_action_cs_oa
add cs policy CAS_policy_cs_ews -rule "HTTP.REQ.URL.SET_TEXT_MODE(IGNORECASE).STARTSWITH("/EWS")" -action CAS_action_cs_ews

bind cs vserver CAS_vserver_cs -policyName CAS_policy_cs_oa -priority 90
bind cs vserver CAS_vserver_cs -policyName CAS_policy_cs_owa -priority 100
bind cs vserver CAS_vserver_cs -policyName CAS_policy_cs_oab -priority 100
bind cs vserver CAS_vserver_cs -policyName CAS_policy_cs_as -priority 110
bind cs vserver CAS_vserver_cs -policyName CAS_policy_cs_autodiscover -priority 120
bind cs vserver CAS_vserver_cs -policyName CAS_policy_cs_ews -priority 130
bind cs vserver CAS_vserver_cs -lbvserver CAS_vserver_owa
<!--NeedCopy-->

2016 年以下的微软 Exchange 服务器版本的推荐配置示例

其他服务组:

add serviceGroup CAS_servicegroup_rpc_ca TCP -maxClient 0 -maxReq 0 -cip DISABLED -usip NO -SP OFF -useproxyport YES -cltTimeout {Timeout} -svrTimeout {Timeout} -CKA NO -TCPB NO -CMP NO
add serviceGroup CAS_servicegroup_rpc_ab TCP -maxClient 0 -maxReq 0 -cip DISABLED -usip NO -SP OFF -useproxyport YES -cltTimeout {Timeout} -svrTimeout {Timeout} -CKA NO -TCPB NO -CMP NO
bind serviceGroup CAS_servicegroup_rpc_ca {CAS-1 Server} {CA Port} -CustomServerID ""None""
bind serviceGroup CAS_servicegroup_rpc_ca {CAS-2 Server} {CA Port} -CustomServerID ""None""
bind serviceGroup CAS_servicegroup_rpc_ab {CAS-1 Server} {AB Port} -CustomServerID ""None""
bind serviceGroup CAS_servicegroup_rpc_ab {CAS-2 Server} {AB Port} -CustomServerID ""None""
<!--NeedCopy-->

其他监视器:

add lb monitor CAS_monitor_rpc_ca TCP -LRTM ENABLED -destPort {CA Port}
add lb monitor CAS_monitor_rpc_ab TCP -LRTM ENABLED -destPort {AB Port}
bind serviceGroup CAS_servicegroup_rpc_ca -monitorName CAS_monitor_rpc_ca
bind serviceGroup CAS_servicegroup_rpc_ab -monitorName CAS_monitor_rpc_ab
<!--NeedCopy-->

额外的负载平衡虚拟服务器:

add lb vserver CAS_vserver_rpc_ab TCP {RPC Public IP} {AB Port} -timeout {PersTimeout} -cltTimeout {Timeout} -comment "vserver for  RPC Address Book"
add lb vserver CAS_vserver_rpc_ca TCP {RPC Public IP} {CA Port} -timeout {PersTimeout} -cltTimeout {Timeout} -comment "vserver for  RPC Client Access"
bind lb vserver CAS_vserver_rpc_ab CAS_servicegroup_rpc_ab
bind lb vserver CAS_vserver_rpc_ca CAS_servicegroup_rpc_ca
<!--NeedCopy-->

其他持久性组:

bind lb group CAS_persistency_group_sourceip CAS_vserver_rpc_ab
bind lb group CAS_persistency_group_sourceip CAS_vserver_rpc_ca
<!--NeedCopy-->

2016 年及更新版本的微软 Exchange 服务器的推荐配置示例

额外的负载平衡虚拟服务器:

add lb vserver CAS_vserver_mapi SSL 0.0.0.0 0 -timeout {PersTimeout} -lbMethod LEASTCONNECTION -cltTimeout {Timeout}
bind ssl vserver CAS_vserver_mapi -certkeyName {CertKey}
bind lb vserver CAS_vserver_mapi CAS_servicegroup_http
<!--NeedCopy-->

其他持久性组:

bind lb group CAS_persistency_group_sourceip CAS_vserver_mapi
<!--NeedCopy-->

HTTP 服务的内容切换:

add cs action CAS_action_cs_mapi -targetLBVserver CAS_vserver_mapi
add cs policy CAS_policy_cs_mapi -rule "HTTP.REQ.URL.SET_TEXT_MODE(IGNORECASE).STARTSWITH("/mapi")" -action CAS_action_cs_mapi
bind cs vserver CAS_vserver_cs -policyName CAS_policy_cs_mapi -priority 140
<!--NeedCopy-->

可选配置

Outlook Web 应用程序 (OWA) 的 HTTPS 重定向:

add lb vserver CAS_vserver_owa_http_redirect HTTP {HTTP Public IP} 80 -persistenceType COOKIEINSERT -timeout {PersTimeout} -lbMethod ROUNDROBIN -redirectURL "https://mail.example.com/owa" -cltTimeout {Timeout}
<!--NeedCopy-->

注意:用正确的 HTTPS 重定向 URL 替换。

/owa 重写策略:

add rewrite action owa_rewrite replace http.REQ.URL ""/owa""
add rewrite policy owa_rewrite_policy "http.req.url.eq("/")" owa_rewrite
bind lb vserver CAS_vserver_owa -policyName owa_rewrite_policy -priority 100 -gotoPriorityExpression END -type REQUEST
add responder action action_responder_owa redirect ""https://www.example.com/owa""
add responder policy policy_responder_owa HTTP.REQ.IS_VALID action_responder_owa
set responder param -undefAction NOOP
bind lb vserver CAS_vserver_owa -policyName policy_responder_owa -priority 100 -gotoPriorityExpression END -type REQUEST
<!--NeedCopy-->

注意:用正确的 HTTPS 重定向 URL 替换。

对 SMTP 的支持:

对于以下配置,必须启用 USIP,以便 CAS 服务器可以看到发送 SMTP 服务器的 IP 地址进行验证。此配置还要求将 CAS 服务器的默认网关配置为指向 ADC 设备的 SNIP 地址。

add lb vserver CAS_vserver_smtp TCP {HTTP Public IP} 25 -persistenceType SOURCEIP -timeout 60 -lbMethod LEASTCONNECTION -cltTimeout 30
add serviceGroup CAS_servicegroup_smtp TCP -maxClient 0 -maxReq 0 -cip DISABLED -usip YES -SP OFF -useproxyport YES -cltTimeout 30 -svrTimeout 30 -CKA NO -TCPB NO -CMP NO
bind serviceGroup CAS_servicegroup_smtp {CAS-1 Server} 25 -CustomServerID ""None"" bind serviceGroup CAS_servicegroup_smtp {CAS-2 Server} 25 -CustomServerID ""None""
bind lb vserver CAS_vserver_smtp CAS_servicegroup_smtp
<!--NeedCopy-->

支持邮局协议版本 3 (POP3):

add lb vserver CAS_vserver_pop3 TCP {HTTP Public IP} 110 -persistenceType SOURCEIP -timeout {PersTimeout} -lbMethod LEASTCONNECTION -cltTimeout {Timeout}
add serviceGroup CAS_servicegroup_pop3 TCP -maxClient 0 -maxReq 0 -cip DISABLED -usip NO -SP OFF -useproxyport YES -cltTimeout {Timeout} -svrTimeout {Timeout} -CKA NO -TCPB NO -CMP NO
bind serviceGroup CAS_servicegroup_pop3 {CAS-1 Server} 110 -CustomServerID ""None"" bind serviceGroup CAS_servicegroup_pop3 {CAS-2 Server} 110 -CustomServerID ""None""
bind lb vserver CAS_vserver_pop3 CAS_servicegroup_pop3
<!--NeedCopy-->

注意:

您可以通过将端口更改为 995,将虚拟服务器/服务类型更改为 SSL 来执行上述 SSL 加密 POP3 的配置。还要绑定合适的 SSL 证书。

对 IMAP 的支持:

add lb vserver CAS_vserver_imap TCP {HTTP Public IP} 143 -persistenceType SOURCEIP -timeout {PersTimeout} -lbMethod LEASTCONNECTION -cltTimeout {Timeout}
add serviceGroup CAS_servicegroup_imap TCP -maxClient 0 -maxReq 0 -cip DISABLED -usip NO -SP OFF -useproxyport YES -cltTimeout {Timeout} -svrTimeout {Timeout} -CKA NO -TCPB NO -CMP NO
bind serviceGroup CAS_servicegroup_imap {CAS-1 Server} 143 -CustomServerID ""None"" bind serviceGroup CAS_servicegroup_imap {CAS-2 Server} 143 -CustomServerID ""None""
bind lb vserver CAS_vserver_imap CAS_servicegroup_imap
<!--NeedCopy-->

注意:

您可以通过将端口更改为 993,将虚拟服务器/服务类型更改为 SSL 来执行上述 SSL 加密的 IMAP 配置。还要绑定合适的 SSL 证书。

其他资源