一、为什么 IDC 服务器离不开 RAID

单块机械硬盘的可靠性撑不起 7x24 小时的业务:盘坏了数据就没了,性能也跟不上。RAID(Redundant Array of Independent Disks,独立磁盘冗余阵列)就是把多块盘组合成一个逻辑盘,要么提升性能,要么提升可靠性,要么两者兼得。在 IDC 场景里,除了极低配的测试机,生产服务器几乎全部要求配置 RAID。

二、常见 RAID 级别横向对比

级别最少盘数可用容量容错能力适用场景
RAID02100%(N 块盘总和)无,坏一块全毁缓存/临时数据,追求极致性能
RAID1250%允许坏 1 块系统盘、数据库日志
RAID53(N-1)/N允许坏 1 块文件存储、常规业务盘
RAID10450%每组镜像允许坏 1 块数据库、高 IO 业务

选择口诀:要性能不要命选 0;要命不要性能选 1;性价比之选选 5;又要命又要性能选 10。数据库和高 IO 业务无脑 RAID10,这是被无数生产事故验证过的结论。

三、硬件 RAID 还是软 RAID?

硬件 RAID 靠独立 RAID 卡(LSI/Avago/Broadcom 芯片为主流)计算校验,不占用 CPU,带缓存电池(BBU)还能做写缓存,断电不丢数据,是生产服务器的标配。软 RAID 用操作系统(Linux mdadm / Windows 动态磁盘)实现,零成本,但占用 CPU 且重启流程更脆弱,一般只用于测试环境或预算极紧的场合。

判断服务器是否已配置硬 RAID:

# 查看是否有 RAID 卡(厂商不同命令不同)
lspci | grep -i raid
# 常见输出: LSI Logic / Symbios Logic MegaRAID SAS-3 3108

# 安装厂商管理工具后查看阵列状态
megacli -LDInfo -Lall -aALL
perccli /c0 show
storcli /c0 show

四、软 RAID 实战:mdadm 从创建到使用

虽然生产环境多用硬 RAID,但掌握 mdadm 对理解 RAID 原理、排查硬 RAID 问题都很有帮助。以三块盘做 RAID5 为例:

# 1. 安装
yum install -y mdadm   # CentOS/RHEL
apt install -y mdadm   # Debian/Ubuntu

# 2. 创建 RAID5(/dev/sdb /dev/sdc /dev/sdd 三块新盘)
mdadm --create /dev/md0 --level=5 --raid-devices=3 /dev/sdb /dev/sdc /dev/sdd

# 3. 查看创建进度与状态
cat /proc/mdstat
mdadm --detail /dev/md0

# 4. 格式化并挂载
mkfs.ext4 /dev/md0
mkdir -p /data
mount /dev/md0 /data

# 5. 写入配置文件,开机自动组装
echo 'DEVICE /dev/sd[b-d]' > /etc/mdadm.conf
mdadm --detail --scan >> /etc/mdadm.conf
echo '/dev/md0 /data ext4 defaults 0 0' >> /etc/fstab

五、热备盘与故障恢复演练

生产阵列建议配置热备盘(Hot Spare),坏盘后自动顶替重建,缩短故障窗口:

# 给 RAID5 添加一块热备盘 /dev/sde
mdadm --add /dev/md0 /dev/sde

# 模拟一块盘故障(生产环境千万别手滑)
mdadm --fail /dev/md0 /dev/sdc
mdadm --remove /dev/md0 /dev/sdc

# 观察自动重建(热备盘会自动顶替)
cat /proc/mdstat

# 换上新盘后手动加回
mdadm --add /dev/md0 /dev/sdc

注意:RAID 不是备份。RAID5/10 只防"单块盘物理损坏",防不了误删文件、勒索加密、控制器逻辑故障。阵列之外必须另做数据备份,这条红线一定要守住。

六、硬 RAID 卡常用巡检命令

生产服务器巡检阵列状态,MegaRAID 卡最常用:

# 查看所有逻辑盘状态(State 是否为 Optimal)
megacli -LDInfo -Lall -aALL | grep -E 'Virtual Drive|State|RAID Level'

# 查看物理盘状态(是否为 Online/Unconfigured Good)
megacli -PDList -aALL | grep -E 'Enclosure Device ID|Slot Number|Firmware state|Media Error'

# 查看电池/电容状态(BBU 失效会导致写策略降级)
megacli -AdpBbuCmd -GetBbuStatus -aALL

# 查看重建进度
megacli -PDRbld -ShowProg -PhysDrv [252:2] -aALL

把上面命令封装成脚本配合 crontab 每日执行,状态非 Optimal 就告警,是 IDC 运维的基本功。

七、选型建议与常见坑

  • 系统盘:两块盘 RAID1 足够,别浪费盘位。
  • 数据盘:数据库 RAID10,文件存储 RAID5/6(大容量场景考虑 RAID6 双盘容错)。
  • 坑一:SSD 组 RAID5 有"写放大"问题,消费级 SSD 还容易触发掉盘,务必选企业级盘。
  • 坑二:别把 RAID 卡接的盘和主板 SATA 口直连的盘混在一个逻辑卷里,性能与故障行为完全不同。
  • 坑三:硬 RAID 换卡时注意固件版本,跨代换卡可能导致阵列无法识别,先备份配置(megacli -CfgSave)。

最后再强调一遍:RAID 解决的是"盘坏了不宕机",备份解决的是"数据没了能找回",两者缺一不可。祝大家的阵列永远 Optimal。