我有一台 Netscaler,用于前端 4 个 Exchange 2010 CAS 服务器。使用此虚拟服务器的客户端包括
- Outlook Web 访问 (OWA)
- Exchange Web 服务 (Outlook for Mac 2011)
- Outlook Anywhere(又名 RPC/HTTPS)
- 同步
Outlook Anywhere 的特别之处在于 Outlook 2010 SP2 及更新版本将使用 cookie 来维护状态。旧版本的 Outlook 不使用 cookie,而是通过 IP 来维护状态,从而进行故障恢复。
这是我当前的配置:
问题
如果我重新启动阵列中的单个 CAS 服务器,客户端将永远无法完全恢复,并且会遇到连接延迟和问题,直到所有 CAS 服务器同时重置。(待办事项:尝试清除 Netscaler 上的“会话表”,而不是同时重新启动 CAS 服务器)
当我第一次查看这台服务器时,
Cookie Insert
持久性被设置为Zero
AKA 无穷大。这意味着基于 cookie 的会话从未根据“最少连接”进行负载平衡。3 个 CAS 服务器的 CPU 为 100%,而一个 CAS 几乎没有。我将 cookie 插入时间从 减少
0
到5
(读取时间从无限长减少到 5 分钟),用户即使在撰写新电子邮件时也会被踢出 OWA(这是一件坏事,因为消息丢失了)一些 RPC/HTTPS 用户偶尔会断开连接(不确定是否是 2010 SP2 或更新版本,但我怀疑是)(缓存模式或非缓存)
我们的许多用户都位于 NAT 池后面,这意味着任何落后于 NAT 池的用户都
SourceIP
共享同一个 CAS 服务器。如果该用户群有 100 多个用户,则意味着每次会话超时时,用户都会转移到新的 CAS 服务器(这会造成巨大的负载)如果 NAT 后面的两个大量用户群落在同一 CAS 服务器上,那么该 CAS 服务器将超载并达到 100% CPU
我认为如果经过 NAT 的用户群体混合使用 cookie(OWA/O2010 SP2)或非 cookie(早于 O2010 SP1),那么 Netscaler 可能会混淆这两种负载平衡技术并造成混乱。
记住最后一个要点,以及当我重新启动单个 CAS 服务器时 Outlook Anywhere / HTTP 的行为异常,直到我重新启动所有 CAS 服务器,我认为重新启动操作将 Outlook Anywhere 调用拆分到不同的 CAS 服务器之间,并且持久性完全被搞砸了。(也许 Outlook 2010 无法正确处理所有 RPC 调用(例如 FreeBusy / 日历查找 / 正常 Outlook 流量)的 cookie)
文档内容
官方 Citrix Exchange 配置指南建议按照下图所示配置所有内容,但 cookie 持久性设置为 2 分钟。如前所述,这不适用于 OWA 或 Outlook Anywhere。(OWA 消息会丢失等)
问题
持久性应设置为何值?
OWA、RPC/HTTPS 和 Activesync 的持久性计时器何时重置?(它们各自如何进入“空闲”状态)
Outlook 2010SP2 是否可能无法完全识别 cookie,并且某些 HTTP 调用不使用 cookie 而是使用备份持久性?
Activesync Direct Push 如何与下面定义的持久性设置交互?HTTP“长轮询”可能被视为空闲,其中客户端
/Activesync/DirectPush
通过 POST 说“给我”...并且服务器(通过直接推送设计)接受连接并且直到新消息到达才发送数据。这意味着数据是在 TCP 级别(同步/确认)而不是 HTTP 级别传输的。为了澄清我之前的观点,什么才算持久性的“流量”?是 TCP/第 4 层还是 HTTP 第 5 层?SSL 数据算吗?
我已经就此问题致电 Netscaler 支持部门,他们告诉我首选设置(但不起作用)。我还会开一张票,并让他们参考此 SO 帖子。
注意:讨论此问题时,此配置细节可能很重要:我是Netscaler 的 SSL 卸载
我在所有地方都运行 Exchange 2010 SP2 RU4 Release 2
答案1
不敢声称自己知道所有答案(多年来都没有支持 Exchange),但是......
不确定您使用了什么指南,但《Citrix NetScaler 部署指南》中的 Microsoft Exchange 2010 建议超时时间为 180,即 3 小时。虽然第 15 页上的图表具有误导性(显示默认值),但第 21 页上的摘要表包含建议。
关于您的计时器问题,请阅读 CTX108883 的背景部分,但简短的回答是“到期时间取决于客户端软件的实现,并且通常此类 cookie 会在软件正确关闭时到期。”
您运行 HTTP Cookie 版本 0 而不是版本 1 有什么原因吗?