作为一名DBA,选择自己的数据存储在什么上面,应该是最基本的事情了。但是很多DBA却容易忽略了这一点,我就是其中一个。之前对raid了解的并不多,本文就记录下学习的raid相关知识。

一、RAID的基础知识

【定义】RAID(Redundant Array of Independent Disk)是一种独立冗余磁盘阵列。

1、为什么要使用RAID?

我们知道,单块磁盘无论是从性能上、容量上、还是安全上都存在单点问题,如果把多块硬盘组成一个group,当成一个逻辑驱动器,从而实现同时从多块硬盘存取数据,那样可以提高了存储的吞吐量,同时也提高了存取速度和扩大存储容量。

RAID(Redundant Array of Independent Disk 独立冗余磁盘阵列)技术就是专门干这事的。RAID就是一种由多块廉价磁盘构成的冗余阵列,在操作系统下是作为一个独立的大型存储设备出现。RAID可以充分发挥出多块硬盘的优势,可以提升硬盘速度,增大容量,提供容错功能够确保数据安全性,易于管理的优点,在任何一块硬盘出现问题的情况下都可以继续工作,不会受到损坏硬盘的影响,这对于数据库存储领域是非常必要的。

2、RAID的几种工作级别

我们比较常用的RAID级别有RAID-0、RAID-1、RAID-10/RAID-01、RAID-5,其他的如RAID-3、RAID-4、RAID-6就不在此介绍了。

  • RAID-0

RAID-0采用数据分条技术(Striped)把多块磁盘串联成一个更为庞大的磁盘组,可以提高磁盘的性能和吞吐量。它读写数据的速度是最快的,要求比较低,要求两个磁盘即可做RAID-0,相对成本是最低的,但是RAID-0不提供冗余或奇偶校验数据的功能,如果驱动器出现故障,数据将无法恢复,安全性最弱。一般只是在那些对性能要求高、数据安全性要求不高的情况下才被使用,不适合数据库的存储。

  • RAID-1

RAID-1采用镜像(Mirroring)的方式冗余数据。RAID-1要求至少两个或2xN个磁盘,每次写数据时会同时写入镜像盘。这种阵列可靠性很高,但其有效容量减小到总容量的一半,同时这些磁盘的大小应该相等,否则总容量只具有最小磁盘的大小。RAID-1的数据安全性在所有的RAID级别上来说是最好的。但是其磁盘的利用率却只有50%,是所有RAID级别中最低的。

  • RAID-10

由于RAID-0和RAID-1都存在明显的优点和缺点,为了结合两者的优点、避免两者的缺点,从而产生了RAID-10,RAID-10适合用在速度需求高,又要完全容错,当然成本也很多的应用。不过在做RAID-10时需要注意的是先做RAID-1,再做RAID-0还是先做RAID-0,再做RAID-1,二者还是有区别的。举个栗子,假如现在有四块磁盘:

先做RAID-0,再做RAID-1:每两块磁盘先做RAID-0,在此基础上,再把两个RAID-0做成RAID-1。这时如果A类或者B类磁盘同时有一个故障,整个RAID将不可用。

(RAID ) A = (Drive A1 + Drive A2) (Striped)
(RAID ) B = (Drive B1 + Drive B2) (Striped)
(RAID-)AB = (A + B) (Mirrored)

先做RAID-1,再做RAID-0:每两块磁盘先做RAID-1,在此基础上,再把两个RAID-1做成RAID-0。这时只有A类或者B类磁盘两个都故障时,整个RAID才不可用。

(RAID-) A = (Drive A1 + Drive A2) (Mirrored)
(RAID-) B = (Drive B1 + Drive B2) (Mirrored)
(RAID-)AB = (A + B) (Striped)

综合上面来看,先做RAID-1,再做RAID-0相对更安全,建议这种方式,所以我们平时说的RAID-10就是先做RAID-1,再做RAID-0

  • RAID-5

