「深入 Exchange 2013」04 负载均衡

客户端关联性(已死~)

由于之前提到的CAS架构的改动,我们提到,Exchange 2013的CAS里不再需要客户端关联性。客户端关联性就是指在一次客户端连接过程中,一直是与同一台CAS服务器进行通信;换句话说,当客户端连接到了一个特定的CAS之后,该CAS会一直对该客户端提供服务直到该连接断开为止。为了达到这个目的,CAS必须维持该会话状态,在连接过程中经过的负载均衡器(支持客户端关联性的Load Balancer)才能知道是哪一个CAS正在处理该连接,从而进行正确的分流。如果负载均衡器或者是反向代理解析不支持客户端关联性,那么在Exchange 2007和Exchange 2010的环境中会产生重验证的问题(用户连接到了一个不同的CAS)。

在Exchange 2013环境里,因为客户端不论是连接到了那一台CAS服务器,该连接都始终能被正确的代理到拥有该邮箱活动数据库副本的MBX服务器。这个特性适用于所有的协议,比如Outlook Web App。所以在负载均衡这一次层上,不再特别需要负载局衡器产品支持客户端关联性。

让我再啰嗦几句,从邮箱连接的层面上升到网页连接请求的层面。前面已经提过了,老版本的Exchange在没有客户端关联性支持的负载均衡下,会出现要求客户端重新进行验证的问题(常见于IE9访问Exchange2010 的OutlookWebApp,然后采用DNS轮询进行CAS负载均衡)。Exchange 2013改进了Cookie里缓存验证信息的方式。在Exchange 2010当中

当客户端通过验证后,它所连接到的CAS会提供一个加密的cookie给客户端,这个加密的cookie是其他CAS服务器所无法读取的(具体是啥加密的,我也不知道……)。然而到了Exchange 2013当中,这个加密的Cookie由CAS服务器的证书的公钥进行加密,这样所有拥有该证书的Ex2013 CAS服务器都可以进行解密。关于证书管理,我在今后的章节也会跟大家聊一聊,微软推荐的就是我们常用的,一张证书走天下~

负载均衡方案

稍微接触过网络的人都知道OSI七层网络模型,物数网传会表应(Please Do Not Throw Sausage Pizza Away),所以我们常说的4层负载均衡和7层负载均衡,其实就是指传输级别的负载均衡(还有一说是网络级别的负载均衡,名字而已不要纠结)与应用级别的负载均衡。

四层负载均衡

基于IP+端口的负载均衡,只关心客户端的原地址+端口与目的地的地址和端口,其他的内容则毫不关心也无法关心,因为它只认识四层的调前,没法解开数据包最里头的具体内容,只能根据包头请求的目的地来决定数据包的转发。

七层负载均衡

七层负载均衡器就比较聪明,它们可以看到应用层的流量并进行识别分析,从而实现应用感知。举一个例子,如果一个移动设备的客户端正在请求URL:

https://mail.contoso.com/Microsoft-Server-ActiveSync?jQAJBBCz0DFoa3Zf/Y1CsFFhMg2bBErZMzwCV1A=HTTP/1.1;如果是四层负载均衡收到该请求,它只会识别到目的地址,即Mail.contoso.com,以及请求端口号,即Https对应443.而七层负载均衡不光看到这些信息,它们还可以识别后面的参数对应哪一个应用的虚拟目录(/Microsoft-server-activesync/),以及中间的同步Key值(那一大串儿)。

Exchange中好几种协议与服务的终结点都是IIS的虚拟目录,那么如果此次请求的目标CAS服务器出问题了,这些协议里有一个协议挂了,比方是EWS挂了。(Exchange 2013里的新功能Managed Availablity(可用性管理)会尝试去解决问题,同时还会对客户端进行通知,解决方法可能是对应用程序池进行回收,或者是重启IIS)一个四层负载均衡设备接收到请求,它只会将CAS服务器看成是一个整体,而并不细化到协议层面,这样导致客户端对EWS的请求和对OWA的请求还照常转发给这台CAS。如果是七层负载均衡的话,它就知道这台CAS上,Outlook Web App没问题,OK我把请求继续转发过来,EWS挂了,我把EWS的请求重定向给其他的CAS服务器;因为它基于应用层面,将每一个服务细化至其具体路径。

