我们知道CITRIX XenApp(或者说是Presentation Server)服务器保存配置信息在数据库中,这个数据库就叫做IMA Data Store。这个数据库对XenApp来说,只是保存了静态的配置信息,其中不保存任何XenApp环境中的运行状态信息,换句话说,Data Store只是保存在服务器关闭以后,需要静态存储的信息。一般包括通过管理控制台(Management console)进行的各种设置值。

可以想象,XenApp服务器需要服务器来持续监视很多动态信息。比如,用户在哪台服务器上启动了哪些会话(Session),哪台服务器在线或者离线,每台服务器的负载状况等等,这些动态的信息在以下几种情况下会需要,比如:

  • 管理控制台需要显示每台服务器上的每个用户信息给管理员;
  • 当有入站连接请求的时候,服务器需要知道哪台服务器在线(online),可以提供服务;
  • 系统在做负载均衡的时候,需要知道相关服务器的负载情况;
  • 等等

为了解决这些问题,各个服务器之间需要一个共享各服务器状态信息的方法,在早期的版本中,Citrix为了解决这个问题,在每台服务器上都开一段端口,分别和每台服务器建立连接来同步信息,具体机制就不详细介绍了已经被废弃,因为每个服务器之间都需要建立连接诶,可想而知,性能低下。

现在的版本中(4.5版本以后),每台独立的XenApp服务器监视自己的状态信息(动态信息),当有变化的时候,IMA服务就会联系Data Collector的IMA服务(2512端口),通知Data Collector,已经有新的状态信息更新,然后Data Collector会更新内存中的所有服务器的动态信息。由此可知,Data Collector是IMA服务维护的一块内存信息,用来保存zone或者zones中的各个服务器的状态信息。

Data Collector和Data Store的关系

很显然,Data Collector和Data Store实际上是不相关的。Data Store用来在数据库中永久保存配置信息,而Data Collector用来在内存中动态保存会话信息。

但是,两者之间也会间接的发生关系。比如:

当你通过管理控制台修改了配置以后,新的配置信息会被写入Data Store(实际是写到你连接到的那台服务器本地的Cache,然后复制到Data Store),但是当你修改了这台服务器的配置信息以后,为了其他服务器也能即时得到最新的配置,并加载到其本地Cache中,这个过程需要30分钟,独立的XenApp服务器每30分钟检查一次Data Store的变化,但是我们希望配置即时的同步到所有服务器。

Citrix考虑到了这个问题,当Data Store发生变化后,该变化也同时发送到该Zone的Data Collector,然后Data Collector即时的分发到所有服务器(通过IMA 2512端口)。这样,所又有的服务器据此更新其本地Cache。如果有多个zone,那么各个Zone之间的Data Collector会同步所有的更新。

特别地,当这个配置更新变化超过64KB以后,Data Collector将不会同步这个更新,只会发送更新通知到所有服务器,服务器接收到通知以后,不用等待30分钟的同步周期,会马上同步Data Store。一般情况下,超过64KB的配置信息很少发生