RAID-5应该处于RAID-0和RAID-1之间的一种工作模式,它尽量平衡RAID-0和RAID-1的优点和缺点,是我们平时使用比较多的一种模式。做RAID-5至少需要三块磁盘,它采用校验码冗余数据,校验信息分布在多个磁盘上,当数据每次写入到磁盘上,同时还需要写入校验信息,因此写入性能相对不如RAID-0。当某个磁盘出现故障,可以使用其他磁盘上校验信息来恢复数据。相对RAID-1,它磁盘空间利用率为(N-1)/N

3、RAID的几种工作级别优缺点

【注】以上的高、中、低只是相对于RAID-0、RAID-1、RAID-10、RAID-5而言。

二、如何判断RAID级别、写入策略、电池状况

 1、判断RAID级别:MegaCli64工具输入磁盘信息如下:

[root()@xxxx ~]# MegaCli64 -LdInfo -lAll -aALL

Adapter  -- Virtual Drive Information:
Virtual Drive: (Target Id: )
Name :
RAID Level : Primary-1, Secondary-0, RAID Level Qualifier-0
Size : 278.875 GB
Is VD emulated : No
Mirror Data : 278.875 GB
State : Optimal
Strip Size : KB
Number Of Drives : 2
Span Depth : 1

Default Cache Policy: WriteBack, ReadAhead, Direct, No Write Cache if Bad BBU
Current Cache Policy: WriteBack, ReadAhead, Direct, No Write Cache if Bad BBU
Default Access Policy: Read/Write
Current Access Policy: Read/Write
Disk Cache Policy : Disabled
Encryption Type : None
Default Power Savings Policy: Controller Defined
Current Power Savings Policy: None
Can spin up in minute: Yes
LD has drives that support T10 power conditions: Yes
LD's IO profile supports MAX power savings with cached writes: No
Bad Blocks Exist: No
PI type: No PI Is VD Cached: No Virtual Drive: (Target Id: )
Name :
RAID Level : Primary-1, Secondary-0, RAID Level Qualifier-0
Size : 2.180 TB
Is VD emulated : Yes
Mirror Data : 2.180 TB
State : Optimal
Strip Size : KB
Number Of Drives per span : 2
Span Depth : 3

Default Cache Policy: WriteBack, ReadAhead, Direct, No Write Cache if Bad BBU
Current Cache Policy: WriteBack, ReadAhead, Direct, No Write Cache if Bad BBU
Default Access Policy: Read/Write
Current Access Policy: Read/Write
Disk Cache Policy : Disabled
Encryption Type : None
Default Power Savings Policy: Controller Defined
Current Power Savings Policy: None
Can spin up in minute: No
LD has drives that support T10 power conditions: No
LD's IO profile supports MAX power savings with cached writes: No
Bad Blocks Exist: No
PI type: No PI Is VD Cached: No

网上有人仅仅通过RAID Level列中的Primary-1, Secondary-0, RAID Level Qualifier-0来判断,我认为不是很准确。先来了解下Primary、Secondary、RAID Level Qualifier啥意思?

Primary字段:基本上可以确定RAID的级别,但是无法区分是RAID-1和RAID-10,因为有情况下他们的Primary值都是Primary-1, Secondary-0, RAID Level Qualifier-0

在这种情况下如何区分RAID-1和RAID-10?我认为还得结合另外两列进行判断:

Number Of Drives per span   : 2    #每个区段有2块磁盘
Span Depth : 3 #一共三个区段
结合primary-1,该RAID表示一共六块磁盘,每两个做RAID-1,最后将三个RAID-1做RAID-0

【总结:如何判断RAID级别】:

1)  除了RAID-1和RAID-10,其他级别通过Primary字段值就可以判断;

2) 至于RAID-1和RAID-10,还需要结合Number Of Drives (per span)、Span Depth两列的值,如果Span Depth值为1表示为RAID-1,不为1表示RAID-10;还有一种情况:Primary-1, Secondary-3, RAID Level Qualifier-0也是表示RAID-10;

2、判断RAID写入策略和电池状态

RAID的写入策略对IO性能有很大影响,有两种写入策略:

WriteBack:表示写入到磁盘缓存上,写入性能好,如果采用此策略,RAID必须支持电池可用,否则一旦断点,数据将丢失。
WriteThrough:表示直接写入到硬盘上,写入性能没有WriteBack好,一般没有电池时采用此策略

