OpenStack使用本地文件系统时的一种规划方案,对每一个计算节点来说: 1,硬盘1与硬盘2做一个Raid1,在上面划boot,root, swap分区。 2,硬盘3与硬盘4再做一个Raid1, 将它做为LVM的一个物理分区PP。 当然,究竟做什么级别的Raid需考虑实际硬盘个数情况和应用需求。 用PXE的一些裸机工具自动安装操作时能自动创建Raid,像dell的比如crowbar,具有:BIOS配置,RAID配置,网络搜寻,状态监控,性能数据收集,和报警. crowbar是开源了但不包括RAID配置功能. 一些Raid的理论知识:
Raid0,按块条带,是将数据块按顺序写在多个硬盘上,实际上没有冗余,但写性能好。 Raid1,按块镜像,一个数据块写到一个硬盘的同时也写到另一个硬盘,对读性能可以提升,但对写下降,但冗性好,一块硬盘坏了只需要复制一块硬盘。 Raid0+1, 先内部Raid0,再Raid1一下。 Raid10, 先内部Raid1,再Raid0一下。性能与冗余都还不错 Raid 4,用校验位代替镜像,例如:数据块按Raid0顺序写在前4块硬盘上,若校验位写在第5块硬盘上。出了故障,从所有的盘加校验可根据一定算法恢复数据。 Raid5,在Raid4的基础上,将校验位平均写在所有5块盘上,避免了只写到第5块盘的性能损耗。Raid4和Raid5来说,同时坏两块盘的话,数据均不可恢复。
做Raid0和Raid1,至少2块硬盘,Radi0+1与Radi10至少4块,Raid5至少5块。一般建议8块做Raid组,上限一般不超过16块。如果只是学习,可以将一块硬盘分成多个分区用软raid来做,但只是学习无实际用处。
Linux中的软Raid 软RAID是通过内核识别每一个RAID磁盘设备,RAID直接连接到主板上,通过内核中的md(multiple devices)模块(用户态通地mdadm工具来调用md模块)开实现RAID功能,而硬RAID是通过主板驱动RAID适配器,RAID适配器再连接RAID设备实现的,内核不识别下层的RAID设备阵列,硬RAID的配置是在BIOS中进行。 仅做实验的话,可以将一块硬盘划分为4块分区,如sdb1,sdb2, sdb3, sdb4 ( sudo fdisk -l ),例如创建Raid10模式。 1,首先创建raid1设备,其中-l参数指raid级别,-n是硬盘设备个数。 mdadm -C /dev/md0 -a yes -l 1 -n 2 /dev/{sdb1,sdb2} mdadm -C /dev/md1 -a yes -l 1 -n 2 /dev/{sdb3,sdb4} 应该就可以在上面建文件系统使用了:sudomkfs -t xfs /dev/md0 2, 再次创建Raid0 mdadm -C /dev/md3 -a yes -l 0 -n 2 /dev/{md0,md1} 3, mount /dev/md3 /mnt 后raid10就可以使用了,简单吧。 4, 其他命令: 停止Raid设备,madmin-S /dev/md3 移除硬盘,mdadm–remove /dev/md0 /dev/sdb1 添加硬盘,mdadm– add /dev/md0 /dev/sdb2 查看详细,mdadm-D /dev/md3
LVM 上面说RAID是通过linux内核的md模块在底层管理RAID设备,另外linux中也提供了一个dm的模块(devicemapper,也可参见:http://blog.csdn.net/quqi99/article/details/8560798)。dm模块也能实现RAID的功能,dm模块在应用层为我们提供了一个应用程序的工具我们称为LVM(逻辑卷管理)。LVM在Raid提供的物理卷的基础上再提供逻辑卷功能,这样做快照,热插拨均有好处。当我们在逻辑卷上创建了快照后,某一时刻发生对数据的操作时,在对数据的操作之前必须先将该数据备份到快照卷中,然后再对该数据进行操作,当下一次对该同样的数据进行操作时,不再对该数据就行快照备份(这种机制我们成为写时复制) LVM的概念依次是:PP(物理分区),PV(物理卷),VG(卷组),LV(逻辑卷) 一些命令: 在PP上创建PV, pvcreate /dev/sdb1 ,会生成和PP同名的PV 在PV上创建VG,vgcreatemyvg /dev/sdb1 /dev/sdb2 往VG里添加PV,vgextend myvg /dev/sdb3 从VG中删除PV,vgremove myvg /dev/sdb1 从VG创建LV,lvcreate -L 5G -n mylv myvg (-L指卷的大小,-n逻辑卷的名字) 为LV生成快照,lvcreate-L 5G -n mysnap -s -p r /dev/myvg/mylv (-s说明是快照卷,-p指permission,所以-pr指只读卷),此时对mylv逻辑卷进行写操作,在写之前会先将LV备份到快照mysnap中,然后再在mylv上写,那么mysnap就是以前的内容。下次再写的时候,将不再执行类似操作。
在LV上创建FS,sudo mkfs -t xfs /dev/myvg/mylv LV逻辑扩容,lvextend-L +1G /dev/myvg/mylv, LV物理扩容,resize2fs/dev/myvg/mylv LV减容时,须先umount挂载点,且用e2fsck强制进行文件系统检查
最后,我们恶补一下Linux中Device Mapper模块的理论: Device mapper 在内核中作为一个块设备驱动被注册的,它包含三个重要的对象概念,mapped device、映射表、target device。 Mapped device 是一个逻辑抽象,可以理解成为内核向外提供的逻辑设备; target device 是实际的物理块; 它们之间通过映射表描述的映射关系和 target device 建立映射。下面是device mapper的架构:
在内核中它通过一个一个模块化的 target driver 插件实现对 IO 请求的过滤或者重新定向等工作,当前已经实现的 target driver 插件包括软 raid、软加密、逻辑卷条带、多路径、镜像、快照等, 并且targetdriver是一个树,可以无限迭代下去,是有父子关系的。Device mapper 进一步体现了在 Linux 内核设计中策略和机制分离的原则,将所有与策略相关的工作放到用户空间完成,内核中主要提供完成这些策略所需要的机制。因此整个 device mapper 机制由两部分组成--内核空间的 device mapper 驱动、用户空间的device mapper 库以及它提供的 dmsetup 工具, Device mapper库就是对ioctl、用户空间创建删除device mapper逻辑设备所需必要操作的封装,dmsetup是一个提供给用户直接可用的创建删除device mapper设备的命令行工具。
作者:张华
|