TiDB-OPS

Megacli 组装 RAID

DISK Metrics

IO 操作

磁盘指标

RAID (Redundant Array Of Inexpensive Disks)

RAID 卡就是用来实现 RAID 功能的板卡,通常是由 I/O 处理器、硬盘控制器、硬盘连接器和缓存等一系列零组件构成的。不同的 RAID 卡支持的 RAID 功能不同。

RAID 卡可以让很多磁盘驱动器同时传输数据,而这些磁盘驱动器在逻辑上又是一个磁盘驱动器,所以使用 RAID 可以达到单个的磁盘驱动器几倍、几十倍甚至上百倍的速率。

RAID 卡有自己的 CPU,Cache Memory,通过集成或借用主板上的 SCSI 控制器来管理硬盘,可以称之为一个智能化的设备。RAID 卡的分类一般根据集成的 SCSI 控制器来划分。如果没有集成 SCSI 控制器,而是借用主板上的 SCSI 控制器来管理硬盘,则为零通道 RAID 卡。根据 RAID 卡集成的 SCSI 控制器的通道数量,可以分为单通道、双通道、三通道 RAID 卡。还可以按照 SCSI 控制器的标准来划分 RAID 卡的种类,如 Ultra Wide、 Ultra2 Wide、Ultra160 Wide。

作为 RAID 卡的 CPU,通过执行闪存中的 Firmware,控制 SCSI 控制器、Cache Memory 以及指示报警电路,来实现 RAID 卡的功能,运作流程如下:

  1. 初始化 RAID 卡寄存器
  2. 读取 NVRAM 的上次 RAID 参数,与硬盘实际信息进行比较,显示结果
  3. 发送配置提示、响应 HOST 命令进入配置界面
  4. 提供配置菜单、将用户提供的 RAID 卡参数、RAID 参数存入 NVRAM
  5. 根据 RAID 参数,通过 SCSI 控制器对硬盘进行初始化写操作
  6. 完成配置
  7. 等待 Host 发出读写操作命令

RAID 卡性能的因素主要有 RAID 卡缓存(CACHE)大小、写策略(WRITE POLICY)、读策略(READ POLICY)、条带的大小(STRIPE SIZE)影响。

RAID Level 介绍

  RAID0 将数据条带化 (striping) 将连续的数据分散在多个磁盘上进行存取,系统发出的 IO 命令 (不管读 IO 和写 IO 都一样) 就可以在磁盘上被并行的执行,每个磁盘单独执行自己的那一部分请求,这样的并行的 IO 操作能大大的增强整个存储系统的性能。假设一个 RAID0 阵列有 n(n>=2) 个磁盘组成,每个磁盘的随机读写的 IO 能力都达到 140 的话,那么整个磁盘阵列的 IO 能力将是 140*n。同时如果在阵列总线的传输能力允许的话 RAID0 的吞吐率也将是单个磁盘的 n 倍。

  RAID1 在容量上相当于是将两个磁盘合并成一个磁盘来使用了,互为镜像的两个磁盘里面保存的数据是完全一样的,因此在并行读取的时候速度将是 n 个磁盘速度的总和,但是写入就不一样了,每次写入都必须同时写入到两个磁盘中,因此写入速度只有 n/2。

  我们那一个有 n(n>=3) 个磁盘的 RAID5 阵列来看,首先看看 RAID5 阵列的读 IO,RAID5 是支持并行 IO 的,而磁盘上的数据呈条带状的分布在所有的磁盘上,因此读 IO 的速度相当于所有磁盘速度的总和。不过这是在没有磁盘损坏的情况下,当有一个磁盘故障的时候读取速度也是会下降的,因为中间需要花时间来计算丢失磁盘上面的数据。

  读取数据的情况相对就要复杂的多了,先来看下 RAID5 奇偶校验数据写入的过程,我们把写入的数据称为 D1,当磁盘拿到一个写 IO 的命令的时候,它首先会读取一次要入的地址的数据块中修改之前的数据 D0,然后再读取到当前条带中的校验信息 P0,接下来就根据 D0,P0,D1 这三组数据计算出数据写入之后的条带的奇偶校验信息 P1,最后发出两个写 IO 的命令,一个写入 D1,另一个写入奇偶校验信息 P1。可以看出阵列在实际操作的时候需要读、读、写、写一共 4 个 IO 才能完成一次写 IO 操作,也就是实际上的写入速度只有所有磁盘速度总和的 1/4。从这点可以看出 RAID5 是非常不适合用在要大批量写入数据的系统上的。

  RAID6 和 RAID5 很类似,差别就在于 RAID6 多了一个用于校验的磁盘。就写 IO 速度上来说这两个是完全一样的,都是所有磁盘 IO 速度的总和。

  在写 IO 上也很是类似,不同的是 RAID 将一个命令分成了三次读、三次写一共 6 次 IO 命令才能完成,也就是 RAID6 实际写入磁盘的速度是全部磁盘速度之和的 1/6。可以看出从写 IO 看 RAID6 比 RAID5 差别是很大的。

  RAID0 读写速度都很好,却没有冗余保护; RAID5 和 RAID6 都有同样的毛病就是写入的时候慢,读取的时候快。那么 RAID1 呢? 嗯,这里要说的就是 RAID1,其实不管是 RAID10 还是 RAID01,其实都是组合大于 2 块磁盘时候的 RAID1,当先镜像后条带时候就称为 RAID10,先条带后镜像的时候称为 RAID01。从性能上看 RAID01 和 RAID10 都是一样的,都是 RAID1 嘛,但是 RAID10 在重建故障磁盘的时候性能比 RAID01 要快。

  因为 RAID10 其实就是 RAID1,所以它的性能与 RAID1 也就是一样的了,这里不需要再做过多的讨论。