2.1)查看RAID的写入策略

[root()@xxxx ~]# MegaCli64 -LDInfo -Lall -aALL|grep 'Cache Policy'
**********************************************************************************
Default Cache Policy: WriteBack, ReadAdaptive, Direct, Write Cache OK if Bad BBU
Current Cache Policy: WriteBack, ReadAdaptive, Direct, Write Cache OK if Bad BBU
以上表示采用WriteBack(回写)策略,如果电池坏了也强制写入cache

Default Cache Policy: WriteThrough, ReadAheadNone, Direct, No Write Cache if Bad BBU
  Current Cache Policy: WriteThrough, ReadAheadNone, Direct, No Write Cache if Bad BBU

  如果是这个,表示采用WriteThrough策略

**********************************************************************************
Disk Cache Policy   : Disabled     #表示硬盘的cache,一般这里禁用,防止丢失数据

2.2)查看电池状态

[root()@xxxx ~]# MegaCli64 -adpbbucmd -aall |grep -E  'Battery State|Charger Status|isSOHGood|Relative State of Charge'
Battery State : Operational #电池状态,operational表示正在运行
Relative State of Charge: % #电池电量,如果低于15%,那么写入策略会由WB转变为WC,IO性能下降,需要关注
Charger Status: Complete #充电情况,表示已完成
isSOHGood: Yes #不是Yes需要关注

三、MySQL适合的RAID存储方案

通过上面对RAID的了解,我们已经知道各级别RAID的优缺点,对于MySQL数据库的存储,如何选择RAID级别呢?

我们可以根据MySQL各种文件类型分别选择,MySQL数据库重要的文件类型有:

、数据文件(frm,ibd):存储核心的数据,非常重要,安全性要求高,同时需要频繁的写入、更新数据,磁盘性能要求也比较高,首先建议物理磁盘是SSD,对于RAID的选择,如果预算足够,建议RAID-,其次是RAID-

、二进制日志文件:写入非常频繁,写性能要求高,由于从库依赖该文件,安全性也很重要,综合成本考虑,可以用两块SATA硬盘,做成RAID-1即可。

、redo文件,共享表空间文件:安全性要求高,如果预算足够,RAID-,通常RAID-1也是可以的,一般而言,redo文件和共享表空间和数据文件存储在一起即可。

参考文章:

http://www.chinastor.com/a/jishu/raid/yes.html

http://blog.csdn.net/haiross/article/details/38557373

http://ju.outofmemory.cn/entry/92025

MySQL数据库Raid存储方案的更多相关文章

  1. 关于MySQL数据库的备份方案

    这里简单总结MySQL的备份分为3种:分为冷备份,逻辑备份,热备份. 1.冷备份: 一般主要用于非核心业务,这类业务一般都是允许业务中断的,冷备份的特点就是数度快,恢复时也最为简单.通常直接复物理文件 ...

  2. MySQL数据库InnoDB存储引擎多版本控制(MVCC)实现原理分析

    文/何登成 导读:   来自网易研究院的MySQL内核技术研究人何登成,把MySQL数据库InnoDB存储引擎的多版本控制(简称:MVCC)实现原理,做了深入的研究与详细的文字图表分析,方便大家理解I ...

  3. MySQL数据库InnoDB存储引擎中的锁机制

    MySQL数据库InnoDB存储引擎中的锁机制    http://www.uml.org.cn/sjjm/201205302.asp   00 – 基本概念 当并发事务同时访问一个资源的时候,有可能 ...

  4. Ubuntu上更改MySQL数据库数据存储目录

    之前写过一篇博客"MySQL更改数据库数据存储目录",当时的测试环境是RHEL和CentOS,谁想最近在Ubuntu下面更改MySQL数据库数据存储目录时遇到了之前未遇到的问题,之 ...

  5. 使用percona-xtrabackup工具对mysql数据库的备份方案

    使用percona-xtrabackup工具对mysql数据库的备份方案 需要备份mysql的主机 172.16.155.23存放备份mysql的主机 172.16.155.22 目的:将155.23 ...

  6. MySQL数据库InnoDB存储引擎

    MySQL数据库InnoDB存储引擎Log漫游  http://blog.163.com/zihuan_xuan/blog/static/1287942432012366293667/

  7. 查看和改动MySQL数据库表存储引擎

            要做一名合格的程序猿,除了把代码写的美丽外,熟知数据库方面的知识也是不可或缺的.以下总结一下怎样查看和改动MySQL数据库表存储引擎:        1.查看数据库所能支持的存储引擎: ...

  8. MySQL数据库MyISAM存储引擎转为Innodb

    MySQL数据库MyISAM存储引擎转为Innodb  之前公司的数据库存储引擎全部为MyISAM,数据量和访问量都不是很大,所以一直都没什么问题.但是最近出现了MySQL数据表经常被锁的情况,直接导 ...

  9. MYSQL数据库高可用方案探究

    MySQL作为最关键的应用数据存储中心,如何保证MySQL服务的可靠性和持续性,是我们不得不细致考虑的一个问题.当master宕机的时候,我们如何保证数据尽可能的不丢失,如何保证快速的获知master ...