四层负载均衡设备对于负载均衡场的可用性检测只有ping一下目标IP地址,看看是up或者是down,一些高端点的L4还能发起HTTP请求,进行HTTP健康检测,但仅限于单一的虚拟ip地址;换句话说,一台开着的、插着网线的服务器,无论他上面有没有装Exchange的CAS角色,对于四层负载均衡设备看起来都是一样的。这对于一些要求高可用性的场景里,肯定不合需求。而一台七层的负载均衡设备不光能知道服务器的网络是否畅通,还可以知道客户端请求的服务是否处于正常状态。很多七层设备上都支持针对特定的应用和服务进行健康检查,于是它们就可以感知到这些应用啥时候失效了,又在啥时候恢复正常,然后根据这些信息进行流量的导向。

Managed Availablity服务就提供了这样一个特性:通过访问相应虚拟目录的/healthcheck.htm页面(比如/owa/healthcheck.htm),得到其返回的HTTP值,如果返回HTTP 200的话,说明该应用为正常状态。这样就方便在负载均衡设备或者是监控设备上调用这个页面,即可实现HealthCheck功能。

DNS轮询

严格来讲,DNS轮询也属于负载均衡技术的一种,虽然看起来不怎么起眼。当你为一个域名配置了多个ip地址时,DNS服务器会将这些地址全部告诉给来查询该域名的客户端,并轮流调换这两个地址的前后顺序;也就是说,两个客户端同时来请求这个域名,他们获得的是相同的两个ip地址,但是是不同的顺序。大多数客户端会采用第一个地址,所以这就达到了一个简单的负载分流效果。微软号称有一些比较聪明的HTTP客户端(Outlook 2010,Outlook2013,以及一些ExchangeActiveSync客户端)在其获得了DNS轮询的结果之后,会对所有的结果进行尝试。这在Exchange 2013的CAS看来是没问题的,无所谓你连接到哪一台。但是微软并没有具体的说,哪些哪些客户端是“比较聪明的”,比如Mac OS X的 Safari 6.X支持这种行为,但是Safari for Windows不支持……(虽然已经停止开发了哈)。也就是说尽管微软官方支持这种做法,君不见Lync 2013的文档库里大量DNS负载均衡的长篇大论。但是在实际应用当中还是需要慎之又慎。

即使我们抛开这些聪明不聪明的问题,还应该注意到DNS轮询的致命弱点,那就是缺少可用性检测行为,比方说:当前我配置了一条dns记录mail.contoso.com给192.168.0.100和192.168.0.200,如果其中的192.168.0.200挂掉了,那么就有一半的用户会连不上服务器,即使你马上把192.168.0.200记录删掉,这些用户的机器上还有DNS缓存,你的设置还不会马上生效。这种成本低廉又容易被配置的负载均衡方式一般用在SMTP上,因为SMTP原本就是无状态的,一次发不过来自动再重试就是了。

Windows Network Load Balancing(Windows网络负载均衡)

微软在Win2000里开始提供Windows网络负载均衡服务(以下简称wNLB),虽然它是windows操作系统自带,而且经历过这么多版本的迭代也算的上是稳定的产品。但在Exchange环境中,真正采用wNLB的其实不多。主要是因为没有可用性检测,除非wNLB群集内的主机关机或者是断网超过重试时间了,否则它都会照常将请求发过去。

还有一点众所周知,那就是部署了DAG的服务器上不能够再部署wNLB,因为wNLB与windows故障转移群集服务(WFC)无法共存,也就是说如果你是两台全角色的Exchange服务器,那就对wNLB说拜拜吧;想省钱,用DNS轮询呗。

如何取舍这些负载均衡方案:

