作者:范军 (Frank Fan) 新浪微博:@frankfan7   微信:frankfan7

我们经常在FC存储设计中常问的是:LUN多大合适,一个LUN能最大支持多少个虚拟机?

在存储扩容时常见错误是,只注重满足容量需求,而忽视了对性能的影响。我建议Storage Sizing需要在保证性能的前提下,再考虑容量、可用性、安全等其他方面。


概念及性能指标

【虚拟化实战】存储设计之二LUN Sizing_第1张图片



上图是一个SAN环境下虚拟机访问存储设计到的模块,可以看到影响虚拟机性能的因素很多了。所以我们在设计存储时要周到的考虑到各个模块,是不是可能有瓶颈?

性能指标:

Throughput

单位时间内传输的数据量。往往以KBPSMBPS来衡量。

Latency (响应时间)

指完成一个IO请求所需要的时间。往往以milliseconds来衡量。


存储扩展时考虑因素

SCSI Reservation

vSphere 4.1 推出VAAI之前,的确SCSI Reservation需要特别注意。VAAI的Hardware AssistedLocking很大程度上避免了SCSI Reservation的问题。

那么,这是不是意味这我们就可以用一个很大的LUN,比如说64T, 然后在那个LUN上无限制的添加VM呢?

千万别忘了人们往往忽视的队列。

队列  Queuing


【虚拟化实战】存储设计之二LUN Sizing_第2张图片

从上图可以看到从上到下的四层都有队列。队列中等待执行的任务越长,意味着更长的响应时间。

先拿ESXi主机这一层来说,LUN Queue Depth决定了在同一时间可以对某个LUN发起的ActiveCommand 数量。ESXi缺省值是32. 所有虚拟机发起的Active Commands的总数最好不要持续超过LUN Queue Depth.     虽然LUN Queue Depth可以最大增加到64,但一般还是建议使用缺省值。

比如有多个I/O intensive的虚拟机在同一个LUN的时候,需要考虑把部分虚拟机转移到其他LUN以避免Active Commands的总数持续超过LUNQueue Depth,从而造成延时。

HBA这层也有队列,通常4,000 commandsper port 或者更高。所以一般瓶颈不在HBA层。

具体怎么算一个VMFS Volume最大支持的VM数,请参见下文。

http://www.yellow-bricks.com/2009/07/07/max-amount-of-vms-per-vmfs-volume/

不过该文最后也提到了,公式仅仅是个参考。


实践

化太多时间精力想设计的很完美,未免学究气。不妨开始先尝试一个很粗的计划。然后看情况在实践中调整。

·10 high I/O VMs perdatastore

·15 average I/O VMs perdatastore

·20 low I/O VMs perdatastore

上述建议来自VAAIand the Unlimited VMs per Datastore Urban Myth

虚拟机本身的I/O行为时变化的,而且实际中出现的因素,有时在设计时不能考虑周全。

实际出现问题的时候,你可以用Storage vMotion转移VM到其他不忙的LUN。你也可以用StorageDRS