Scott Lowe写了篇有意思的文章,他和Steve Chambers各自发表博文对虚拟化发表了些想法,特别发人深省。有感于此也说说我的看法。
在我最近研究服务器虚拟化的过程中,上了些论坛看了些帖子。很多论坛上都有童鞋问这样的问题,“我们公司有十几台兼容PC机当服务器,现在有点感觉撑不住了,老板给了点钱,打算买台好点的服务器上虚拟化,把这些兼容PC都迁移过去,请大大们出出主意提个建议啊。”
这不就是Steve说的“把鸡蛋放一个篮子”里面嘛。
思科最近出了款新服务器,UCS C250-M1,在2U的标准服务器机身里面配备了48条内存插槽,支持高达384GB内存!这下可爽了,开100台虚拟服务器都没问题了。高达1:100的集成度(consolidation ratio)很棒,是吗?又一个把鸡蛋放一个篮子里面的例子。Scott说,我常对我孩子说:Just because you
can doesn’t means you
should. 意思是: 不要以为你
能做到就意味着你
应该这么做。现在硬件的性能提升的如此之快,一台物理服务器的确能Host 100台VM了。可是你有没有想过,当这台服务器出现故障的时候,你那100个应用需要多少时间才能恢复?
不能完全依赖HA,尤其是没有精心设计的HA。HA只是帮你把应用在VM集群的其他Host上重新启动起来。但是当100个应用同时在1台Host上争先恐后地启动,这就像今天世博会预演中国馆的预约机一样,只能是一个杯具。
应用和人一样,也是有级别的,政府官员级别的,就得优先给予服务;屁民级别的,那只能乖乖地排队等上个几天几夜。哪些应用是关键的,和业务密切相关。停1分钟就损失10万美元的应用和停1天也没关系的自然有天壤之别。标好级别,让级别高的应用先启动,是HA配置的重要环节。
但是2台各自能Host 50个应用的双主机集群和10台各自能Host 10个应用的集群,哪个更好?当其中1台Host出现故障的时候,10主机的集群上受影响的应用只有10个,而双主机集群上受影响的应用则有50个!10主机集群可以轻松地将10个应用在其他9台Host上很快重启。而双主机集群上50个应用要在另外一台主机上按照它们的优先级别一个一个重启启动,没个几个小时怕是做不到的。
那么上面的例子是不是说10主机集群要比双主机集群要好的多?考虑下成本吧。双主机应用只需要4个ESX许可证(假设每台2个CPU)和4个Windows Datacenter许可证,10主机呢?各需要20个!硬件上来说,10主机呢?别的不说了光铁皮和电源就多花了很多,此外电力的消耗也是巨大的。集成度高意味着性价比高,意味着软件授权许可和服务器硬件成本更少,意味着更加节省成本和能源,绿色机房不正是服务器虚拟化的优势所在吗?所以,这里面必须有一个折衷。
Scott也说,他并不是反对高集成度,只是反对盲目地追求高集成度,反对为了集成度而追求集成度。盲目追求高集成度会陷入一个可靠性的危机。
如何折衷?这必须和业务SLA的要求结合起来考虑。首先分析自己的业务能够承受多少停机时间,然后分析在一个非常糟糕的情况下(比如硬件崩溃),爆发性的资源需求可能高到什么程度,然后再来决定自己的VM平台的设计方案。设计VM平台的时候,则必须考虑集群,考虑HA,考虑高可用性和高效性(好像是屁话……)。我的建议是,有关的Best Practice一定要看,一些设计初期忽视的小问题,在负荷不高的时候往往看不出来,但是当负荷上去之后就会造成大问题,特别是性能上大问题。
回到最前面的问题,单纯为了集成度(成本)考虑而将十几台兼容服务器迁移到一台ESX主机(或者Hyper-V)的做法,就好像把很多鸡蛋放在一个篮子里面,一失手所有的鸡蛋都会同时破碎。还不如不要虚拟化,老老实实地一台一台维护呢。