1、问题概述
某客户有一台Exadata X2-2,每个计算节点是4块普通的本地SAS硬盘做成的RAID5,然后在RAID5的本地硬盘上创建了一个文件系统来存放DSG数据同步软件,在后续的运维过程中,发现DSG数据同步软件在进行数据同步时的延时非常严重。
DSG进行检查和性能分析后,确认是由于Exadata的本地硬盘提供的IOPS无法满足DSG软件的要求,大量的时间都在等待本地磁盘的读写IO上。
通过磁盘性能分析工具也可以发现,本地盘的IO使用率基本上是在90%以上,严重时长时间100%,客户希望提供一个完整的解决方案,能解决Exadata上本地磁盘性能太差的问题。
2、解决方案
2.1 方案思路
我们知道,X2-2的计算节点使用的是4块转速为10k的SAS盘,这样的低性能磁盘,无论怎样折腾,它的性能也不会太高,肯定无法满足DSG软件的要求,这就只能选择在计算节点上选择SSD固态硬盘。
如果方案选择使用SSD固态硬盘,则后续的一系列问题必须进行确认:
1、计算节点的硬盘背板是否有多余的插槽?
2、计算节点是否支持SSD固态硬盘?
3、计算节点的RAID卡支持哪些RAID类型?
2.2 硬盘背板是否存在空余插槽
查看SUN X4170 M2的官方手册,我们可以找到计算节点硬盘背板的一些参数指标,如下图所示:
| ||||
Option # | Manufacturing Part # | Description | Previous Part # | |
n/a | 7051678 9 [F] | 8-Slot Disk Backplane, SATA DVD | 511-1283 [F] |
从以上指标信息,我们可以看出,exadata x2-2计算节点的硬盘背板上一共有8个硬盘插槽,目前raid 5的四块硬盘已经用掉四个槽位,还有四个空余槽位可以用来扩容新的硬盘。
同样,也可以看出SUN X4170 M2计算节点硬盘背板的pn 号为:7051678。
2.3 硬盘背板是否支持SSD
继续查看SUN X4170 M2的官方手册,我们可以看到PN号为7051678的硬盘背板支持的SSD硬盘类型,具体如下图所示:
| ||||
Option # | Manufacturing Part # | Description | Previous Part # | |
7101423 [S] | 7017183 [C] | 100GB Solid State SATA Drive Assembly | n/a | |
Intel SSDSA2BZ100G3 [Inquiry Unknown] (100GB - 2.5" Solid State - SATA Disk) | n/a | |||
Marlin 2.5" Bracket | n/a | |||
7101469 [S] | 7017184 [C] | 300GB Solid State SATA Drive Assembly | n/a | |
Intel SSDSA2BZ300G3 [Inquiry Unknown] (300GB - 2.5" Solid State - SATA Disk) | n/a | |||
Marlin 2.5" Bracket | n/a | |||
XRA-ST2CF32G2SSD-N [S] | 540-7841 [C] | 32GB Solid State SATA Drive Assembly | n/a | |
Intel SSDSA2SH032G1SB [Inquiry Unknown] (32GB - 2.5" Solid State - SATA Disk) | n/a | |||
Marlin 2.5" Bracket | n/a |
从以上表格可以看出,最大支持300GB SSD固态硬盘。
注:其实上是否最大只支持300GB的SSD?其实不是这样的,经过测试,1TB的SSD固态硬盘都是支持的。
2.4 方案选择
通过以上收集的信息,我们有两种方案可供选择。方案一:将当前计算节点操作系统的四个插槽的SAS盘全部更换为SSD盘。方案二:只是在富余的插槽上新插入一块SSD盘。下面,我们来对比方案一和方案二两种方案的优缺点。
方案一:
优点:
1、系统中仍然只会存在一个RAID5的逻辑盘,这个RAID5由4块SSD组成,这种方式对日后的运维和升级基本没有影响。
2、4块SSD组成的逻辑盘,所以整体的IOPS和MBPS非常高。
缺点:
1、一个计算节点就需要4块SSD盘,所以整体的费用会比较高。
2、整个方案操作过程会比较复杂,风险也相对较高。因为需要在线拔盘,插盘,磁盘重组,且一次只能操作一块硬盘,如果在插盘并重组过程中,其它磁盘出现故障,则会导致整个RAID5损坏,操作系统无法启动。
方案二:
优点:
1、一个计算节点只需要1块SSD盘,所以整体费用比较便宜。
2、整个方案操作过程简单且无风险。因为只会对新插入的SSD进行操作创建成RAID0,并创建VG和文件系统,对操作系统所在的RAID5无任何影响。
缺点:
1、因为新插入的SSD盘会做成RAID0,所以系统中会有一个RAID5,还有一个RAID0。这种定制的方式会影响后期的存储软件升级。同时,日常的巡检工具exachk也会出现误报。
基于综合考虑,最终选择了第二种方案,即每个计算节点只增加1块SSD盘,做成RAID0给DSG软件使用。
3、添加SSD硬盘
3.1 raid卡支持的raid类型
当进行虚拟驱动器(Virtual Drive)RAID创建时,我们需要注意的是RAID对底层物理磁盘个数的要求,具体如下图所示:
RAID型号 | 最少磁盘数 |
RAID0 | 1 |
RAID1 | 2 |
RAID5 | 3 |
RAID6 | 4 |
在方案中,我们在每个计算节点只插入一块SSD磁盘,对应上面的图可以看出,只能做成RAID0方式,RAID0其实是对磁盘做条带化,而没有数据的保护措施,也即这块磁盘损坏,则对应的RAID0也损坏,会造成数据丢失。而在方案中,我们仍然选择每个计算节点只插入1块SSD盘,是因为DSG软件的数据冗余由DSG软件自身来保证,或者也可以说是DSG软件的丢失不会影响到后期的数据同步工作。
3.2 SSD盘添加过程
将SSD盘插入计算节点的空闲插槽,盘托的硬盘指示灯变绿即表示SSD盘插入成功。这时,在操作系统层面是无法识别到这块新的SSD盘的,只能通过RAID管理软件来识别这块SSD硬盘。
3.3 对SSD盘创建RAID 0
在对新的SSD盘创建RAID0之前,我们必须先了解当前主机上插入的物理硬盘的情况,具体如下所示:
[root@sddxdb01 MegaCli]# /opt/MegaRAID/MegaCli/MegaCli64 -PDList -aAll Adapter #0
Enclosure Device ID: 252 Slot Number: 0 ……(略)
Enclosure Device ID: 252 Slot Number: 5 Enclosure position: 0 Device Id: 12 WWN: 50025388700813CF Sequence Number: 1 Media Error Count: 0 Other Error Count: 0 Predictive Failure Count: 0 Last Predictive Failure Event Seq Number: 0 PD Type: SATA Raw Size: 953.869 GB [0x773bd2b0 Sectors] Non Coerced Size: 953.369 GB [0x772bd2b0 Sectors] Coerced Size: 952.742 GB [0x7717c000 Sectors] Firmware state: Unconfigured(good), Spun Up Is Emergency Spare : NO Device Firmware Level: 2B6Q Shield Counter: 0 Successful diagnostics completion on : N/A SAS Address(0): 0x4433221106000000 Connected Port Number: 4(path0) Inquiry Data: S2BANWAG100576K Samsung SSD 850 PRO 1TB EXM02B6Q FDE Enable: Disable Secured: Unsecured Locked: Unlocked Needs EKM Attention: No Foreign State: Foreign Foreign Secure: Drive is not secured by a foreign lock key Device Speed: 6.0Gb/s Link Speed: 6.0Gb/s Media Type: Solid State Device Drive Temperature :23C (73.40 F) PI Eligibility: No Drive is formatted for PI information: No PI: No PI Drive's write cache : Disabled Drive's NCQ setting : Disabled Port-0 : Port status: Active Port's Linkspeed: 6.0Gb/s Drive has flagged a S.M.A.R.T alert : No Exit Code: 0x00 [root@sddxdb01 MegaCli]# |
从以上的命令输出可以看出,新插入的这块SSD硬盘的插槽号为5,但它的"Foreign State"为" Foreign",表示这块新插入的SSD盘自带了RAID配置信息,也即这块SSD硬盘以前被使用过,曾经加入到过其它的RAID组中。
此时,如果直接对该SSD硬盘创建RAID 0,则肯定会失败,报错信息如下:
[root@sddxdb01 MegaCli]# /opt/MegaRAID/MegaCli/MegaCli64 -CfgLdAdd -r0 [252:5] -a0
The specified physical disk does not have the appropriate attributes to complete the requested command.
Exit Code: 0x26 [root@sddxdb01 MegaCli]# |
通过如下命令即可验证是否存在外部的信息:
[root@sddxdb01 MegaCli]# /opt/MegaRAID/MegaCli/MegaCli64 -CfgForeign -Scan -a0 There are 1 foreign configuration(s) on controller 0. Exit Code: 0x00 [root@sddxdb01 MegaCli]# |
可见,这块SSD盘以前被创建过RAID,所以磁盘中残余有RAID信息,清除掉以前的RAID信息即可:
[root@sddxdb01 MegaCli]# /opt/MegaRAID/MegaCli/MegaCli64 -CfgForeign -Clear -a0
Foreign configuration 0 is cleared on controller 0.
Exit Code: 0x00 [root@sddxdb01 MegaCli]# |
再次确认是否还存在外部信息:
[root@sddxdb01 MegaCli]# /opt/MegaRAID/MegaCli/MegaCli64 -PDList -aALL | egrep -i 'Adapter|Enclosure|Slot|Inquiry|state' Adapter #0 Enclosure Device ID: 252 Slot Number: 0 Enclosure position: 0 Firmware state: Online, Spun Up Inquiry Data: HITACHI H106030SDSUN300GA2B01215N77LAB Foreign State: None Enclosure Device ID: 252 Slot Number: 1 Enclosure position: 0 Firmware state: Online, Spun Up Inquiry Data: HITACHI H106030SDSUN300GA2B01214N68GZB Foreign State: None Enclosure Device ID: 252 Slot Number: 2 Enclosure position: 0 Firmware state: Online, Spun Up Inquiry Data: HITACHI H106030SDSUN300GA2B01214N6MX3B Foreign State: None Enclosure Device ID: 252 Slot Number: 3 Enclosure position: 0 Firmware state: Online, Spun Up Inquiry Data: HITACHI H106030SDSUN300GA2B01215N6HL3B Foreign State: None Enclosure Device ID: 252 Slot Number: 5 Enclosure position: 0 Firmware state: Unconfigured(good), Spun Up Inquiry Data: S2BANWAG100576K Samsung SSD 850 PRO 1TB EXM02B6Q Foreign State: None Media Type: Solid State Device [root@sddxdb01 MegaCli]# |
从以上的命令输出可以看出,插槽号为5的SSD硬盘,外部信息已经被清除,现在可以正常使用该硬盘创建RAID。
[root@sddxdb01 MegaCli]# /opt/MegaRAID/MegaCli/MegaCli64 -CfgLdAdd -r0 [252:5] -a0 Adapter 0: Created VD 1
Adapter 0: Configured the Adapter!!
Exit Code: 0x00 [root@sddxdb01 MegaCli]# |
可见,在SSD硬盘上创建RAID0成功。
4、创建vg及文件系统
RAID0创建成功后,在操作系统层面就可以看到这块SSD硬盘,命令为/dev/sdb。下面,我们需要将/dev/sdb创建成VG和文件系统来给DSG软件使用。
[root@sddxdb01 MegaCli]# pvcreate /dev/sdb1 Writing physical volume data to disk "/dev/sdb1" Physical volume "/dev/sdb1" successfully created
[root@sddxdb01 MegaCli]# vgcreate datavg /dev/sdb1 Volume group "datavg" successfully created
[root@sddxdb01 MegaCli]# vgdisplay --- Volume group --- VG Name datavg System ID Format lvm2 Metadata Areas 1 Metadata Sequence No 1 VG Access read/write VG Status resizable MAX LV 0 Cur LV 0 Open LV 0 Max PV 0 Cur PV 1 Act PV 1 VG Size 952.74 GB PE Size 4.00 MB Total PE 243901 Alloc PE / Size 0 / 0 Free PE / Size 243901 / 952.74 GB VG UUID EF8cbh-rDCd-iQpz-BSS8-VXAZ-k3d2-nmNacV
--- Volume group --- VG Name VGExaDb System ID Format lvm2 Metadata Areas 1 Metadata Sequence No 8 VG Access read/write VG Status resizable MAX LV 0 Cur LV 6 Open LV 4 Max PV 0 Cur PV 1 Act PV 1 VG Size 834.89 GB PE Size 4.00 MB Total PE 213731 Alloc PE / Size 200704 / 784.00 GB Free PE / Size 13027 / 50.89 GB VG UUID p1Nq1d-5lz7-deCd-1y0k-Yzzi-jeIB-ecgzIh
[root@sddxdb01 MegaCli]# |
5、性能对比
我们知道使用SSD后,IO性能肯定会比以前有大幅提升,但到底能提升多少,我们最好能进行量化。
下面,我们使用FIO工具进行IO的读测试:
# fio --filename=/dev/sdb --direct=1 --rw=read --bs=1m --size=1g --numjobs=4 --group_reporting --name=test-sequential-read # fio --filename=/dev/sdb --direct=1 --rw=randread --bs=4k --size=1g --numjobs=4 --group_reporting --name=test-rand-read
# fio --filename=/dev/sda --direct=1 --rw=read --bs=1m --size=1g --numjobs=4 --group_reporting --name=test-sequential-read # fio --filename=/dev/sda --direct=1 --rw=randread --bs=4k --size=1g --numjobs=4 --group_reporting --name=test-rand-read |
如下图表,是FIO工具进行测试的数据,从得到的数据来看,SSD硬盘随机读的IOPS和MBPS比本地盘提升在30倍以上。
MBPS(顺序读) IOPS(顺序读) MBPS(随机读) IOPS(随机读) SSD(RAID0) 397564KB/s 388 74975KB/s 18743 本地盘(RAID5) 380608KB/s 371 2342.7KB/s 585
整个的IO提升效果还是非常明显的。客户后期将DSG软件迁移至SSD硬盘所在的文件系统中,再也没有出现过因为本地磁盘IO性能影响数据同步延时的情况。