Citrix同城双活数据中心–流量均衡+备份解决方案

近日与Consulting的同事一起实现了一个客户需求,觉得还蛮有意思的,拿来跟大家分享一下。

现有环境

  • 客户在同城有两个DC,分别为Site A和Site B,中间有一根100M的窄带光纤来实现二层互联互通
  • 这两个DC分别部署了NetScaler,StoreFront,DDC,VDA资源,这些资源可以自由组合搭配来实现下面的需求

客户需求

  1. 需要两个DC都可以承接业务,即需要双活
  2. 尽量减少跨DC的流量,即平时尽量不要使用那条100M的窄带
  3. 但是当其中一个DC出现故障时,另一个DC可以做备份将所有业务接起来,也可以通过这个窄带来承接没有中断的业务
  4. 由于虚拟桌面的特性,最好一个用户固定访问其中一个DC的VDA资源,如果这个DC资源不可用时,再分配另一个DC的VDA资源

需求分析

如果每个DC自己设置一套DDC系统来管理本站点VDA资源的话

  1. 需要通过NetScaler来作为入口隔离DC之间的流量,这样当User登录NetScaler A时,他只能获取到Site A的VDA资源
  2. 用户User再次登录时,需要仍然找到NetScaler A,这个应当可以用GSLB的功能解决
  3. 当Site A的NetScaler或DDC出现问题Down了的时候,GSLB可以探测到这个问题,并返回Site B的NetScaler B登录地址给用户User实现备份

这套方案的问题有不少,我们设想了一些无法满足的场景

  1. GSLB只能是基于IP,当用户位置发生移动时,GSLB没法保证仍然能将对应的NetScaler解析给用户
  2. GSLB的检测机制也相对单一,如果发生了StoreFront故障的时候就无法感知,用户也是无法使用业务的

基于上面的假定,将不同的用户分配到两个Site上,最好是基于应用层来分配,例如Username和Group等;

且如果设置两套独立的DDC来管理VDA资源的话,也有可能出现规划在Site A上用户无法使用Site B中VDA资源的问题。

综合以上考虑,我们可以尝试用一套DDC来管理两个Site的VDA资源,那么现在的挑战有以下两点:

  1. 由于认证流量占用带宽很少,我们可以忽略,主要关注ICA流量的路径,需要确保通过Site A进来的ICA流量使用的Site A的VDA
  2. 当任意其中一个关键服务宕机时,需要能够切换到另一个Site上去
  3. Optimal Gateway Routing可以控制ICA流量的入口,而Aggregation则可以满足第二点

WorkFlow

蓝线—-认证和资源分配

  1. 用户访问FQDN,到达任意Site A或Site B的Gateway Vserver,进行认证,我们称之为Authentication Gateway
  2. 认证通过后,通过StoreFront的Load Balancing到达任意一台StoreFront上,此处以Site A的StoreFront为例,与Site B的StoreFront后续处理是一致的
  3. StoreFront上均添加Site A和Site B的DDC作为Controller,认证通过后去DDC上申请资源
  4. 拿到VDA资源的信息之后,开始生成ICA文件并返回给客户端,此时可以通过HDX Routing来控制ICA文件中的SSLProxyHost字段

红线—-ICA流量

  1. 用户拿到ICA文件之后打开,连接到NetScaler上对应的Gateway Vserver,此时连接的是 ICAProxy Gateway,而不是此前的Authentication Gateway
  2. 由ICAPrixy Gateway去完成Ticket交换并最终连接上VDA资源

绿线—-DDC在StoreFront上需要配置成Aggregation

  1. 两个DDC组成Aggregation
  2. Site A上的DDC发布Site A中的VDA资源,Site B也发布一模一样的VDA资源,要求VDA资源名字一致
  3. 通过AD中的Group来设置主备,例如对于Group A,用DDC A为主(Active),DDC B为备(Backup),对于Group B则反过来

资源分配

  1. 在AD上设置Group A和Group B,并划分用户a属于Group A,用户b属于Group B
  2. 用户a登录时,到达任意NetScaler的Authentication Gateway,认证通过
  3. SSO到StoreFront上,检测到这个用户a属于Group A,则去DDC A上分配VDA A资源
  4. StoreFront设置HDX Routing,通过DDC A分配的资源,将ICA文件中的SSLProxyHost写为Gateway-A,如果是DDC B分配的资源,则ICA文件中写Gateway-B
  5. 用户拿到ICA文件后,去连接Gateway-A,完成ticket交换,连接到对应VDA A

故障切换

  1. NetScaler 故障:DNS可以将解析到另一个NetScaler的Gateway上
  2. StoreFront故障:NetScaler上做了StoreFront的Load Balancing,两台SF也做ServerGroup来保证配置同步
  3. DDC故障:如果用户a登录时,但是DDC A挂了,此时StoreFront会找到Backup的DDC B,来分配VDA B的资源给用户a,然后用户a将连接到Gateway-B并打开VDA B的资源,由于应用图标的名字是一样的,此时用户是无感知的
  4. VDA故障:当VDA A故障时,用户看到的应用图标仍是DDC A上的,但得到的资源是VDA B,这一点我还没有研究出来DDC是如何做到的

配置截图:

待续

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注