您的位置:首页 > 其它

磁盘阵列配置与说明

2012-12-31 13:37 218 查看
分区:

第一个分区都是/boot

尽可能把经常读写的数据放在越靠前的分区

选择适当的文件系统:

ext4 --> ext3

rhel5 : 安装e4fsprogs软件包 ---> mkfs.ext4

块大小

# mkfs.ext4 -b 4096 /dev/sda8

块越大,适合存放大文件,容易浪费空间

块越小,适合存放小文件,节省空间

挂载:

noatime <---不会去更新文件的访问时间。

对于一些访问时间并不敏感的应用,干脆就关闭。

# mount -o noatime /dev/sda8 /web

noacl <---取消访问控制列表

IO算法

内核如何执行IO指令才高效

查看当某个块设备采用哪种IO算法执行IO指令

# cat /sys/block/sda/queue/scheduler

noop anticipatory deadline [cfq]

anticipatory 预判断算法。适合读写速度特别慢的设备。每执行一个IO指令后,都会浪费2ms时间去思考下一个IO可能会读取哪里的数据,先读取了,加载到内存。

deadline 尽可能在更短的时间内完成更多的IO指令。可能会出现不公平的现象。

cfq 默认采用的算法。完全公平算。

noop 啥算法都没有,哪个程序的IO指令先产生就先执行的。

调整前,使用vmstat,iostat记录硬盘的读写性能数据。修改IO算法,

采集几天的性能数据,作对比,才能判断出哪种算法具体的应用。

如何调整?

临时调整

# echo "deadline" > /sys/block/sda/queue/scheduler

# cat /sys/block/sda/queue/scheduler

noop anticipatory [deadline] cfq

开机就生效:

# vim grub.conf

....

....

kernel /vmlinuz-2.6.32-220.el6.x86_64 ro ... elevator=deadline

磁盘阵列:

raid1 ,raid0 , raid5 ,raid1+0 , raid0+1

把多个块设备按照某种算法组合起来,读写数据的时候,是多个块设备一起工作。不同的组合有不同的功能。

raid0

至少两个块设备。

读写效率提升N倍(N就是代表硬盘的个数)

缺点:坏掉任意一个设备,整个组合就不能使用,数据就会丢失。

raid1

一般需要两个块设备,但也至少两个。

读写效率并没有提供,有些芯片能够提高读效率

提供数据的访问冗余。

raid5

至少3个设备,设备越多,数据读写性能越好。

有数据冗余的功能。

只允许坏掉任意一个设备。

支持热插拔

raid10 先用四个设备分别做两组raid1设备,然后把两个raid1设备再做raid0

做实验的时候,仅仅使用不同的分区来模拟不同的块设备。事实上完全实现不了任何的调优的功能。

要求:硬盘的容量、型号应该是一致。

分3-4个容量一样的分区,模拟原始设备。

类型可以修改为fd

例子:分别实现raid0和raid1

创建一个raid0设备组合md0,由sda7和sda8来完成,这个过程叫组装:

# mdadm --create /dev/md0 --level=0 --raid-devices=2 /dev/sda7 /dev/sda8

# cat /proc/mdstat

Personalities : [raid0]

md0 : active raid0 sda8[1] sda7[0]

4206592 blocks super 1.2 512k chunks

建议把该软raid设备当成分区来处理,直接就对它进行格式化使用

# mkfs.ext4 /dev/md0

# mount /dev/md0 /mnt/raid0

创建一个raid1设备组合md1,由sda9和sda10来完成,这个过程叫组装:

# mdadm --create /dev/md1 --level=1 --raid-devices=2 /dev/sda{9,10}

查看创建的过程:

# watch "cat /proc/mdstat"

Every 2.0s: cat /proc/mdstat Sat Dec 8 15:05:13 2012

Personalities : [raid0] [raid1]

md1 : active raid1 sda10[1] sda9[0]

2103447 blocks super 1.2 [2/2] [UU]

[========>............] resync = 42.4% (894400/2103447) finish=0

.6min speed=29813K/sec

验证:raid0和raid1的原理

# mount -o remount,sync /dev/md0

一个终端在不断的监控

# iostat -m -d sda7 sda8 2

...

Device: tps MB_read/s MB_wrtn/s MB_read MB_wrtn

sda7 37.00 0.00 10.40 0 20

sda8 46.00 0.00 10.50 0 21

...

另外一个终端测试

# dd if=/dev/zero of=/mnt/raid0/500M bs=1M count=512

数据冗余验证:

取消挂载

破坏一个分区的数据

# dd if=/dev/zero of=/dev/sda8

再也无法挂载了。

无法挂载

# mount /dev/md0 /mnt/raid0

mount: you must specify the filesystem type

# mdadm /dev/md1 --fail /dev/sda9

mdadm: set /dev/sda9 faulty in /dev/md1 <---把md1组合中的sda9设定为故障设备。

# dd if=/dev/zero of=/dev/sda9 <---才去破坏数据

# cat /proc/mdstat

Personalities : [raid0] [raid1]

md1 : active raid1 sda9[0](F) sda10[1] <---软件raid驱动就认为sda9是失效,不以它为标准

