高可用性的XenServer环境应包括最少两台XenServer服务器和一个共享存储设备。XenServer的硬件,我采用的是Dell PowerEdge R710,内存加至16GB。iSCSI的存储设备则用下面4种硬/软件设备构成:

  1. 一台旧PC(Dell PowerEdge SC1420,内存加至4GB)装上windows 2003,再装上SANmelody
  2. Highpoint的RAID卡RocketRAID2314
  3. Century的支持e-SATA的外置硬盘抽取盒EX35PM8B-PE
  4. 8块500G的SATA内置硬盘

RAID卡设置选用了速度较快的RAID10,8块500 GB硬盘的可用空间为物理容量的1/2,4TB。除了SANmelody价值2万人民币左右,其他的都很便宜。整个存储系统在3万人民币之内。最便宜的支持iSCSI的硬盘阵列恐怕也要这个价格的1倍以上。而且我们的测试结果,这个廉价的存储设备的读写速度甚至高于低端的硬盘阵列。SANmelody的硬盘Cache功能起了很大的作用。如果不用SANmelody而改用没有硬盘Cache的iSCSI软件,读写速度则会低很多。事实上,这套存储系统是2年前作的。现在有4台XenServer和2台VMWare的ESX服务器在使用它。两年之间没有出过大问题。

安装好SANmelody并设置好RAID后,在OS的硬盘管理里让Windows认识新硬盘,并为其创建Partition。注意不要为Partitation设置盘符。这样SANmelody就可以认识硬盘空间。为了下一步的设置,还需要在SANmelody的管理工具里面设置Storage Server, Application Server和Volume。SANmelody的设置大家可以参考它的产品说明。我为iSCSI存储系统和XenServer之间创建了专用的局域网。并且采用了有iSCSI优化功能的Dell PowerConnect 5424交换机。

XenServer的安装不是很难,只要别忘记打开BIOS里面的Virtualization Technology功能,然后按照XenServer安装CD的提示一步一步装下去就好了。在安装过程中,只能配置一块网卡的IP地址,剩下的网卡需要在安装后手工配置。XenServer安装完成后,找一台Windows工作站装上XenCenter然后连接XenServer安装过程中设定的IP地址。连接上XenServer后在Console标签按Enter键就可以进入XenServer的命令模式。按照以下步骤来设置其他网卡的IP地址。

  1. 用xe pif-list命令来寻找需要设置的网卡的uuid
  2. 用xe pif-reconfigure-ip uuid=<第1步找到的uuid> mode=<dhcp或是static> ip=<IP地址> netmask= gateway=
  3. 用xe-toolstack-restart命令或是重启XenServer让设定生效

我的XenServer服务器有3块网卡,第1块接入公司网络,在安装过程中设定。第2块接入Provision Server的测试用局域网,用上述命令设定。第3块接入iSCSI专用局域网也用上述命令设置。还有最好在把XenServer加入Pool前设置网址,加入Pool之后xe pif-list命令会列出Pool内的所有网卡,比较难于寻找需要设定的网卡的uuid。确认XenServer和iSCSI存储系统之间的网络通信以后,建立XenServer Pool,然后把另外一台XenServer加入到Pool。建立Pool的XenServer将成为Pool Master。然后就可以开始在XenServer上设置iSCSI存储了。设置顺序如下。

  1. 在XenCenter里右击第一台XenServer选择New Storage…
  2. 选择Virtual disk storage里的iSCSI,然后点击Next
  3. 在Name里输入任意的名字,Target Host里面输入iSCSI存储系统的IP地址。我的iSCSI存储没有设置CHAP,所以让Use CHAP保持关闭状态。
  4. 点击Discover IQNs就应该看到iSCSI存储系统的信息自动表示在左侧的list box里面
  5. 点击Discover LUNs按键。马上到iSCSI存储系统端,右击SANmelody的Application Servers选择Map New Virtual Volume将事先预备好的Volume设置给XenServer的iSCSI Channel。注意XenServer的iSCSI Channel只在Discover LUNs执行的期间中表示在SANmelody设置画面里,如果Discover LUNs执行结束并出现了time out错误,在SANmelody里面也就看不到iSCSI Channel了。如果看不到的话,就回到XenCenter再点击一次Discover LUNs按键。
  6. 回到XenServer端,再次点击Discover LUNs。这次Target LUN列表里面看到iSCSI存储。
  7. 点击Finish结束第一台XenServer的iSCSI设置
  8. 在XenCenter里面,左侧的列表里选择刚刚创建的iSCSI存储,右侧的General标签的Status下面第一台XenServer应该是Connected状态,而第二台XenServer应该是出错的,并且有Repair link。点击Repair,并且到SANmelody端确认Volume和Channel的对应关系,如果没有设定的话,设定好再回到XenCenter重新点击Reqair。第2台XenServer也成为Connected状态的话,iSCSI就设定好了。

在这样一个高可用性的XenServer环境,可以自由选择在哪台XenServer上启动虚拟机,也可以让XenServer根据负荷自动选择在哪里启动。打开High Availablity功能还可以实现当一台XenServer出现问题时,把所有虚拟机自动转移到另外一台虚拟机上。最令管理者高兴的是,用XenMotion动态迁移,可以将运行状态的虚拟机从一台XenServer迁移到另外一台XenServer上,而不带有停止服务的风险。管理者可以不必等到夜深人静的时候也可以交换硬件设备了。