在企业内部做IaaS,共享存储资源池是必然要求,对于大部分企业来讲,其实并不需要太多新技术,传统的SAN存储网络在当下是绝对能够非常良好的支撑IaaS私有云的,存储阵列和SAN交换机就够了,至于该买什么牌子,同档次里找便宜的吧,不差钱的话,推荐EMC的存储解决方案。这篇将以EMC VNX和博科交换机为例介绍下典型的共享存储资源池。
1 存储阵列部署
对大多数企业而言,存储厂商提供的中端存储设备(即双控制器存储阵列,比如EMC的VNX)是可以满足所有需求的,每个控制器上配置8个8G的光纤端口即可。磁盘的数量根据数据量确定即可,如果是做共享的存储资源池,只要使用EMC的默认FAST VP的SSD、SAS、NL SAS的磁盘比例即可,RAID也就使用FAST VP的默认设置即可。也许有人会想按照业务和技术属性(Winodws/Linux/AIX,Oracle/SQLServer/DB2/MySQL/Sybase,VMware,NAS)去分析IO,然后确定RAID方案,但是负责任的说,当做共享资源池时,那些分析都没用,分析到最后,就会发现还是都RAID5吧。这个部分事实上不需要太多的工作,存储供应商会把存储本身的连线都处理好,需要规划的仅是如何做RAID和资源池,建议就告诉他们:要一对儿一模一样的存储阵列,每台上用FAST
VP,默认设置就行,两台之间做MV,再加上一对儿一模一样的光纤交换机(每台上的端口数按照预计的客户主机数量+8)。
2 光纤网络连接
光纤网络的连接是需要确定的问题,典型的也是适用于大多数场景的连接拓扑如下:
两台光纤交换机的0-7口保留给存储阵列,0-3口给存储1,4-7口给存储2,每台存储的控制器A和控制器B的端口保留前三个,最后一个用于MirrorView直连。按照上图举例,如果一台客户主机有两块光纤卡,分别连接到了交换机1的39口和交换机2的39口,则可交换机配置中配置(39,0),(39,1),(39,4),(39,5)两个zone,最终这台客户主机将连接存储1的A3、B4、A4、B3四个端口和存储2的A3、B4、A4、B3四个端口。当在存储阵列上,配置好主机和storage
group后,在客户主机上可识别到每台存储各4条链路,可使用PowerPath或OS自带链路聚合软件聚合成一个设备使用。
3 客户主机配置
共享资源池管理员最常做的就是添加新的客户主机了,对于主机的操作包括安装HBA卡驱动(linux不用)、主机兼容性测试(其实做不做都行)、HostAgent安装(已保证阵列能识别主机信息)、PowerPath安装(汇聚4条链路成一条伪链路)。这些操作都是些标准步骤,营养不大,这里不凑篇幅,主要写两个注意事项:
- 设置磁盘起始偏移量
在OS进行磁盘初始化时,默认的偏移量是有文件系统决定了,通常不会是整个block,这会导致IO骑着block的边界进行,会损失一点儿点儿性能(~2%~3%),所以可以指定下磁盘偏移量:
Windows
<span style="font-family:SimSun;font-size:12px;">C:\>diskpart Microsoft DiskPart version 6.0.6001 Copyright (C) 1999-2007 Microsoft Corporation. On computer: ASPIRINGGEEK DISKPART> list disk Disk ### Status Size Free Dyn GPT -------- ---------- ------- ------- --- --- Disk 0 Online 186 GB 0 B Disk 1 Online 100 GB 0 B Disk 2 Online 120 GB 0 B Disk 3 Online 150 GB 150 GB DISKPART> select disk 3 Disk 3 is now the selected disk. DISKPART> create partition primary align=1024 DiskPart succeeded in creating the specified partition. DISKPART> exit</span>
Linux
- lvm与powerpath的配置问题
由于第2部分中介绍的连接方式会在客户主机上为同一块磁盘产生5条链路(包括4条物理链路和1条伪链路),我们想使用的是其中的伪链路,如果直接使用Linux文件系统,则直接选择伪设备即可,可是lvm无法识别这些设备的关系,会当成5个设备来处理,而且会随机的选择使用哪个设备。因此需要编辑/etc/lvm/lvm.conf,用过滤器过滤掉4个物理设备,然后重启OS,在lvm.conf里找到如下行:
filter = [ "a/.*/" ]
将其注释掉,根据fdisk -l命令的输出,添加另一行filter,只准许本地磁盘设备和伪设备,拒绝其他所有设备,例如:
filter = ["a|/dev/cciss/c0d0|", "a|/dev/emcpowera|", "r/.*/"]