2103447 blocks super 1.2 [2/1] [_U]

vim /etc/mdadm.conf

mdadm -detail --scan >>/etc/mdadm.conf

DEVICE /dev/sda7 /dev/sda8 /dev/sda9 /dev/sda10

相关的管理命令:

把组合的组装的信息保存到配置文件中,便于下次自动的重新组装。

# vim /etc/mdadm.conf

DEVICE /dev/sda7 /dev/sda8 /dev/sda9 /dev/sda10

# mdadm --detail --scan >> /etc/mdadm.conf

最后配置文件应该是类似这样的:

# cat /etc/mdadm.conf

DEVICE /dev/sda7 /dev/sda8 /dev/sda9 /dev/sda10

ARRAY /dev/md0 metadata=1.2 name=www.upl.com:0 UUID=de9a3204:1f2dfd23:618d96fa:f5bf6639

ARRAY /dev/md1 metadata=1.2 name=www.upl.com:1 UUID=e668730e:7c05436e:1217fe71:033499db

停止组合

# umount /dev/md0

# umount /dev/md1

# mdadm --stop /dev/md0

mdadm: stopped /dev/md0

# mdadm --stop /dev/md1

mdadm: stopped /dev/md1

# cat /proc/mdstat

Personalities : [raid0] [raid1]

unused devices: <none>

# mdadm -As /dev/md0 《--如果mdadm.conf存在md0的组装信息,就能自动的组装

mdadm: /dev/md0 has been started with 2 drives.

# mdadm -As /dev/md1

如果当初的组装信息并没有保存在/etc/mdadm.conf配置文件中,那该如何重新组装:

方法1:重启,操作系统帮我们自动识别并且组装

方法2:手工用命令识别,然后组装。

# mdadm -E /dev/sda7

/dev/sda7:

Magic : a92b4efc

Version : 1.2

Feature Map : 0x0

Array UUID : de9a3204:1f2dfd23:618d96fa:f5bf6639 《---

Name : www.upl.com:0 (local to host
www.upl.com)

Creation Time : Sat Dec 8 15:00:44 2012

Raid Level : raid0 《---

Raid Devices : 2

....

# mdadm -E /dev/sda8

/dev/sda8:

Magic : a92b4efc

Version : 1.2

Feature Map : 0x0

Array UUID : de9a3204:1f2dfd23:618d96fa:f5bf6639 <---

Name : www.upl.com:0 (local to host
www.upl.com)

Creation Time : Sat Dec 8 15:00:44 2012

Raid Level : raid0

Raid Devices : 2

查找本机所有的块设备,主要他们曾经组装过一个uuid="xxxx",就会把他们找到,重新组装成md0

# mdadm -A --uuid="de9a3204:1f2dfd23:618d96fa:f5bf6639" /dev/md0

mdadm: /dev/md0 has been started with 2 drives.

之后把这些信息按照上面教的方法保存到配置文件

例子: 创建raid5设备

把原来的块设备上所有旧的组装信息都删除掉:

# mdadm -S /dev/md0

# mdadm -S /dev/md1

# mdadm --zero-superblock /dev/sda{7,8,9,10}

mdadm --zero-superblock /dev/sda{7,8,9,10}

再去创建raid5设备

mdadm --create /dev/md0 --level=5 --raid-devices=3 /dev/sda{7,8,9} --spare-devices=1 /dev/sda10

# mdadm --create /dev/md0 --level=5 --raid-devices=3 /dev/sda{7,8,9} --spare-devices=1 /dev/sda10

查看动态创建的过程:

# watch "cat /proc/mdstat"

Every 2.0s: cat /proc/mdstat Sat Dec 8 16:21:15 2012

Personalities : [raid0] [raid1] [raid6] [raid5] [raid4]

md0 : active raid5 sda9[4] sda10[3](S) sda8[1] sda7[0]

4206592 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/2] [

UU_]

[==>..................] recovery = 11.0% (232780/2103296) finish

=1.7min speed=17906K/sec

unused devices: <none>

创建完毕:

# cat /proc/mdstat

Personalities : [raid0] [raid1] [raid6] [raid5] [raid4]

md0 : active raid5 sda9[4] sda10[3](S) sda8[1] sda7[0]

4206592 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/3] [UUU]

格式化,挂载,测试

# mkfs.ext4 /dev/md0

# mount /dev/md0 /mnt/raid5

思考:如何验证raid5的原理?

# mdadm /dev/md0 --fail /dev/sda9 <---通过命令告诉raid驱动,sda9已经被损坏了

mdadm: set /dev/sda9 faulty in /dev/md0

# cat /proc/mdstat <---后台在自动使用sda10后备设备自动恢复。

Personalities : [raid0] [raid1] [raid6] [raid5] [raid4]

md0 : active raid5 sda9[4](F) sda10[3] sda8[1] sda7[0]

4206592 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/2] [UU_]

[>....................] recovery = 2.4% (50964/2103296) finish=1.3min speed=25482K/sec

unused devices: <none>

在算的过程中,raid组合继续可以使用。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: