MySQL数据库Raid存储方案

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

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

一、RAID 的基础知识

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

1、为什么要使用 RAID?

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

[[227745]]

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 将不可用。

  1. (RAID 0) A = (Drive A1 + Drive A2) (Striped) 
  2. (RAID 0) B = (Drive B1 + Drive B2) (Striped) 
  3. (RAID-1)AB = (A +  B) (Mirrored) 

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

  1. (RAID-1) A = (Drive A1 + Drive A2) (Mirrored) 
  2. (RAID-1) B = (Drive B1 + Drive B2) (Mirrored) 
  3. (RAID-0)AB = (A +  B) (Striped) 
  4. ​ 

综合上面来看,先做 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 工具输入磁盘信息如下:

  1. [root()@xxxx ~]# MegaCli64 -LdInfo -lAll -aALL 
  2. Adapter 0 -- Virtual Drive Information: 
  3. Virtual Drive: 0 (Target Id: 0) 
  4. Name                : 
  5. RAID Level          : Primary-1, Secondary-0, RAID Level Qualifier-0 
  6. Size                : 278.875 GB 
  7. Is VD emulated      : No 
  8. Mirror Data         : 278.875 GB 
  9. State               : Optimal 
  10. Strip Size          : 64 KB 
  11. Number Of Drives    : 2 
  12. Span Depth          : 1 
  13. Default Cache Policy: WriteBack, ReadAhead, Direct, No Write Cache if Bad BBU 
  14. Current Cache Policy: WriteBack, ReadAhead, Direct, No Write Cache if Bad BBU 
  15. Default Access Policy: Read/Write 
  16. Current Access Policy: Read/Write 
  17. Disk Cache Policy   : Disabled 
  18. Encryption Type     : None 
  19. Default Power Savings Policy: Controller Defined 
  20. Current Power Savings Policy: None 
  21. Can spin up in 1 minute: Yes 
  22. LD has drives that support T10 power conditions: Yes 
  23. LD's IO profile supports MAX power savings with cached writes: No 
  24. Bad Blocks Exist: No 
  25. PI type: No PI 
  26. Is VD Cached: No 
  27. Virtual Drive: 1 (Target Id: 1) 
  28. Name                : 
  29. RAID Level          : Primary-1, Secondary-0, RAID Level Qualifier-0 
  30. Size                : 2.180 TB 
  31. Is VD emulated      : Yes 
  32. Mirror Data         : 2.180 TB 
  33. State               : Optimal 
  34. Strip Size          : 64 KB 
  35. Number Of Drives per span   : 2 
  36. Span Depth          : 3 
  37. Default Cache Policy: WriteBack, ReadAhead, Direct, No Write Cache if Bad BBU 
  38. Current Cache Policy: WriteBack, ReadAhead, Direct, No Write Cache if Bad BBU 
  39. Default Access Policy: Read/Write 
  40. Current Access Policy: Read/Write 
  41. Disk Cache Policy   : Disabled 
  42. Encryption Type     : None 
  43. Default Power Savings Policy: Controller Defined 
  44. Current Power Savings Policy: None 
  45. Can spin up in 1 minuteNo 
  46. LD has drives that support T10 power conditions: No 
  47. LD's IO profile supports MAX power savings with cached writes: No 
  48. Bad Blocks Exist: No 
  49. PI type: No PI 
  50. Is VD Cached: No 
  51. ​ 

网上有人仅仅通过 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 的写入策略

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

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

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

复制代码

2.2)查看电池状态

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

三、MySQL 适合的 RAID 存储方案

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

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

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

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

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

 

责任编辑:武晓燕 来源: ITPUB
相关推荐

2019-04-16 15:43:21

CheckSumRAID存储

2011-03-04 14:59:16

Raidoracle数据库

2018-11-12 15:15:32

MySQL数据库命令

2010-06-30 16:48:19

SQL Server数

2011-03-07 16:42:05

MySQL数据库安全

2019-06-20 15:25:14

MySQLL数据库存储

2018-08-24 13:58:13

数据库MySQL备份

2011-03-09 08:53:02

MySQL优化集群

2019-08-27 15:00:09

MySQL数据库存储

2011-08-29 16:27:16

MySQL时间类型

2011-07-06 10:49:50

MySQL优化

2010-10-14 13:18:55

MySQL存储过程

2010-04-16 13:34:00

Oracle Java

2010-05-14 11:04:17

连接MySQL

2011-07-06 14:12:20

MySQLPercona

2010-05-11 13:50:56

MySQL数据库

2011-08-01 23:08:33

MySQL存储引擎

2010-06-12 13:47:30

连接MySQL 数据库

2010-05-27 18:24:09

MySQL数据库密码

2010-05-20 18:12:37

MySQL数据库查询
点赞
收藏

51CTO技术栈公众号