独立磁盘冗余阵列-RAID
一、RAID概述
RAID(Redundant Array of Independent Disks)即独立冗余磁盘阵列
磁盘阵列就是、由很多块廉价磁盘 组成的一个容量巨大的卷组、然后在使用不同级别的RAID来提升数据的读写效率、保证数据的安全性
磁盘阵列的样式包括:
1、外接式磁盘阵列柜
2、内接式磁盘阵列卡
3、软件的方式来实现
1)RAID级别
RAID的级别很多、目前以有的RAID磁盘阵列多达十几种、而常见的包括:RAID0、RAID1、RAID5、RAID10
1、RAID0-(分条)
RAID0就是将多块硬盘(至少两块)通过软件或者是硬件的方式串联在一起 组成一个庞大的卷组
然后将数据依次写入到各个物理硬盘中、这样的话 数据的读写效率 可以得到很大的提升
优点:因为是条带化、所以数据的读写效率 得到了很大的提升
缺点:无容错效果、一块盘损坏将导致整个系统的数据受到损坏
2、RAID1-(镜像)
RAID技术 就是将两块或者两块以上的硬盘绑定在一起、写入数据的时候 将数据同时写入到多块硬盘上面
当中如果有一块硬盘发生故障 就立即以热交换模式 来恢复数据正常使用 可将另一块盘上的数据 理解为副本
优点:因为是镜像数、所以具有冗余性
缺点:磁盘的利用率得以降低、写的性能有所变慢
3、RAID5-(奇偶校验)
RAID5技术就是通过将数据的奇偶校验信息保存到不同硬盘中、而不是单独保存在一块硬盘上面
这样做的最大好处就是一块盘损坏之后、不至于出现致命缺陷 为何呢 因为硬盘设备出现问题之后
我们可以通过 奇偶校验信息来重建损坏的数据、如下图所示 Parity的地方存储的就是 数据校验信息
优点:兼顾了 读写效率、数据安全这两者 冗余类型为奇偶校验
缺点:成本是一方面、另一方面就是 一块硬盘出现故障以后、整个系统的性能 肯定会有所降低
4、RAID10-(分条+镜像)
从名字我们可以看出来、RAID10技术就是 RAID0+RAID1的一个结合体、部署RAID10至少需要四块盘
最基础的理念就是、先两两制作成RAID1 来保证系统和数据的安全性、然后在RAID1的基础上 部署RAID0
以此来进一步提高硬盘设备的读写效率、这样的话 只要坏的不是同一组中的所有硬盘 那数据丢失概率不大
优点:兼顾 RAID0和RAID1的特点、在不考虑成本的情况下 RAID10的效率要高于RAID5
缺点:还是以上这个说法、价格相对较高 但是我们要知道的是 数据的价值 远远超过了硬盘的价值
二、Linux实现软RAID
因为RAID0和RAID1的效果 均可以在 RAID10里面 体现出来、所以这边的话 我就不单独做了
在部署之前 我们先来看一下使用什么来实现?
在Linux系统里面、阵列的管理和配置 需要用到 mdadm命令、使用yum 安装即可 yum -y install mdadm
以下为mdadm的常用参数:
-C: 创建
-a: 检测设备名称
-v: 显示过程信息
-l: 指定RAID 级别
-n: 指定设备数量
-x: 指定热备磁盘
-D: 查看详细信息
-c: 指定数据块大小
-f: 模拟设备损坏
-r: 移除设备
-Q: 查看摘要信息
-S: 停止磁盘阵列
===================================================
1)准备工作
因为是虚拟机、所以我们先来快速的添加 四块硬盘、如下所示
2)创建软RAID
如下所示:设备名称为md10、硬盘数量为4、RAID的级别为10
[root@node1 ~]# mdadm -C /dev/md10 -a yes -n 4 -l 10 /dev/sdb /dev/sdc /dev/sdd /dev/sde
3)格式化阵列
格式化的命令为:mkfs -t 类型 设备名称
如下所示、我将格式化刚刚所创建的 md10
[root@node1 ~]# mkfs -t ext4 /dev/md10 #格式化的类型为 ext4
4)使用与验证软RAID
使用之前、我们先创建一个目录用来挂载使用
如下所示:先创建目录、然后挂载、最后将挂载信息写入到配置文件使其开机自动挂载
[root@node1 ~]# mkdir /share #创建对应的挂载目录 [root@node1 ~]# mount /dev/md10 /share #挂载 [root@node1 ~]# echo "/dev/md10 /share ext4 defaults 0 0" >> /etc/fstab #将信息写入配置文件 [root@node1 ~]# mount -a [root@node1 ~]# df -hT | tail -1 /dev/md10 ext4 20G 45M 19G 1% /share
演示的话也看不出其性能、除非是真实的生产环境、不过RAID1的特点 可以测试出来
测试的话就是将一块或者两块硬盘 将其移除、然后在测试数据是否可以读取和写入
如下所示:我将使用 -r选项 来模拟硬盘设备故障、然后测试数据是否可以 正常的写入和读取、最后添加一块新的磁盘到阵列里面
[root@node1 ~]# mdadm /dev/md10 -f /dev/sdb #模拟磁盘损坏 mdadm: set /dev/sdb faulty in /dev/md10
然后 再次查看状态信息、如下所示我们可以看到、活跃的和正在工作的磁盘只有三个、然后损坏了一个
但是这并不影响我们的数据存储、如下所示
虽然说不会影响数据的正常使用、但是系统性能肯定还是会有所降低、所以我们在添加一块硬盘到阵列
如下所示:我们将刚刚所移除的 /dev/sdb设备 添加回来、然后再次查看阵列状态
注意:添加之前先重启、不然系统会提示设备繁忙
[root@node1 ~]# mdadm /dev/md10 -a /dev/sdb mdadm: added /dev/sdc
再次来查看、如下所示、我们可以看到已经恢复正常
三、磁盘阵列+备份盘
我们都知道 RAID 1/5/10具有容错效果、一块磁盘坏掉并不影响我们数据的正常使用、如果运气不好、所有磁盘全部损坏、那业务就得暂停了
那能不能预防这种事故的发生呢?能。我们可以使用RAID备份盘技术来预防这种事故的发生
那什么是备份盘呢?首先我们得准备一块空间足够的硬盘、然后在服务器上面做好相应的配置(使用mdadm命令)
配置完成之后、这块硬盘就没它什么事情了、平时它处于空闲状态(类似双机热备)一旦阵列中有硬盘出现故障、它就直接顶替上去
1)实现磁盘阵列+备份盘
我们首先来部署RAID5、因为刚刚我没有演示、在配置RAID5的同时、使用 mdadm命令中的 -x 选项 来指定备份盘的数量
配置完成以后、我们需要:创建目录、挂载、开启挂载、然后使用 -f 选项模拟故障、在这个出故障的时候、我们查看阵列状态、看看那个备份盘 是否 从备用变成了活跃
1、准备工作
因为我刚刚做了RAID10、但是这种热备盘技术与RAID1并不兼容、所以我们得把环境重塑一下
还是一样、在虚拟里面添加三块硬盘、哦 不对 、添加四块 为毛??因为还有一块我们需要用来做热备盘
提示:这样得话就是:/dev/sdb、/dev/sdc、/dev/sdd、/dev/sde 、然后我们使用/dev/sde来做备份盘
2、部署RAID5
注意:如下所示 -x 后面指定的就是热备盘的数量、我这就一个、所以值为1
[root@node1 ~]# mdadm -C /dev/md5 -n 3 -l 5 -x 1 /dev/sdb /dev/sdc /dev/sdd /dev/sde [root@node1 ~]# mkfs -t ext4 /dev/md5 [root@node1 ~]# mkdir /share [root@node1 ~]# mount /dev/md5 /share [root@node1 ~]# echo "/dev/md5 /share ext4 defaults 0 0" >> /etc/fstab [root@node1 ~]# mount -a [root@node1 ~]# df -hT | tail -1 /dev/md5 ext4 40G 49M 38G 1% /share
3、查看阵列状态
如下图所示:我们可以看到、工作数量为4、但是活跃的为3、然后在往下看、可以看见 sde处于备用状态
4、验证备份盘技术
下面我们使用 -f 选项来移除一块磁盘、就sdd吧、如下所示
[root@node1 ~]# mdadm /dev/md5 -f /dev/sdd #移除/dev/sdd设备 mdadm: set /dev/sdd faulty in /dev/md5
然后再次来查看阵列状态、我们会看到 sdd处于失败状态、然后sde顶上去了、并且已经同步了数据 、如下所示:
【只是为了打发时间】
独立磁盘冗余阵列-RAID的更多相关文章
- RAID 独立磁盘冗余阵列 - redundant array of independent disks
RAID: RAID全称是独立磁盘冗余阵列(Redundant Array of Independent Disks),基本思想是把多个磁盘组合起来,组合一个磁盘阵列组,使得性能大幅提高. RAID ...
- RAID(独立磁盘冗余阵列)简介
RAID(独立磁盘冗余阵列) 在大数据技术出现之前,人们就需要面对这些关于存储的问题,对应的解决方案就是RAID技术. RAID(独立磁盘冗余阵列)技术主要是为了改善磁盘的存储容量,读写速度,增强磁盘 ...
- RAID : 独立磁盘冗余阵列(Redundant Array of Independent Disks)
RAID 分为不用的等级(RAID0 - RAID5),以满足不同的数据应用需求. RAID 是由多个独立的高性能磁盘驱动器组成的磁盘子系统,从而提供比单个磁盘更高的存储性能和数据冗余的技术. AID ...
- RAID(独立磁盘冗余阵列)
Raid RAID 独立磁盘冗余阵列,在本科学习时候学习过,记不清是组成原理还是操作系统,当时理解的不太清楚,现在研究生期间做存储相关项目,涉及到了Raid,于是查各种博客,为了以后便于后期查阅, ...
- 磁盘冗余阵列之RAID10的配置
1988年由加利福尼亚大学伯克利分校发表的文章首次提到并定义了RAID,当今CPU性能每年可提升30%-50%但硬盘仅提升7%,渐渐的已经成为计算机整体性能的瓶颈,并且为了避免硬盘的突然损坏导致数据丢 ...
- 磁盘冗余阵列之RAID5的配置
1988年由加利福尼亚大学伯克利分校发表的文章首次提到并定义了RAID,当今CPU性能每年可提升30%-50%但硬盘仅提升7%,渐渐的已经成为计算机整体性能的瓶颈,并且为了避免硬盘的突然损坏导致数据丢 ...
- 磁盘冗余阵列之RAID5、RAID10
RAID技术主要有以下三个基本功能: (1).通过对磁盘上的数据进行条带化,实现对数据成块存取,减少磁盘的机械寻道时间,提高了数据存取速度. (2).通过对一个阵列中的几块磁盘同时读取,减少了磁盘的机 ...
- linux系统中RAID5磁盘冗余阵列配置(5块磁盘)
RAID5:需要至少三块(含)硬盘,兼顾存储性能.数据安全和储存成本. 如图所示”parity”块中保存的是其他硬盘数据的奇偶校验信息(并非其他硬盘的数据),以数据的奇偶校验信息来保证数据的安全,RA ...
- linux系统中RAID10磁盘冗余阵列配置
介绍:RAID10:需要至少四块(含)硬盘,兼具速度和安全性,但成本很高,RAID10用两个磁盘做RAID0,用其他两个做RAID1当备份. 配置流程: 第一步:在原有基础上为磁盘再填入五块磁盘(至少 ...
随机推荐
- BitSet 的使用
BitSet 的简单介绍 BitSet,即位图,是位操作的对象,值只有 0 或 1(即 false 或 true). Java 的 BitSet 内部维护着一个 long 数组,默认初始化时数组的长度 ...
- 关于javaweb开发的环境搭建(一)Tomcat
进行Tomcat的下载及环境配置 1.下载地址 http://tomcat.apache.org/ 2.下载的注意事项 下载的Tomcat版本要与自身电脑安装的java版本相匹配,下载时,点击 ...
- echarts更改坐标轴文字颜色及大小
xAxis: { data: anameArr, axisLabel: { show: true, textStyle: { color: '#c3dbff', //更改坐标轴文字颜色 fontSiz ...
- Go 每日一库之 go-homedir
简介 今天我们来看一个很小,很实用的库go-homedir.顾名思义,go-homedir用来获取用户的主目录. 实际上,使用标准库os/user我们也可以得到这个信息: package main i ...
- element-ui input 组件 回车事件
直接在el-input 标签上添加@keyup.enter="funName" 是不起作用的,在组件中使用需要加上.native. <el-input v-model = & ...
- python爬虫——scrapy的使用
本文中的知识点: 安装scrapy scrapy的基础教程 scrapy使用代理 安装scrapy 由于小哥的系统是win7,所以以下的演示是基于windows系统.linux系统的话,其实命令都一样 ...
- html+css 知识点总结 day1(01-08)
01 初步认识浏览器 02 浏览器内核 IE 内核:Trident, win10 Edge 内核:EdgeHTML Firefox(火狐浏览器) 内核:Ge ...
- LeetCode 第27题--移除元素
1. 题目 2.题目分析与思路 3.代码 1. 题目 给定 nums = [3,2,2,3], val = 3, 函数应该返回新的长度 2, 并且 nums 中的前两个元素均为 2. 你不需要考虑数组 ...
- git工作中总结2
目的:在远程分支上添加新文件(代码) 1.clone分支 git clone -b 分支 url cd到文件夹,添加文件到改目录下 2.创建新的分支并切换 git checkout -b dev(本地 ...
- limit_choices_to
# 多对多 老师 teachers = models.ManyToManyField(verbose_name='任课老师', to='UserInfo', related_name="ab ...