无论你选择哪一种负载均衡方案,他们所达到的目的都差不多:

  1. 如果你使用的是负载均衡设备或者wNLB,客户端会连接到一个虚拟的ip地址,对应一个统一的FQDN命名空间。如果使用的是DNS轮询,那么负载均衡场里的每一台服务器,自身的地址也得是可以被客户端解析且访问的到。
  2. 负载均衡场里的服务器数量由负载均衡器决定,比如Windows 2012的wNLB就限制32个节点,其他的方案就具体看其参数了。
  3. 进来的客户端连接到达负载均衡器后,负载均衡器来决定将请求发送给谁。L4只看目的地IP地址和端口,L7会看连接内容,这就意味着L7负载均衡需要能终结SSL连接,即SSL terminate,拆开SSL封包后解析内容,然后确定适当的服务器进行连接。

当这些概念你已经确定下来之后,下一步就是在功能性和成本上进行选择了。L4的价格不贵,但是相对L7设备来讲功能不足。但是我们换个角度思考一下,如果我们将每一种协议的命名空间分拆开来,并且给予不同的虚拟ip地址,好像也可以使L4区分开不同的服务请求哦。如果这么干的时间成本大于买个F5,那还是老老实实买个F5吧(笑)。

还有最后一点忘记说了,物理的负载均衡器还是虚拟化的负载均衡应用呢?现在软件定义网络(SDN)已经越来越普及,这在以后肯定也是一个有意思的问题。现在虚拟交换机和路由器实际应用的并不多,大多数都是Hypervisor集成的一些交换机。但是你仔细想想SCVMM那个SDN模型,在里面加入一个虚拟负载均衡器的概念,是不是也挺靠谱的?当下的大中型企业环境里,就像上面说的,一大部分还是停留在Hypervisor自身的虚拟交换机层面,那还是用硬件负载均衡吧…当然如果你们环境非常小,采用VM的负载均衡应用也是没有问题,节省成本,功能也差不多。

好了,又给大家扯了了一大通,下一章就给大家讲Outlook AnyWhere这个Exchange 2013中的重点玩意儿。

广告咱就不继续打了……先放一放,等正式上线了咱再接着打。

时间: 2024-08-07 08:32:23

「深入 Exchange 2013」04 负载均衡的相关文章

「深入 Exchange 2013」11 传输架构Part1

阅读过TechNet文档的人肯定对下面这张图不陌生,这张图完整诠释了整个Exchange 2013的邮件传输架构,前一章里已经简要讨论过的几个组件都在里头,然而还有一些其他的组件也值得深入讨论.首先咱们来聊聊图里边出现的重要词汇. 1."代理"在这里是指Agents,而非是proxy,即处理或者传输消息的某一块程序代码.图中的agents直接反映出Exchange的Business logic,例如Exchange的反垃圾和恶意软件筛选组件属于协议代理,路由代理.邮件传递代理和邮件提交

「深入 Exchange 2013」09 证书

今儿咱们来聊Exchange里的证书,CAS与MBX角色都有用到证书的地方,只是CAS角色更依赖证书一些,在一台Exchange服务器刚刚安装完成的时候,安装程序会自动生成一张自签名证书,这张自签名证书往往并不满足咱们的需求,所以咱们一般会向企业CA再去针对Exchange所涉及到的多个IIS服务的DNS备用名称申请合适的额证书. Exchange在哪些地方用到证书 1. 让客户端验证服务器的身份.这是最常规的用法,大多数管理员可能都碰到过证书名称不匹配引起的客户端报错. 2. 服务器去验证客户

「深入 Exchange 2013」03 内部vs外部

这一章我们来讲内部访问与外部访问. CAS是干嘛的,还不就是为了给企业网络里的内部用户,或者是给穿过防火墙连接进来的外部用户提供服务的.一些组织可能对内部和外部用户的访问都不设限制,也有一部分组织限制了外部用户的连接.也就是说,这些部署了Exchange的组织,都有这样一个可以灵活控制内/外访问的需求. 内部vs外部最主要的不同点就是客户端以哪种URL连接,并且用哪种验证方法进行身份验证.在CAS上这些设置是独立于每一种协议的,比方说当前我要查看某前端上OutlookAnyWhere的内部与外部

