阿里云中购买了一台拥有本地磁盘的云服务器。比如 ecs.i2.16xlarge
. 为了保证数据安全性,以及读写速度,我们通常会对磁盘做RAID。
但是云主机又不同于本地物理主机,没有办法添加RAID卡,这就需要通过软件来实现RAID。
这里我们采用RAID10的方式。
RAID 10
RAID 10是一个RAID 1与RAID 0的组合体,它是利用奇偶校验实现条带集镜像,所以它继承了RAID 0的快速和RAID 1的安全。我们知道,RAID 1在这里就是一个冗余的备份阵列,而RAID 0则负责数据的读写阵列。其实,下图只是一种RAID 10方式,更多的情况是从主通路分出两路,做Striping操作,即把数据分割,而这分出来的每一路则再分两路,做Mirroring操作,即互做镜像。
像RAID0一样,数据跨磁盘抽取;像RAID1一样,每个磁盘都有一个镜象磁盘, 所以RAID 10的另一种会说法是 RAID 1+0。RAID10提供100%的数据冗余,支持更大的卷尺寸,但价格也相对较高。对大多数只要求具有冗余度而不必考虑价格的应用来说,RAID10提供最好的性能。使用RAID10,可以获得更好的可靠性,因为即使两个物理驱动器发生故障,每个阵列中都有一个,数据仍然可以得到保护。RAID10需要4 + 2*N 个磁盘驱动器(N >=0), 而且只能使用其中一半或更小的磁盘用量, 例如 4 个 250G 的硬盘使用RAID10 阵列, 实际容量是 500G。
mdadm
mdadm是multiple devices admin的简称,它是Linux下的一款标准的软件 RAID 管理工具,作者是Neil Brown.
在linux系统中目前以MD(Multiple Devices)虚拟块设备的方式实现软件RAID,利用多个底层的块设备虚拟出一个新的虚拟设备,并且利用条带化(stripping)技术将数据块均匀分布到多个磁盘上来提高虚拟设备的读写性能,利用不同的数据冗余算法来保护用户数据不会因为某个块设备的故障而完全丢失,而且还能在设备被替换后将丢失的数据恢复到新的设备上.
使用mdadm将8块磁盘组成RAID 10
操作系统为CentOS7.4, 8块磁盘分别为vd[b-i]
1) 安装mdadm
yum -y install mdadm
2) 创建阵列
mdadm --create --auto=yes --verbose /dev/md0 --level=10 --raid-devices=8 /dev/vd[bcdefghi]
3) 查看状态
cat /proc/mdstat
Personalities : [raid10]
md0 : active raid10 vdi[7] vdh[6] vdg[5] vdf[4] vde[3] vdd[2] vdc[1] vdb[0]
23068143616 blocks super 1.2 512K chunks 2 near-copies [8/8] [UUUUUUUU]
[>....................] resync = 0.0% (3032704/23068143616) finish=1774.5min speed=216621K/sec
bitmap: 172/172 pages [688KB], 65536KB chunk
unused devices: <none>
[root@bgd-spark001 ~]# mdadm --detail /dev/md0
/dev/md0:
Version : 1.2
Creation Time : Tue Aug 28 16:00:12 2018
Raid Level : raid10
Array Size : 23068143616 (21999.50 GiB 23621.78 GB)
Used Dev Size : 5767035904 (5499.87 GiB 5905.44 GB)
Raid Devices : 8
Total Devices : 8
Persistence : Superblock is persistent
Intent Bitmap : Internal
Update Time : Tue Aug 28 16:01:03 2018
State : clean, resyncing
Active Devices : 8
Working Devices : 8
Failed Devices : 0
Spare Devices : 0
Layout : near=2
Chunk Size : 512K
Consistency Policy : bitmap
Resync Status : 0% complete
Name : bgd-spark001:0 (local to host bgd-spark001)
UUID : aae72c6b:c40922c0:4e64d0dd:f0c3886a
Events : 9
Number Major Minor RaidDevice State
0 253 16 0 active sync set-A /dev/vdb
1 253 32 1 active sync set-B /dev/vdc
2 253 48 2 active sync set-A /dev/vdd
3 253 64 3 active sync set-B /dev/vde
4 253 80 4 active sync set-A /dev/vdf
5 253 96 5 active sync set-B /dev/vdg
6 253 112 6 active sync set-A /dev/vdh
7 253 128 7 active sync set-B /dev/vdi
4) 测试性能
#往磁盘中写入大小为256MB的单个文件:
dd if=/dev/zero of=/dev/md0 bs=256M count=1 oflag=dsync
#写入1000次512字节:
dd if=/dev/zero of=/dev/md0 bs=512 count=1000 oflag=dsync
#从阵列中拷贝256KiB*15000(3.9 GB)大小内容到/dev/null:
dd if=/dev/md0 of=/dev/null bs=256K count=15000
5) 格式化
mkfs.ext4 /dev/md0
6) 挂载
mkdir /dfs
mount /dev/md0 /dfs
7) 设置开机自动挂载
查看设备uuid
mdadm --detail /dev/md0
将uuid写入到/etc/mdadm.conf中
DEVICE /dev/vdb /dev/vdc /dev/vdd /dev/vde /dev/vdf /dev/vdg /dev/vdh /dev/vdi
ARRAY /dev/md0 UUID=d17e2e6e:d2e76fa9:ab3ff508:3a95957f
MAILADDR root@localhost
8) 启动监听服务
systemctl start mdmonitor
9) 在/etc/fstab中加入
/dev/md0 /dfs ext4 defaults 1 2
至此,所有操作已经完成。