介绍DRBD的不错的网文
:
http://blogold.chinaunix.net/u/24866/showart_2549042.html
http://arch.huatai.me/?p=600
一、DRBD原理
二、DRBD的安装与配置
DRBD的安装
DRBD的配置
DRBD分区及其文件系统的创建
三、DRBD的测试
DRBD原理
:
官方网站:http://www.drbd.org/home/what-is-drbd/
网站首页介绍了什么是DRBD,那个图也很好,虽然细节有待于我们去发掘,但大致上说明白了DRBD的工作流程。
结合网上资料,主要是IBM网站和DRBD官网上的文章,谈一下我对DRBD的理解:
DRBD是一个系统,架构分为两个部分:一个是内核模块,用于虚拟一个块设备;另一个是用户空间管理程序,用于和DRBD内核模块通讯,以管理DRBD资源。我们平时所说的DRBD,有时候指的是DRBD系统,但更多时候是指DRBD虚拟块,所以网上很多文章都这样说:“DRBD是个块设备”。若没有特别说明,后文所说的DRBD一律是指DRBD虚拟块。
用户空间管理工具有:
drbd:用来启动和停止drbd的脚本。
drbddisk:用来标记DRBD设备为primary,和挂载文件系统。它设计为用来被Heartbeat使用。
drbdadm:最高层的管理工具,drbd.conf文件就是被该工具所读取。常用工具。
drbdsetup:用于配置已经加载到内核中的drbd模块,底层工具,不常用。
drbdmeta:用于管理和修改drbd的meta数据结构,不常用。
DRBD系统是这样工作的:DRBD块被加载到正常的块设备之上,文件系统之下,在文件系统和磁盘之间形成一个中间层。这样,当用户往文件系统中写入数据时,数据被正式写入磁盘之前会被DRBD系统截获,DRBD系统在捕获到有磁盘写入时,会通知用户空间管理程序把这些数据拷贝一份,写入远程DRBD镜像,然后存入DRBD镜像所映射的磁盘。
DRBD块虽然是虚拟的,但完全可以把它看作一个正常的块设备而进行使用,可以创建一个DRBD分区,可以为它创建文件系统,可以把DRBD分区挂载到文件系统中的某个目录......
在我们往DRBD分区写入数据之前,DRBD系统已经为整个DRBD块做了远程镜像。我们把想要备份的数据写入DRBD分区,DRBD系统就会自动把这些数据写入到自己的远程镜像中。
DRBD系统向虚拟块的镜像中写入数据时,有三种protocol:
A--数据一旦写入磁盘并发送到网络中就认为完成了写入操作
B--收到接收确认就认为完成了写入操作
C--收到写入确认就认为完成了写入操作
很明显,protocol C更加安全一些。这个东西在DRBD的配置文件会用到。
测试环境:
192.168.9.210 drbd-a
192.168.9.53 drbd-b
64位的CentOS 5.6操作系统
主NameNode:drbd-a,192.168.9.210
备用NameNode:drbd-b,192.168.9.53
由DRBD把两台NameNode虚拟成一台,主机名为DRBD,IP为192.168.9.200,由这台虚拟主机对外提供服务。平时虚拟主机指向的是drbd-a,一旦它出错,虚拟主机切换成指向drbd-b。服务器状态检测,以及切换过程,这两项功能由Pacemaker来实现。
Hadoop所需要做的事情,只是把NameNode和JobTracker的访问地址设定成那个虚拟IP,然后把hadoop.tmp.dir、dfs.name.dir参数设定的目录指向到DRBD分区,这两个参数存储着NameNode管理集群所需要的信息,所以需要镜像到从NameNode上。
一、hosts表及SSH无密码登陆配置:略
二、drbd安装配置:
工作要点(注意事项):
a)所有节点机器的底层分区使用了LVM,DRBD分区建在LV卷上,而DRBD分区使用xfs文件系统,结构如下:
XFS
|
DRBD分区
|
LV卷
|
LVM系统
|
正常磁盘
b)根据上面的结构示例,在主节点机器上(hdp0)准备一个空白LV分区,不要创建文件系统,而是要使用drbd的相关命令在它上面创建DRBD分区,最后才在DRBD分区上创建文件系统
c)在备用节点机器上(drbd-b)做相同动作,注意:lv卷的路径和大小要和主节点机器保持一致。据说,大小可以不一致,最好是备用的节点比主机点的容量大一些。
d)为DRBD创建文件系统时,只需要为主节点机器上的DRBD创建文件系统,所有备用节点上的DRBD的文件系统,都是通过同步来完成的
e)切换drbd节点时,必须首先卸载原节点上的drbd分区,并降级该节点的角色,然后才能在新节点上挂载分区并提升节点角色
f)主、备节点机器的用户名最好一致,这点一般不会成为问题,因为hadoop也是如此要求的
安装配置:
在主节点hdp0上:
1、drbd版本的选择:drbd官方网站建议下载与内核版本相对应的drbd版本,网站也给出几大Linux分发的相应版本,参考:
http://www.drbd.org/download/mainline/
,以及
http://www.drbd.org/download/packages/
drbd版本与rpm包的对应关系为:
8.0——drbd
8.2——drbd82
8.3——drbd83
我这里选择drbd 8.3的版本。另外,drbd的内核模块已经写入linux kernel 2.6.33及其以后的内核版本中,若Linux内核版本高于2.6.33,只需要安装用户管理程序即可,否则还要安装drbd内核模块,在安装drbd内核模块时要注意和用户管理程序的版本保持一致。
2、下载,安装drbd及其内核模块:
rpm -ivh drbd83-8.3.8-1.el5.centos.x86_64.rpm
rpm -ivh kmod-drbd83-8.3.8-1.el5.centos.x86_64.rpm
安装过程就么简单!但要注意两台节点都要安装。(似乎yum安装更加简单一些?!)
确认drbd内核模块是否加载成功:
modprobe drbd
lsmod |grep drbd
3、配置drbd
配置文件语法及详细选项,参考:
http://www.drbd.org/users-guide-emb/re-drbdconf.html,也可以参考我个人翻译的文档:
http://share.blog.51cto.com/278008/626653
cp /usr/share/doc/drbd83-8.3.8/drbd.conf /etc/drbd.conf
修改/etc/drbd.d/namenode.res文件,添加如下内容:
- resource namenode {
- meta-disk internal;
- device /dev/drbd0; #device指定的参数最后必须有一个数字,用于global的minor-count,否则会报错。device指定drbd应用层设备。
- disk /dev/VolGroup00/DRBD; #所有语句末尾必须有分号。disk指定存储数据的底层设备。
- on drbd-a { #注意:drbd配置文件中,机器名大小写敏感!
- address 192.168.9.210:9876;
- }
- on drbd-b {
- address 192.168.9.53:9876;
- }
- }
修改/etc/drbd.d/global_common.conf,修改如下:
global { usage-count no; # minor-count dialog-refresh disable-ip-verification } common { protocol C; handlers { pri-on-incon-degr "/usr/lib/drbd/notify-pri-on-incon-degr.sh; /usr/lib/drbd/notify-emergency-reboot.sh; echo b > /proc/sysrq-trigger ; reboot -f"; pri-lost-after-sb "/usr/lib/drbd/notify-pri-lost-after-sb.sh; /usr/lib/drbd/notify-emergency-reboot.sh; echo b > /proc/sysrq-trigger ; reboot -f"; local-io-error "/usr/lib/drbd/notify-io-error.sh; /usr/lib/drbd/notify-emergency-shutdown.sh; echo o > /proc/sysrq-trigger ; halt -f"; # fence-peer "/usr/lib/drbd/crm-fence-peer.sh"; # split-brain "/usr/lib/drbd/notify-split-brain.sh root"; # out-of-sync "/usr/lib/drbd/notify-out-of-sync.sh root"; # before-resync-target "/usr/lib/drbd/snapshot-resync-target-lvm.sh -p 15 -- -c 16k"; # after-resync-target /usr/lib/drbd/unsnapshot-resync-target-lvm.sh; } startup { # wfc-timeout degr-wfc-timeout outdated-wfc-timeout wait-after-sb wfc-timeout 15; degr-wfc-timeout 15; outdated-wfc-timeout 15; } disk { on-io-error detach; fencing resource-and-stonith; } net { timeout 60; connect-int 15; ping-int 15; ping-timeout 50; max-buffers 8192; ko-count 100; cram-hmac-alg sha1; shared-secret "123456"; } syncer { # rate after al-extents use-rle cpu-mask verify-alg csums-alg rate 10M; al-extents 512; #verify-alg sha1; csums-alg sha1; } }
4、安装xfs所需软件:
yum install kmod-xfs xfsprogs xfsprogs-devel xfsdump
5、准备空白分区:创建空白lv卷,大小为10G,名称为DRBD(两个节点都要做!):
lvm lvcreate -L 10G -n DRBD VolGroup00
6、在LV空白分区上创建drbd分区(两个节点都要做!):
drbdadm create-md namenode #注:参数namenode为配置文件中的资源的名称
7、启动drbd,设置主节点,并查看drbd状态:
启动drbd(即启用drbd分区):/etc/rc.d/init.d/drbd start
设定主节点:首次设定primary时,
并不是在某个节点上使用命令drbdadm primary resourename,而是drbdsetup /dev/drdb0 primary -o,或drbdadm --overwrite-data-of-peer primary resourcename
查看drbd运行状态:cat /proc/drbd,或service drbd status,应该可以看到节点的角色,也可以看到两个节点之间正在同步数据,如下图:
DRBD的各种状态参数的解释,参考:http://www.drbd.org/users-guide-emb/ch-admin.html#s-proc-drbd
注意:
1)启动drbd时,两个节点都要手动进行启动
2)刚开始可能有点转不过弯来,因为一般都是先创建文件系统,然后再启动服务。但这里,drbd是一个块设备,启动drbd服务实际上是在启用drbd块设备
3)只有在启用了drbd块设备,并设置了primary节点以后,才能创建并挂载文件系统!
8、为drbd分区创建文件系统:
不必等数据同步完成,就可以在DRBD分区(注:不是底层设备分区)上创建xfs文件系统:mkfs.xfs -L drbd /dev/drbd0 #创建xfs分区,并指定标签为drbd
9、使用DRBD分区
跟使用普通的硬盘分区一样,创建挂载点,挂载分区,最好写入/etc/fstab:
mkdir /data
mount /dev/drbd0 /data
注:/dev/drbd0分区只能在primary节点使用。
10、测试drbd系统是否工作正常:
在主节点drbd-a上:echo “$(date “+%F %T”) hello” >/data/test.txt
卸载drbd设备:umount /data
节点降级:drbdadm secondary namenode
然后,在备用节点drbd-b上:drbdadm primary namenode
挂载drbd设备:mount /dev/drbd0 /data
在drbd-b节点上看到了节点drbd-a上创建的test.txt文件!查看drbd状态,可以看到节点的角色已经发生了变化:
注:这个切换过程,在实际生产环境中,可以由heartbeat或pacemaker来自动完成。
在备用节点drbd-b上的工作:
1、安装drbd:略
2、配置drbd:从drbd-a节点scp过来,不需要配置
3、安装xfs所需软件:略
4、准备空白分区(lv卷):略
注:由于drbd-b的VG名称与drbd-a不同,需要改名:lvm vgrename lvm VolGroup00。但如果在resource配置文件中,分别为两个节点配置disk和device选项,就无需如此了。
5、创建DRBD分区:略
6、启动drbd系统:手动启动
7、为DRBD分区创建xfs文件系统:不需要手动操作!
本文转自 li_qinshan 51CTO博客,原文链接:http://blog.51cto.com/share/626668