《浅析linux之raid管理》由会员分享,可在线阅读,更多相关《浅析linux之raid管理(8页珍藏版)》请在金锄头文库上搜索。
1、浅析 LINUX 之 RAID 管理1 引言在存储技术飞速发展的今天,RAID 技术为系统带来的存储高性能和数据高可靠是有目共睹的。经过了十几年发展的 Linux 操作系统现已进入更具理性、更重实效的应用时代,如何在 Linux 系统中高效有序地管理各种 RAID 设备成为人们越来越关注的主题之一。2 RAID 概述RAID(Redundant Array of Independent Disks)术语最早是由加州大学 Berkeley 分校于 20 世纪 80 年代提出,后被存储业界大力推广和研究,开发出为数众多的 RAID产品,在以后的发展中,又加入了新的分级,成为现今最流行的存储标准。常
2、用的RAID 级别有:RAID0、RAID1、RAID3、RAID4、RAID5、RAID6、RAID10、RAID50、Linear Mode、 JBOD 等。造成 RAID 流行的三个主要原因: RAID 在容量和管理上的优势RAID 系统可以组合多个单盘,而呈现在系统中的可以是单一的地址或 LUN,不占用更多的系统总线插槽,还能解决 RAID 出现之前不得不将应用扩展到多个服务器而造成的管理困难和增加失效几率等问题。 RAID 的性能优势RAID 的一个最重要的概念是磁盘分条。其思想是:通过将 I/O 操作分散到所有成员磁盘中,使主机 I/O 控制器能够处理更多的操作,这是在单个磁盘驱动
3、器下所不能达到的。 1 RAID 的可靠性和可用性优势由于采用了冗余算法,可以保证:即使在个别磁盘失效的情况下,数据仍能维持一致性。常用的冗余算法包括镜像和校验。校验算法是利用“异或”操作之逆操作是其本身的特点,来实现数据保护的功能。如下所示。A B C = D A B D = C假设、为分条数据,为校验数据。当所在的磁盘失效时,可利用剩余分条数据、和校验数据重新生成数据,系统并未因盘坏而导致数据丢失,仍可继续工作,但处于降级状态(Degraded) 。不同级别 RAID 在降级时的表现不同,一般来说,系统的存储性能和数据保护都将大打折扣,尽管某些级别的 RAID 可以容忍多个磁盘的失效。3
4、Linux 中各种 RAID 实现在 Linux 系统中,根据 RAID 在 I/O 路径上的位置不同,可分为:3.1 基于主机系统软件的 RAID即通常所说的软 RAID,RAID 算法由 Linux 内核执行和管理,由主机 CPU 提供处理周期,也占用系统带宽和 I/O 总线,如图 1 所示。因争用系统资源,在 CPU 繁忙时,软RAID 的性能会降低许多,这在单处理器系统中尤为严重。 图 1 基于内核管理的软 RAIDLinux 的源码开放性降低了软 RAID 用户受 RAID 软件不够完善而引入 Bug 的困扰的机会,因为用户可自行修补,也可将问题送至开发者或相关团队解决。3.1.1
5、内核支持Linux 内核支持种 RAID 级别:RAID0、RAID1、RAID4、RAID5 和线性模式。对于不支持 RAID 功能的老版本内核,需重新编译。编译之前,无论使用何种方式来配置内核,都应在内核配置文件的 Multiple devices driver support(RAID and LVM)子段中选择。* Multiple devices driver support(RAID and LVM)RAID supportLinear (append) modeRAID-0 (striping) modeRAID-1 (mirroring) modeRAID-4/RAID-5 m
6、odeMultipath I/O supportRAID 选项可以静态编译至内核,也可作为动态装载模块编译至内核。 2.4 内核之后,不再需要以上操作,因 RAID 代码已包含在标准内核中。3.1.2 Linux 软 RAID 实现与管理Linux 中的软 RAID 是在实际的块设备(如 /dev/sdb)之上建立虚拟设备(/dev/md0255) 。至于发到虚拟设备的数据如何在块设备上进行分撒和校验,由 Linux内核的 RAID 模块完成。在虚拟设备之上可创建任何文件系统。Linux 提供两种工具来管理和配置软 RAID:raidtools 和 mdadm2 raidtoolsraidto
7、ols 是 Linux 中传统而经典的软 RAID 管理工具包。使用之前,需先创建配置文件/etc/raidtab,此文件指定了构成软 RAID 的所有信息包括成员设备(/dev/sdb) 、md 文件、RAID 级别、校验算法、chunk 大小等。raidtools 常用命令有:mkraid在块设备之上依照/etc/raidtab 的定义创建 RAID 设备。lsraid检查各个成员设备、诊断问题、恢复丢失的配置文件raidstart/ raidstop启动/停止已创建好的阵列raidhotadd/ raidhotremove在正在运行的 RAID 设备中插入/ 去除一个块设备。用于替换 R
8、AID 中的失效盘。raidreconf重新配置 RAID0 或 RAID5 的某些属性,而不影响阵列工作,数据不丢失。 mdadmmdadm 提供一个方便的、单命令接口来管理 Linux 中的软 RAID。支持但不依赖配置文件,是管理控制软 RAID 的理想选择。Mdadm 的操作模式有:Create创建新阵列。阵列配置信息可来自于配置文件/etc/mdadm.conf,也可通过参数指定。Build创建无 superblock 的旧类型阵列,用于向下兼容。Assemble启动或停止已创建好的阵列Monitor监视阵列的状态,包括设置 email 通知、异常事件处理及共享备用设备等。 /pro
9、c/mdstat通过/proc 文件系统可以对软 RAID 状态进行监视与跟踪。# cat /proc/mdstat查看有关软 RAID 的各种配置信息:RAID 级别、成员设备、md 文件、块大小(chunk size) 、块数、校验算法及工作状态等。3.2 基于主机 I/O 控制器的 RAID即通常所说的硬 RAID,RAID 功能由带有 RAID 固件的专用 I/O 控制器来完成,如图2 所示。将存储相关的操作从主机 CPU 分担出来,由 I/O 控制器上自带的硬件资源如CPU(内含校验计算逻辑 AAU) ,内存,I/O 总线来完成,不仅能实现更为复杂的 RAID组合,对存储性能的提高也
10、是显而易见的。 图 2 基于 I/O 控制器的硬 RAID3.2.1 内核支持对于板卡级的硬 RAID,和 Linux 中的其它硬件一样,首先要安装驱动软件,安装的方式有多种可选: 编译至内核:需驱动源码。配置内核时,确保内核配置文件和内核 Makefile 文件存有该板卡的相关信息。同软 RAID 一样可使用静态编译,也可作为模块编译进内核 作为外挂模块需驱动源码。可不编译内核,使用/lib/modules/$(shell uname -r)/build 编译驱动源码,生成的*.o 或*.ko 文件拷贝至/lib/modules/$(shell uname -r)/kernel/driver
11、/,执行安装命令(modprobe)即可 DKMS 方式厂商不提供源码,将驱动做进 DKMS(Dynamic Kernel Module Support)模式的软件包中,用户使用 DKMS 工具将该软件包展开,板卡驱动便会自动安装至内核中。此方式仅限于标准内核。非标准(如经过较大动作的修改配置和编译)内核有可能因环境不匹配而导致安装失败,严重时会破坏系统文件,使用时应格外小心。 RPM 方式厂商不提供源码,将驱动做进 RPM 模式的软件包中,用户使用 RPM 命令展开该软件包,驱动自动安装。目前为止,最简便快捷的驱动安装方式,和 DKMS 方式相比,出错率低,安全性也更高。3.2.2 硬 RA
12、ID 管理板卡级的硬 RAID 管理一般有三种方式: BIOS和主板一样,大多数 RAID 板卡都带有 BIOS,进入该 BIOS 可对 RAID 进行创建和管理。操作直接,稳定性好,且不依赖 Linux。 管理软件管理 RAID 的图形界面软件,运行在 Linux 系统之上的用户空间。依赖 Linux 内核、GUI 工具包和库,不同版本还可能会不兼容,但界面友好,操作方便。 CLI管理 RAID 的命令行接口,也运行在 Linux 系统之上的用户空间。比管理软件稳定,可将所需的命令制成脚本文件,以备重启系统时自动运行。 API对于需要在 Linux 系统中对 RAID 板卡进行二次开发的用户
13、,有些厂商可提供控制管理板卡的 Linux 版 API(应用程序接口) 。硬 RAID 的建立和初始化工作完成后,在 Linux 中以块设备/dev/sdb 的形式存在,直接对该块设备/dev/sdb 进行分区(fdisk) 、创建文件系统(mkfs)和挂载(mount ) ,便可对该阵列进行正常的读写访问。也可在多个这样的设备之上构建更高层次的软 RAID,或使用其它存储管理工具如逻辑卷管理 LVM。3.3 基于磁盘子系统的 RAID。RAID 设备的软、硬件全部集成在 outboard(和主机物理分离)机箱中,能够提供最广泛的 RAID 特征和功能。机箱和主机系统通过标准协议(如 SCSI
14、、FC、SAS )的 HBA 相连,以提供读写操作的数据通路,维护和管理通道可能是串口、网口或其他通信协议。Linux 内核中只需安装 HBA 的驱动,无需对阵列提供额外的支持。该设备可配置性好,模块化程度高,多数模块支持热交换,跟踪与监视设备状态的实时性强,异常处理及时,故障定位准确,能提供与主机的快速无缝连接。缺点是价格昂贵,无论初期投资或运营维护成本在各种 RAID 设备中都是最高的。如图 3 所示图 3 Outboard RAID 子系统4 在 Linux 下提升 RAID 性能虽然 RAID 本身已具备相当的性能优势,但在 Linux 系统中仍能通过多种途径进一步提高数据吞吐量。4.
15、1 缓存策略在改善 I/O 性能的标准技术中,缓存是很重要的一个。其基本思想是:把数据从一个访问速度慢的地点拷贝到另一个访问速度快的地点 1。由于磁盘操作包含机械动作(如寻找磁道) ,反应时延总是不尽人意,缓存的作用是将数据保存在相对较快的内存中,使得系统直接访问磁盘的概率大大降低,从而提高数据的通过量。4.1.1 几种基本的缓存算法 3缓存的读算法:使用智能方法对系统最近需要的数据作出预言,并预先放置在缓存中,基本算法有: 最近最少使用(LRU)最近读过的数据不久将再次被使用。选择要丢弃的应是最近很少使用的数据。在应用拥有“热区”并连续访问同样数据的情况下,该算法的效率最高,故适用于数据库的
16、事物处理应用。 预先读缓存(read ahead)已经读入的数据将不再需要,而依次需要的是即将顺序读入的几个数据块,适用于顺序访问数据的应用。缓存的写算法:需要被写至设备的数据,只写入缓存便向系统返回操作已完成标志,而不是必须等待磁盘的存储确认,这样可节省大量时间,让系统能够处理更多的 I/O 操作。缓存中的写数据会在系统较为空闲的时候刷新至磁盘。基于这样的思想,提供两种算法: 通写(write through)数据写入缓存后,立即写入磁盘。是最保守、最安全的方案,性能也最低。 回写(write back)数据写入缓存后,不立即写入磁盘,而是在系统较为空闲时将几个 I/O 操作集 中起来,一次性地写入磁盘,以给应用提供更快的响应。在使性能得到极大改善的同时,引入了数据不一致的安全隐患。当非正常断电时,缓存中的数据未及时刷新到盘,数据将面临丢失的危险,需要应急电源等措施来解决数据一致性问题。4.1.2 板