RAID Cache 策略

作为缓存,Cache 的作用具体体现在读与写两个不同的方面:

作为写,一般存储阵列只要求数据写到 Cache 就算完成了写操作,当写 Cache 的数据积累到一定程度,阵列才把数据刷到磁盘,可以实现批量的写入。所以,阵列的写是非常快速的。至于 Cache 数据的保护,一般都依赖于镜像 (RAID 0 除外) 与电池 (或者是 UPS)。

Cache 在读数据方面的作用一样不可忽视,因为如果所需要读取的数据能在 Cache 中命中的话,将大大减少磁盘寻道所需要的时间

RAID BBU 电池

用以在系统断电时保护 Cache 中的数据,避免断电造成中间数据的丢失;

那在更换 RAID 卡电池之前,服务器虽然已经下线,无数据写入,但还有一部分数据存在 RAID Cache 中,并未写入硬盘中;但一般 RAID 卡电池坏掉后,RAID 卡会自动将写缓存(即 write back)禁止,变为 write through 方式,会使写性能有一定的下降,但不影响数据安全

若 RAID 电池和某块硬盘同时出现故障,应先更换 RAID 卡电池,待服务器重启成功,RAID 卡工作正常后再更换故障的硬盘,最大限度保证数据安全


MegaCli Software

MegaCli Install

使用 MegaCli 重组 RAID

物理机有 12 块 300G 的 SAS 磁盘;前两块磁盘组成 RAID 1 作为系统盘,后面 10 块盘默认为单盘 RAID0;等同磁盘直接挂载到系统,现在要将最后 10 块盘重新做成 RAID 50,在系统中识别成 2T 大小的逻辑磁盘

相关命令

命令 解释
megacli -AdpGetTime –aALL 显示适配器时间
megacli -adpCount 显示 RAID 卡数量
megacli -AdpAllInfo -aAll 显示 RAID 卡信息
megacli -FwTermLog -Dsply -aALL 查看 raid 卡日志
megacli -PDList -aALL 显示当前所有物理设备信息
megacli -LDInfo -LALL –aAll 显示当前所有逻辑设备信息
megacli -cfgdsply -aALL 显示 Raid 卡型号,Raid 设置,Disk 相关信息
megacli -LdPdInfo -aAll -NoLog 不懂
megacli -DiscardPreservedCache -Lall -a0 -NoLOG 清空所有的缓存
megacli -LDInit -ShowProg -LALL -aALL 查看初始化同步块的过程
megacli -LDBI -ShowProg -LALL -aALL 查看阵列后台初始化进度
megacli -LDBI -ProgDsply -LALL -aALL 动态可视化文字界面显示初始化进度
megacli -PDRbld -ShowProg -PhysDrv [8:5] -a0 查看某个物理磁盘重建进度
megacli -PDRbld -ProgDsply -PhysDrv [8:5] -a0 以动态可视化文字界面显示物理磁盘重建进度
megacli -CfgLdDel -L5 -a0 删除 RAID 阵列
megacli -PDHSP -Set [-EnclAffinity] [-nonRevertible] -PhysDrv[32:5] -a0 指定第 5 块盘作为全局热备
megacli -PDHSP -Set [-Dedicated [-Array1]] [-EnclAffinity] [-nonRevertible] -PhysDrv[32:5] -a0 指定为某个阵列的专用热备
megacli -PDHSP -Rmv -PhysDrv[32:5] -a0 删除全局热备
megacli -PDOnline -PhysDrv [32:4] -a0 将某块物理盘上线
megacli -PDOffline -PhysDrv [32:4] -a0 将某块物理盘下线
megacli -pdgetmissing -a0 查看raid陈列中掉线的硬盘
megacli -LDInit -start –L0 -a0 快速初始化
megacli -LDInit -start -full –L0 -a0 完全初始化
megacli -LDInit -progdsply -L0 -a0 显示初始化的进度
megacli -LDInit -abort -L0 -a0 结束完全初始化
megacli -AdpBbuCmd -BbuLearn a0 手动充电
megacli -AdpBbuCmd -GetBbuStatus -aALL 查看充电状态
megacli -AdpBbuCmd -GetBbuStatus -aALL 查看充电进度百分比
megacli -FwTermLog dsply -a0 > /tmp/Megacli.log 查看 Megacli log

磁盘缓存策略


FAQ

文档引用

哪些场合适合使用大缓存的 RAID 卡

总体来说,实际上是应用的 IO 特性决定了最合适的缓存大小。

PCIE 磁盘与 RAID

[root@jeff ~]# modinfo nvme

filename:       /lib/modules/3.10.0-327.el7.x86_64/kernel/drivers/block/nvme.ko
version:        1.0
license:        GPL
author:         Matthew Wilcox <willy@linux.intel.com>
rhelversion:    7.2
srcversion:     71E0CF0D222671148201A53
alias:          pci:v*d*sv*sd*bc01sc08i02*
depends:
intree:         Y
vermagic:       3.10.0-327.el7.x86_64 SMP mod_unload modversions
signer:         CentOS Linux kernel signing key
sig_key:        79:AD:88:6A:11:3C:A0:22:35:26:33:6C:0F:82:5B:8A:94:29:6A:B3
sig_hashalgo:   sha256
parm:           admin_timeout:timeout in seconds for admin commands (byte)
parm:           io_timeout:timeout in seconds for I/O (byte)
parm:           shutdown_timeout:timeout in seconds for controller shutdown (byte)
parm:           nvme_major:int
parm:           nvme_char_major:int
parm:           use_threaded_interrupts:int