在本地磁盘型云主机做软RAID的实践[通俗易懂]

在本地磁盘型云主机做软RAID的实践[通俗易懂]在本地磁盘型云主机做软RAID的实践

大家好,又见面了,我是你们的朋友全栈君。

阿里云中购买了一台拥有本地磁盘的云服务器。比如 ecs.i2.16xlarge. 为了保证数据安全性,以及读写速度,我们通常会对磁盘做RAID。
1551068038463
但是云主机又不同于本地物理主机,没有办法添加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

至此,所有操作已经完成。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/106979.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • navicat premium15激活码【2021最新】

    (navicat premium15激活码)好多小伙伴总是说激活码老是失效,太麻烦,关注/收藏全栈君太难教程,2021永久激活的方法等着你。IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.htmlWKAWTQAJR5-eyJsaWNlbnNlSW…

    2022年3月22日
    112
  • 有return的情况下try catch finally的执行顺序(最有说服力的总结)

    有return的情况下try catch finally的执行顺序(最有说服力的总结)结论:1、不管有木有出现异常,finally块中代码都会执行;2、当try和catch中有return时,finally仍然会执行;3、finally是在return后面的表达式运算后执行的(此时并没有返回运算后的值,而是先把要返回的值保存起来,管finally中的代码怎么样,返回的值都不会改变,任然是之前保存的值),所以函数返回值是在finally执行前确定的;4、finally

    2022年6月16日
    28
  • idea如何创建yml文件

    idea如何创建yml文件1 File gt Settings2 Editor gt FileAndCodeT gt 中间选中 Files gt 点击 号 添加模板 gt 输入模板名字 Name YmlFile xml name 可以自定义 gt 后缀名 extension yml3 选中文件夹 gt New amp

    2025年6月13日
    5
  • Commit message 和 Change log 编写指南

    Commit message 和 Change log 编写指南

    2021年9月12日
    60
  • 【mysql 清空数据】清除mysql表中数据「建议收藏」

    【mysql 清空数据】清除mysql表中数据「建议收藏」主要命令有两种,一种是delete方式,一种是truncatetable方式。deletefrom表名;truncatetable表名;不带where参数的delete语句可以删除mysql表中所有内容,使用truncatetable也可以清空mysql表中所有内容。效率上truncate比delete快,但truncate删除后不记录mysql日志,不可以恢复数据

    2022年5月22日
    39
  • labelme使用教程_labelme和labelimg区别

    labelme使用教程_labelme和labelimg区别LabelMe可用于实例分割,语义分割,目标检测,分类任务的数据集标注工作。在线标注版本:http://labelme2.csail.mit.edu/Release3.0/index.php?message=1python版本:https://github.com/wkentaro/labelme分类标注:Classification目标检测标注:ObjectDetection语义分割标注:SemanticSegmentation实例分割标注:InstanceSegmentation视频

    2025年11月1日
    4

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号