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