近日与Consulting的同事一起实现了一个客户需求,觉得还蛮有意思的,拿来跟大家分享一下。
现有环境
- 客户在同城有两个DC,分别为Site A和Site B,中间有一根100M的窄带光纤来实现二层互联互通
- 这两个DC分别部署了NetScaler,StoreFront,DDC,VDA资源,这些资源可以自由组合搭配来实现下面的需求
客户需求
- 需要两个DC都可以承接业务,即需要双活
- 尽量减少跨DC的流量,即平时尽量不要使用那条100M的窄带
- 但是当其中一个DC出现故障时,另一个DC可以做备份将所有业务接起来,也可以通过这个窄带来承接没有中断的业务
- 由于虚拟桌面的特性,最好一个用户固定访问其中一个DC的VDA资源,如果这个DC资源不可用时,再分配另一个DC的VDA资源
需求分析
如果每个DC自己设置一套DDC系统来管理本站点VDA资源的话
- 需要通过NetScaler来作为入口隔离DC之间的流量,这样当User登录NetScaler A时,他只能获取到Site A的VDA资源
- 用户User再次登录时,需要仍然找到NetScaler A,这个应当可以用GSLB的功能解决
- 当Site A的NetScaler或DDC出现问题Down了的时候,GSLB可以探测到这个问题,并返回Site B的NetScaler B登录地址给用户User实现备份
这套方案的问题有不少,我们设想了一些无法满足的场景
- GSLB只能是基于IP,当用户位置发生移动时,GSLB没法保证仍然能将对应的NetScaler解析给用户
- GSLB的检测机制也相对单一,如果发生了StoreFront故障的时候就无法感知,用户也是无法使用业务的
基于上面的假定,将不同的用户分配到两个Site上,最好是基于应用层来分配,例如Username和Group等;
且如果设置两套独立的DDC来管理VDA资源的话,也有可能出现规划在Site A上用户无法使用Site B中VDA资源的问题。
综合以上考虑,我们可以尝试用一套DDC来管理两个Site的VDA资源,那么现在的挑战有以下两点:
- 由于认证流量占用带宽很少,我们可以忽略,主要关注ICA流量的路径,需要确保通过Site A进来的ICA流量使用的Site A的VDA
- 当任意其中一个关键服务宕机时,需要能够切换到另一个Site上去
- Optimal Gateway Routing可以控制ICA流量的入口,而Aggregation则可以满足第二点
WorkFlow
蓝线—-认证和资源分配
- 用户访问FQDN,到达任意Site A或Site B的Gateway Vserver,进行认证,我们称之为Authentication Gateway
- 认证通过后,通过StoreFront的Load Balancing到达任意一台StoreFront上,此处以Site A的StoreFront为例,与Site B的StoreFront后续处理是一致的
- StoreFront上均添加Site A和Site B的DDC作为Controller,认证通过后去DDC上申请资源
- 拿到VDA资源的信息之后,开始生成ICA文件并返回给客户端,此时可以通过HDX Routing来控制ICA文件中的SSLProxyHost字段
红线—-ICA流量
- 用户拿到ICA文件之后打开,连接到NetScaler上对应的Gateway Vserver,此时连接的是 ICAProxy Gateway,而不是此前的Authentication Gateway
- 由ICAPrixy Gateway去完成Ticket交换并最终连接上VDA资源
绿线—-DDC在StoreFront上需要配置成Aggregation
- 两个DDC组成Aggregation
- Site A上的DDC发布Site A中的VDA资源,Site B也发布一模一样的VDA资源,要求VDA资源名字一致
- 通过AD中的Group来设置主备,例如对于Group A,用DDC A为主(Active),DDC B为备(Backup),对于Group B则反过来
资源分配
- 在AD上设置Group A和Group B,并划分用户a属于Group A,用户b属于Group B
- 用户a登录时,到达任意NetScaler的Authentication Gateway,认证通过
- SSO到StoreFront上,检测到这个用户a属于Group A,则去DDC A上分配VDA A资源
- StoreFront设置HDX Routing,通过DDC A分配的资源,将ICA文件中的SSLProxyHost写为Gateway-A,如果是DDC B分配的资源,则ICA文件中写Gateway-B
- 用户拿到ICA文件后,去连接Gateway-A,完成ticket交换,连接到对应VDA A
故障切换
- NetScaler 故障:DNS可以将解析到另一个NetScaler的Gateway上
- StoreFront故障:NetScaler上做了StoreFront的Load Balancing,两台SF也做ServerGroup来保证配置同步
- DDC故障:如果用户a登录时,但是DDC A挂了,此时StoreFront会找到Backup的DDC B,来分配VDA B的资源给用户a,然后用户a将连接到Gateway-B并打开VDA B的资源,由于应用图标的名字是一样的,此时用户是无感知的
- VDA故障:当VDA A故障时,用户看到的应用图标仍是DDC A上的,但得到的资源是VDA B,这一点我还没有研究出来DDC是如何做到的
配置截图:
待续