「深入 Exchange 2013」01 客户端访问角色架构

Exchange 2013当中CAS角色的重要性不用多说.在Exchange Server4.0.5.0和5.5版本中,都没有特定的一个客户端访问功能角色,Exchange 2000引入了前端服务器的概念(front-end),这种服务器不存放任何邮箱数据,只提供客户端连接.一直到Exchange 2007,带来了第一次CAS角色的迭代:尔后在后面的产品中不断被加强改善. 在Exchange 2007的时候,CAS角色就已经负责以下三种类型的流量: 外部连接 内部连接 被其他CAS服务器重定向,

「深入 Exchange 2013」08 代理、重定向、共存

回顾一下以前讲过的东西,CAS并不直接为客户端提供邮箱连接,而是以两种方式来保证客户端连接到正确的MBX:代理或和重定向.在代理连接当中,CAS接收客户端连接并且转发给恰当的服务器:在重定向连接当中,CAS仅仅是回应客户端一个恰当的服务器的FQDN以让客户端再次发起连接. 在Exchange2013的环境中,CAS只在少数几种情况下才会进行重定向动作.这是由于重定向迫使客户端进行再次连接,这种情况不是所有的客户端种类都可以接受的. 代理 CAS代理动作在Ex2010与Ex2007被设计的略微复杂

「深入 Exchange 2013」06 命名空间

在前面的章节中,你可能会注意到"命名空间"这样一个词,会联想到C#语言或是XML文档里的那个命名空间的概念.但是在这里它的意思更偏向于URL或者FQDN,比如一个Exchange 2010的RPC Client Access Array客户端访问阵列可能有这样一个命名空间叫mail.contoso.com,而属于OWA的命名空间是owa.contoso.com,在Exchange 2013里,命名空间的设计规划过程变得不那么复杂.我们来看 使用单一命名空间: 最简单也是最常用的做法就是

「深入 Exchange 2013」18 队列 part3

队列优先级 Exchange 2013当中,微软增加了一个"优先队列"的功能,打开它时,被标记为高优先级的邮件会比一般邮件先传送,而被标记为低优先级的邮件则会比一般邮件后传送:开启该功能之后呢,分拣器和路由算法不会受到任何影响,仅仅只是传输服务会在每个投递队列里按照优先级排列邮件. 队列优先级的设置主要通过修改EdgeTransport.exe.config配置文件的键值的方式来进行,首先通过PriorityQueuingEnabled键值设置为True开启该功能,接着按照需要调整下表

「深入 Exchange 2013」17 队列 part2

队列速率 大多数新手管理员都能理解"队列"是某种系统或者组件的性能指标.比如磁盘I/O队列,CPU队列等等.Exchange 2013中邮件队列的运行效率是通过队列的三个属性来计算的.传入率(IncomingRate)和传出率(OutgoingRate)属性代表邮件进入和离开邮件的速率.速率(Velocity)为传出率减去传入率得到的队列消耗速率值.除了以上三个值,还应当考虑邮件数量(MessageCount)属性,该属性显示一个队列中的邮件数量.管理员应该将这些属性综合起来判断一个队

「深入 Exchange 2013」19 邮件限制

这一章咱们来讲讲Exchange中对邮件的QOS设置,这些设置平常也许大多数场景中不会涉及到,因为需要大批量发送邮件的场景里都会用到邮件中间件(发送大量宣传邮件或者报表).但是一旦让咱们碰上了,咱们也得知道从哪下手去调整这些设置不是,关于这个话题Technet上已经写得非常好了,咱这里也是做个总结和搬运. 在面对大批量邮件流量的时候,如何保证邮件流的处理井然有序,避免引起邮件阻塞,同时保护Exchange服务器防止其被过度使用,这是一个及其值得注意的问题.Exchange 2013当中引入了"邮