分享

OpenStack -- 本地文件系统规划,Raid与LVM

sstutu 发表于 2014-1-16 01:27:23 [显示全部楼层] 只看大图 回帖奖励 阅读模式 关闭右栏 0 6184

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的架构:

20130727171851656.jpg

    在内核中它通过一个一个模块化的 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设备的命令行工具




作者:张华


欢迎加入about云群425860289432264021 ,云计算爱好者群,关注about云腾讯认证空间

没找到任何评论,期待你打破沉寂

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条