随机推荐

  1. 【JAVAWEB学习笔记】18_el&jstl&javaee的开发模式

    一.EL技术 1.EL 表达式概述 EL(Express Lanuage)表达式可以嵌入在jsp页面内部,减少jsp脚本的编写,EL 出现的目的是要替代jsp页面中脚本的编写. 2.EL从域中取出数据 ...

  2. Plupload上传插件自定义图片的修改

    若自定义的一个上传图片效果,代码(可能不全),当用户再次点击所有或任意一个上传图片的input时,uploader.files已经多了客户再次上传的图片,但是你就想要最后的两张图片,这就可以使用到up ...

  3. XSS研究2-来自内部的XSS攻击的防范

    引入: 前面我们分2篇文章分别探讨了来自外部的XSS攻击和来自内部的XSS攻击,现在我们来专门探讨如何防范来自内部的XSS攻击.   实践:  http://www.cnblogs.com/crazy ...

  4. python中的数字

    在编程中,通常使用数字来记录游戏得分,表示可视化数据.存储web应用信息等. #运算# 1,基本运算 >>> 2+35>>> 1-2-1>>> 3 ...

  5. SpringMVC实现账号只能在一处登陆

    一.问题引导 在Web开发中,实现一个账号只能在一处登陆有两种形式:1.当某个账号在某处登陆后,如果再在其他处登陆,将前一个账号挤掉:2.当某个账号登陆后,此账号在其他设备登陆提示已经登陆,无法登陆. ...

  6. 测试工具——JMeter

    本学期新学的课程,软件测试,上机的实验用到了C++Test,QTP,还有JMeter.今天针对JMeter做一次总结,方便以后用到,知道步骤会更加方便. 首先,对Jmeter进行一个大致的了解,包括对 ...

  7. WebLogic 安装

    首先 需要下载好Weblogic 官网:http://www.oracle.com/technetwork/middleware/weblogic/downloads/wls-main-097127. ...

  8. 谷歌安装器扫描时提示“需要root权限”,不用root也可以的!

    能FQ的用户会用谷歌服务,一般的新手机没有安装谷歌框架,但是在用谷歌安装器安装谷歌市场时会提示"需要root权限",我用的是360手机,按照下面的教程搞好了: 安装完GSM包就可以 ...

  9. FTP主动模式和被动模式的区别

    基础知识: FTP只通过TCP连接,没有用于FTP的UDP组件.FTP不同于其他服务的是它使用了两个端口, 一个数据端口和一个命令端口(或称为控制端口).通常21端口是命令端口,20端口是数据端口.当 ...

  10. 用java实现给图片增加图片水印或者文字水印(也支持视频图像帧添加水印)

    javaCV图像处理系列: javaCV图像处理之1:实时视频添加文字水印并截取视频图像保存成图片,实现文字水印的字体.位置.大小.粗度.翻转.平滑等操作 javaCV图像处理之2:实时视频添加图片水 ...