Chinaunix首页 | 论坛 | 博客

  • 博客访问: 898690
  • 博文数量: 226
  • 博客积分: 10077
  • 博客等级: 上将
  • 技术积分: 2708
  • 用 户 组: 普通用户
  • 注册时间: 2008-05-25 14:36
文章分类

全部博文(226)

文章存档

2010年(15)

2009年(82)

2008年(129)

我的朋友

分类: LINUX

2009-12-07 11:15:20

十月 29th, 2009 发表在 本文作者:深夜的蚊子

本文作者:深夜的蚊子
本文链接:
版权所有。转载时请以链接形式注明作者和原始出处及本声明,谢谢

今天蚊子我来说说,同时感谢“系统架构师群”中的sigma,多亏了和他的讨论,让我对drbd的又更深了一步。

DRBD将数据的各种信息块保存在一个专用的区域里,这些包括了

a,DRBD设备的大小
b,产生的标识
c,活动日志
d,快速同步的位图

metadata的存储方式有内部和外部两种方式,使用哪种配置都是在资源配置中定义的

内部meta data

内部metadata存放在同一块硬盘或分区的最后的位置上

优点:metadata和数据是紧密联系在一起的,如果硬盘损坏,metadata同样就没有了,同样在恢复的时候,metadata也会一起被恢复回来
缺点:metadata和数据在同一块硬盘上,对于写操作的吞吐量会带来负面的影响,因为应用程序的写请求会触发metadata的更新,这样写操作就会造成两次额外的磁头读写移动。

外部meta data

外部的metadata存放在和数据磁盘分开的独立的块设备上

优点:对于一些写操作可以对一些潜在的行为提供一些改进
缺点:metadata和数据不是联系在一起的,所以如果数据盘出现故障,在更换新盘的时候就需要认为的干预操作来进行现有node对心硬盘的同步了

如果硬盘上有数据,并且硬盘或者分区不支持扩展,或者现有的文件系统不支持shrinking,那就必须使用外部metadata这种方式了。

可以通过下面的命令来计算metadata需要占用的扇区数

Cs是数据磁盘的扇区数

你可以使用"blockdev --getsz device.”命令查到扇区数,cho $(( $(blockdev --getsize64 device) / 512))这个方法更可信一点,支持块设备大小超过2TB

Ms也是用扇区数描述的,如果要转化成MB,就除以2048

下面的可以近似得到metadata占用的容量,直接用MB表示,而不是扇区数

以上内容基本来自官方文档,下面说说蚊子的理解,先看一张图

 

蚊子要说的是在已有数据的硬盘或分区上做drbd的内容,图中绿,蓝,红三色的部分是原含有数据的分区,其中绿色部分是前1M的内容,用于记录已有 数据分区的分区表,按蚊子前面的文章,此处需要先备份绿色的部分,然后对绿,蓝,红三色的空间进行create-md操作,这时会在蓝色区域的最后部分创 建metadata,也就是红色的部分,这是蚊子继续做的操作是将备份的绿色部分使用dd命令写回drbd0,这时问题也就出现了,绿色部分记录的磁盘大 小是绿蓝红三色总共的大小,而创建drbd的metadata后,drbd认为我可以使用的空间是绿蓝两色的,虽然按蚊子前面的文档mount上可以使 用,但如果磁盘快用完的时候,对于文件系统ext3来说,还有空间,但对于drbd来说已经写不进去了,就会产生潜在的问题。

下面来看看正确的做法。看图

步骤:

1,先dd备份绿色部分
2,根据上面的计算出metadata占用容量
3,使用lvm给分区扩容
4,dd清空分区绿色部分
5,创建metadata
6,使用dd命令在drbd块设备上恢复备份的绿色部分

经过这几步,隐患就消除了,因为绿色部分只包括蓝和绿的总和空间大小

下面来看看在一块新的硬盘或分区上创建drbd块设备的图

这个图相当于是一块新的分区或硬盘,蓝黄就是硬盘或分区的总容量,在创建完metadata以后,实际可用容量就只有蓝色部分了。

这也就是为什么官方文档上说,如果现有设备不支持扩容或文件系统不支持shrinking就只能使用外部metadata的缘故了

阅读(1922) | 评论(0) | 转发(0) |
0

上一篇:LVS集群技术

下一篇:perl语言编程 格式

给主人留下些什么吧!~~