1 MCS or PVS
以下描述是基于一篇2011年1月的Citrix公司博客文章翻译整理,相关描述可能在现在已经不存在。地址:http://blogs.citrix.com/2011/02/17/mcs-or-pvs-what-should-i-be-using/
MCS(MachineCreation Services)是XenDesktop 5引入的新的虚拟桌面部署的方法。MCS不仅包括发布桌面的功能,还能够控制桌面整个生命周期。
XenDesktop更早存在、更为熟悉的技术是PVS(ProvisioningServices),两者专长于相同的地方。之所以在有PVS的情况下,还引入新的MCS技术,是由于Citrix根据用户在使用XenDesktop 4的反馈——PVS是一个很重要的,可以带来人们对VDI期望的TCO和管理效益,但是PVS是个额外的原件用于部署的,并且在某些场合下是过度杀伤的。MCS被设计在一个更低管理成本下,提供PVS的很多优点。
MCS是第一次接触VDI的正确选择,提供更快和更容易的方法去发现VDI如何改变桌面的管理和发布的。
作为产品,当满足以下标准时,可以选择MCS技术:
-
计划搭建纯的VDI环境;
-
计划部署NFS存储(用于XenServer和ESX),或者集群式共享卷(用于Hyper-V)
-
计划每个XenDesktop站点部署最多2500个桌面(本身技术不存在硬性限制,但是Citrix内部产品测试环境是2500,之后会增加)
-
对共享存储上的IOPS有一定的接收空间——不像PVS对磁盘块提供内存缓存,MCS会将更多的读请求发送到共享存储。MCS大概有PVS的1.6倍的IOPS。
在其它的环境,PVS是正确的选择,特别是:
-
计划发布Hosted Shared (RDS-based)或 Streamed physical类型的桌面
-
需要确定的2500个以上的桌面
-
对IOPS有要求
-
NFS不是选项(用于XenServer和ESX)
在未来,intellicache技术将被集成入MCS,并且有更多的改进。
目前还没有找到IntelliCache技术对MCS的IOPS的改进情况的相关数据和是否已经有MCS实施2500个以上桌面的案例。
2 MCS
2.1 工作原理
MCS模式虚拟化环境都开始于一个称为主模板(Master Template)的虚拟机。在一个catalog(目录)里面的所有虚拟机都是以主模板为基础。当创建一个目录时,需要首先选择主模板,然后选择创建pooled或dedicated类型的桌面目录。
创建目录过程中,MCS将对主模板虚拟机做一个私有的(private)和公共的(public)快照(snapshot)。公共的快照在vSphere客户端是可见的,并且被命名为Citrix_XD_CatalogName(CatalogName即是所创建的目录的名字)。公共的快照可以被删除,而不影响目录和MCS。
私有快照生成后,会从这个快照创建一个克隆(clone)。每个目录都会创建自己的快照和克隆。因此如果有两个目录基于相同的主模板,那就会有两个克隆。并且在目录里的每一个存储都会创建一个克隆。因此如果有两个目录,每个目录使用相同的5个数据存储,那么一共有10个克隆,即每个目录在每个存储上有一个克隆。
目录中的每个桌面都只能以只读方式访问它存储上的克隆。
在创建克隆后,MCS会为每个虚拟机创建差异(differential)磁盘和标识(identity)磁盘。从层次上讲,差异磁盘和标识磁盘位于克隆的上面。
标识磁盘包括特定桌面的识别信息,类似于主机名、密码等。差异磁盘是负责存储对桌面所有的写和修改。每个桌面的差异和标识磁盘实际都是存储在和对应clone相同的数据存储上。差异磁盘的大小一般和主模板相同,标识磁盘正常是16MB。
下图是通过XenCenter查看的通过MCS方式创建的虚拟机的存储情况,第一行是差异磁盘,第二行是标识磁盘。
进入虚拟机系统后,通过“磁盘管理”显示如下,Disk 0是差异磁盘,Disk 1是标识磁盘
Pooled和Dedircated两个桌面类型的差别是,用户退出虚拟机系统后,差异磁盘的变化,dedicated桌面的差异磁盘还会保留,而pooled桌面的差异磁盘会被删除。
2.2 IntelliCache
IntelliCache是XenDesktop在共享存储环境下内置的功能。它被设计成在不影响XenDesktop正常的部署发布流程的情况下,透明的使用服务器(XenServer)的本地存储。
在第一个虚拟桌面启动后,IntelliCache使用服务器的本地存储缓存基础镜象中被虚拟机访问到的数据块。当第二个虚拟机启动时,就不需要再访问共享存储,而直接访问在本地缓存的数据。对于非持久化的桌面(pooled)写数据也会被存储在本地,并且在关机时丢弃。因此,共享存储只有在第一次读取基础镜象用于缓存时才会被访问到。
设置IntelliCache方式是,在XenDesktop中添加主机时,勾选相应选项,如下:
当本地存储被使用完后,intellicache就透明地退回到使用共享存储。当然需要合理的设计本地存储的容量,否则可能导致由于太小的本地存储,95%的数据还是来自于共享存储。在使用IntelliCache情况下,存在本地存储突然vanished导致虚拟机蓝屏的风险。
对于dedicated虚拟机,用户大多不想只依赖本地存储来存放用户配置。因此IntelliCache将用户对桌面镜象的所有修改写入本地的同时也会将数据写到共享存储上,这样能够保证用户数据在本地磁盘故障的情况下不丢失,并且虚拟机能够在另外一台服务器(Xenserver)上重新启动,被持续使用。
这样意味着用户可以为维护的目的,通过XenMontion功能动态的将他们的桌面从一个主机迁移到另一个上,以获取更大的availability。
由于要写双份,dedicated类型虚拟机在写方面不能获得像pooled类型虚拟机的改进。但是同样发挥作用的读缓存还是极大地减轻共享存储的负载,并节约了成本。
本地存储的选择上只需要raid0即可,因为dedicated型的虚拟机,写本地同时会写共享存储,而pooled类型虚拟机的写数据在关机后不需要保存,都不需要担心本地存储上数据的availability。
2.3 实施建议
以下面为例,主模板镜象的大小为24GB。因为NFS默认是轻量供应的,所以NetApp存储只消耗了7GB的空间。当有N个24GB的差异磁盘时获益是更大的。刚创建时,差异磁盘的实际的大小是0,使用过程中逐渐增加。
2.4 实际文件存储
3 PVS
不同于传统的拷贝磁盘镜象到独立的虚拟机的镜象管理方式,PVS模式的虚拟化环境采用中心化管理的共享磁盘镜象方式。这样方式将共享的镜象流给不同的虚拟机,减少了需要管理的磁盘镜象的数目,即使在虚拟机数目不断增加的情况下。vDisk即共享磁盘镜象,只读,每个虚拟机对vDisk的修改记录在Write Cache中,因此完整的虚拟机系统由vDisk和Write Cache两部分构成。
Provisioning Server负责制作vDisk,管理vDisk和Write Cache,处理虚拟机对vDisk和Write Cache数据的请求(如果Write Cache配置存放在PVS端)。为了减轻对PVS服务器的负载,通常推荐将Write Cache配置在虚拟机本地。
3.1 vDisks
vDisks(虚拟磁盘)有两个模式:
Private:当目标设备需要将修改写入到虚拟磁盘时,必须配置私有模式的vDisks。这种模式要求每个目标设备对应一个虚拟磁盘文件.vhd文件()。私有的虚拟磁盘被设置为读写模式,以允许将修改写入到.vhd文件中。私有模式的虚拟磁盘允许定制,但要不能实现一致的虚拟机环境。并且因为几个虚拟机就需要几个.vhd文件,私有模式的虚拟磁盘增加了存储的需求。
Standard:当需要一个.vhd文件可以流给多个目标设备时,需要配置标准模式的vDisks。标准模式的虚拟磁盘将所有的修改(针对初始的操作系统)写入临时的写缓存(write cache)中,该写缓存重启时就会被移除。标准模式的虚拟磁盘可以实现一致的虚拟机环境。单一的.vhd文件的使用大大的降低了存储的需求。
3.2 Write Cache
写缓存(WriteCache)是在标准(Standard)虚拟磁盘模式下使用的一种临时文件,为了保存对于虚拟磁盘的修改的,例如应用升级、安装等。因为对基础操作系统的每个修改都会保存到写缓存中,这个文件会变得越来越大。
写缓存可以放在很多不同位置,每个位置在成本、高可用、性能上提供不同的优缺点。有以下几种位置:
Cache onDevice RAM:目标设备(即虚拟机设备)内存
Cache onDevice Hard Drive:目标设备硬件驱动
Cache onDevice Hard DrivePersisted:目标设备硬件驱动持久化
Cache on aserver:缓存在服务器(PVS)
Cache on aserverPersistent:缓存持久化存储在服务器上(PVS)
3.2.1 Device Hard Drive
写缓存存在目标设备的NTFS格式的磁盘驱动上,这种缓存选项解放了PVS服务,因为PVS不需要处理写请求,也没有内存大小的直接限制。目标设备的磁盘驱动上不需要任何额外的软件来启动这个属性。
注意:这个写缓存文件时临时文件。
3.2.2 Device Hard Drive Persisted
除了缓存是持久保存外,和2.2.1一致。目前,该写缓存方式还只是实验性的方式,并且只支持NT6.1或更高(Windows 7 、Windows 2008 R2或更高版本)。并且这个方法也要求不同引导程序。为了从控制台选择正确引导程序,需要右击PVS服务(Servers列表中),选择配置引导程序。在General的tab项中,点击下拉引导文件选项,然后选择CTXBP.BIN。Citrix强烈建议本地磁盘(客户端边,即目标设备)有足够空闲的空间来存储整个虚拟磁盘。
3.2.3 Device RAM
写缓存作为一个临时文件存放在目标设备的内存中。这提供了虚拟机最快的磁盘访问,因此访问内存通常是访问磁盘更快。
3.2.4 PVS Server
写缓存存在PVS服务器上。在这个配置下,所有的写操作由PVS服务处理,增加磁盘IO和网络负担。
为了更好安全性,PVS能够被配置成加密写缓存文件。因为写缓存文件在重启虚拟机前是存在PVS的磁盘驱动上的,数据将被加密,即使在磁盘设备被窃取的情况。
3.2.5 PVS Server Persistent
这个缓存选项能够在重启后仍保持对系统的修改。通过使用这个选项,在重启虚拟机(目标设备)后,虚拟机仍能获取不同于只读虚拟磁盘镜象的上次会话所做的修改。如果虚拟磁盘被设置成这种缓存方式,每个访问这个虚拟磁盘的虚拟机都会有一个特定的、可写的磁盘文件被创建。任何对虚拟磁盘镜象的修改都被写入到该文件,该文件在虚拟设备被关闭时不会被删除。
文件名通过包含目标设备的MAC地址和磁盘ID来唯一标识目标设备(虚拟机)。一个目标设备可以分配多个虚拟磁盘,因此也会关联多个缓存文件。为了能够恢复使用该缓存模式的虚拟磁盘,需要在对虚拟磁盘进行下列修改前确保备份了所有的虚拟磁盘和相关的用户写缓存文件。
这种缓存模式的优点是能够保存目标设备对虚拟磁盘镜象的相应修改。
这种缓存模式的缺点:
只要相应文件保持合法,缓存文件就是有效的。任何对虚拟磁盘的修改都会强制设置缓存文件为非法。例如,虚拟磁盘被设置到私有模式,这样所有关联的缓存文件都会被标记为非法。
注意:缓存文件被标记为非法,但是不会被删除。这些文件需要周期性手动删除。使缓存文件变非法的操作有:
-
设置虚拟磁盘在维护状态;
-
虚拟磁盘被修改成私有镜象模式;
-
从控制台映射磁盘驱动;
-
修改写缓存文件的位置;
-
使用自动升级
3.3 实施相关
3.3.1 Write Cache相关
-
使用目标设备内存(Device RAM)作为写缓存(write cache)时需要极其注意,如果使用空间超出内存大小,在设备没有反应前,你没有时间重启,并且你也不会得到警告,只有BSOD(蓝屏)。
-
使用目标设备的本地存储(本地、共享)作为写缓存时,如果没有足够的存储空间时,设备会降低性能,就类似于笔记本的本地空间满时的表现,但是不会引起系统崩溃(crash)。
-
如果使用服务器(PVS)端缓存,使用多个写缓存路径来提高性能。
-
RAID1or 10 isok, RAID 5 or 6 *not* recommended (unless a huge amount of spindles)
-
RAID controller with battery backedwrite cache can help a lot
3.3.2 PVS内存大小
本节及以下两节内容根据《Advanced Memory and Storage Considerations forProvisioning Services》文档翻译精简而得,详情包括Windows系统缓存原理等可参考原文档。
由于Windows系统文件缓存的作用,目标设备(Windows XP)从共享的PVS虚拟磁盘启动过程如下图,假设Windows XP启动过程中只需要从磁盘读取200MB数据。
上图显示了,服务器只需要从物理磁盘读取一次数据用于第一个目标设备的启动。然后服务器就可以缓存虚拟磁盘的内容,这样其它的目标设备再启动时,只需要从内存中读取数据,而不需要再访问磁盘。只要在PVS服务器上有足够内存,在使用共享的虚拟磁盘模式(如被XenApp和XenDesktop使用)的情况下,PVS服务的物理磁盘系统只需要处理很少的读IOPS。
在计算PVS服务需要用于系统文件缓存的内存前,首先要知道一般目标设备需要从共享存储中读取多少数据。一般典型的XP会话会从磁盘读取1到3GB的文件,包括:
-
系统启动到登陆界面和启动所有服务(200MB)
-
用户登陆和加载对应的配置,设置桌面环境(50MB)
-
在一般的工作日,用户使用office和其它应用(600MB)
-
用户退出或关闭系统(150MB)
根据上面的工作流程,需要从虚拟磁盘读取1GB的数据。但是考虑到不同用户使用不同应用的需求,假定有不超过2GB的特定数据会被共享虚拟磁盘的各种用户读取是安全的。根据这样的考虑,2GB是PVS用于在内存中保存虚拟磁盘,限制目标设备到PVS物理磁盘读请求的系统缓存大小。
除了上述的用于支持缓存虚拟磁盘需要内存空间,还需要提供对Windows操作系统和运行在服务器上的服务(例如PVS服务)的关键文件的缓存。典型的,512MB是个有效的数量用于这样的缓存需求。这样用于文件缓存目的的内存大小应该为:
System Cache RAM = 512MB +#active vDisks * Avg. data read from vDisk
再计算上服务器在一定负载下的总提交到内存的字节数,总的内存大小应该为
Total RAM = CommittedBytes under load + System Cache RAM
假定一个运行PVS的服务器上正常有2GB的数据提交到内存,然后PVS服务负责管理4个vDisk,这样用于文件缓存的内存大小应为512MB+4*2GB=8.5GB,总的内存大小为2GB+8.5GB=10.5GB。
考虑到系统文件缓存对PVS性能的影响,建议PVS安装在64bits的Windows操作系统上。
3.3.3 vDisk存储
块存储:SATA、SCSI、iSCSI、FC
网络存储:CIFS、NFS、Netware
PVS通常部署共享vDisk在块设备上。当PVS服务使用netorkredirector,例如CIFS访问虚拟磁盘存储时,不能利用系统文件缓存来缓存vDisk的内容。这会产生很大的网络负担,引起双倍的网络流量,降低了性能。网络传输包括虚拟磁盘数据从网络存储到PVS服务的和PVS到目标设备(虚拟机)的传输,并且每个目标设备启动时,都会产生相同的传输。
安装SMB 2.0的Windows 2008中已经引入了新的文件锁和缓存方法,因此在PVS更新的版本中也许会解决上述的问题。虽然如此,PVS5.6及更早的版本都不能从CIFS共享缓存虚拟磁盘的数据。
3.3.4 目标设备内存大小
基于相同的Windows系统文件缓存原理,2.3.2中得出的内存需求公式同样适用于目标设备。
不对目标设备的操作系统或应用访问文件数进行详细的分析,为系统缓存分配256-512MB的内容是安全的底线。
假定在正常负载下,用户提到到内存的字节数是1GB,这样目标设备至少要分配1.5GB的内存。
3.4 本地缓存和启动过程
下面是当使用目标设备的本地磁盘作为写缓存(write cache)时,启动过程:
-
PVS检查pagefile文件的位置是否被设置
-
如果被设置在C盘,修改注册表设置文件位置到D: E: F:等。
-
这是为什么需要被提醒,你是否在使用本地磁盘驱动,并且你能设置pagefile文件在本地磁盘驱动器,(例如D:\);这应该在虚拟磁盘在私有模式下完成。
-
PVS检查本地分区的大小,以决定在哪里存放缓存文件,这个过程如下:
-
如果缓存文件已经存在,删除;
-
如果当前分区的空闲空间大于虚拟磁盘的大小,PVS停止查询,并使用当前分区作存放缓存文件;
-
当所有分区被查找过后,没有一个分区的空闲空间大于虚拟磁盘,那么选择空间最大的分区;
-
本地分区必须至少有500M的空闲空间用作缓存;
-
如果没有分区至少有500M的空闲空间,那么设置该设置的缓存置于服务器(PVS)端;
-
分区被选定后,创建缓存文件
-
如果用作本地缓存的分区或磁盘的空闲空间小于虚拟磁盘的大小(整个大小),,将使用FILE_NO_INTERMEDIATE_BUFFERING标记创建缓存文件,该标记会影响性能,因为无法利用到磁盘驱动的buffer。
-
如果用作本地缓存的分区或磁盘的空闲空间大于虚拟磁盘的大小(整个大小),那么默认将创建能够使用buffer的文件。
3.5 虚拟化PVS
在考虑将PVS服务放在虚拟机上时,需要注意如下:
-
确认虚拟机管理主机能够在多个的CPU上分布处理负荷
-
10Gbps的网络是最有效的环境,在虚拟化PVS和对应的网络传输
-
如果没有10Gbps的网络条件,在hypervisor层次的网卡绑定提供更好的带宽
-
考虑配置SR-IOV或Pass-Through来最小化需要增加网络的虚拟机(譬如PVS)的虚拟化负担
-
在一个高可用的环境,通常配置PVS服务在不同虚拟机管理主机的不同虚拟机上。
-
PVS所在的虚拟机安装x64版本的Windows,以利用系统文件缓存。
本节根据文档《DesignConsiderations for Virtualizing Citrix Provisioning Services》翻译整理,详情请参考原文档。