DRBD:Distribution Replicated Block Device(分布式的复制块设备)
在linux2.6.33之后的系统,DRBD则直接做进了内核。我的实验所用的内核是2.6.18的,所以自身没有drbd的模块。只要我们将drbd的内核模块的补丁装上就可以使用了,不过drbd也有两个程序,一个工作在内核中,一个工作在用户空间。因此我们还需要安装用户空间的程序。
(一)DRBD的工作原理:
所有存储到本地磁盘对应的磁盘设备上的文件,都经过了DRBD,于是DRBD就将数据复制一份,通过tcp/ip网络打包封装,然后通过本地网卡传送给另外一个节点。到达另一个节点网卡后,经过拆包解封以后,送给tcp/ip协议栈,并转交给此节点的DRBD,DRBD将数据存放到磁盘上。
注意:数据在右节点传递时,并没有进入用户空间。
(二)DRBD的基础概念:
1)资源:
资源的名字:用于标识一个独立的DRBD架构,每一个DRBD要明确定义在一个资源上。靠资 源名来标识,资源名只能用纯粹的ASCII码来表示。
DRBD设备:每个DRBD设备应在各自的节点上。对应的设备文件是什么?主设备号:147
次设备号从0开始。 设备名:/dev/drbdn.
磁盘相关的配置信息:定义创建DRBD设备需要用到哪个节点的哪个分区,以及定义有关 DRBD的元数据信息的存放位置
网络相关的配置信息:定义是否认证
2)资源角色:Primary or Secondary
DRBD只使用双节点。primary,唯一标识读写操作,可以格式化,可以挂载 secondary,不允许本地用户读写操作。
3)DRDB 模型
单主节点(主从模型):任何资源,在任何时刻,只能被主节点读写,文件系统可以是: ext3,ext4,xfs
双主节点(主主模型):任何用户,在任何时刻,可以通过任意节点对DRBD的读写操作,但是 双主节点模型,必须依靠集群文件系统来实现 可以通过GFS或ocfs2
来实现。
4)复制模型
protocol A 异步复制,只要主节点传递完成,就认为完成。
protocol B 半同步复制,只要主节点传递完成了,并且从节点传递到内存中了
protocol C 完全同步复制,本地存储到磁盘上,并且远程也传递到磁盘上了。
-------------------------------------------------------------------------------------------
实验环境:有两个节点,分别为node1.hanlenry.com和node2.hanlenry.com。对应的ip分别为192.168.0.111和192.168.0.112。node1和node2两个节点上各提供了一个大小相同的分区作为drbd设备;
我们这里为在两个节点上均为/dev/sda5,大小为5G;
1.创建分区
node1和node2:
#fdisk /dev/sda
2.配置主机名,ip,添加地址解析条目
node1和node2:
修改ip我在这里就不在演示了。
修改主机名,修改为相应的主机名
#vim /etc/sysconfig/network
修改/etc/hosts文件
#vim /etc/hosts
192.168.0.111 node1.hanlenry.com
192.168.0.112 node2.hanlenry.com
3.安装drbd
所需软件包:drbd83-8.3.8-1.el5.centos.i386.rpm kmod-drbd83-8.3.8-1.el5.centos.i686.rpm
node1和node2上:
# yum -y --nogpgcheck localinstall drbd83-8.3.8-1.el5.centos.i386.rpm
# yum -y --nogpgcheck localinstall kmod-drbd83-8.3.8-1.el5.centos.i686.rpm
node1:
#cd /usr/share/doc/drbd83-8.3.8
#cp drbd.conf /etc/
#cd /etc/drbd.d
#cp global-common.conf global-common.conf.bak
1)修改配置文件:
- #vim 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 120;
-
degr-wfc-timeout 120;
-
}
-
disk {
-
on-io-error detach;
-
fencing resource-only;
-
}
-
net {
-
cram-hmac-alg "sha1";
-
shared-secret "mydrbdlab";
-
}
-
syncer {
-
rate 100M;
-
}
- }
2)定义一个资源web.res
#vim web.res
- vim web.res
-
resource web {
-
on node1.hanlenry.com
-
device /dev/drbd0;
-
disk /dev/sda5;
-
address 192.16.0.111:7789
-
meta-disk internal;
-
}
-
on node2.hanlenry.com
-
device /dev/drbd0;
-
disk /dev/sda5;
-
address 192.16.0.112:7789
-
meta-disk internal;
- }
把配置信息拷贝一份到node2节点上。
#scp -r /etc/drbd.conf /etc/drbd.d/ node2:/etc
4.创建drbd
在node1和node2上:
1)初始化资源
#drbdadm create-md web
2)启动服务
#service drbd start
3)查看启动状态
#cat /proc/drbd
也可以使用drbd-overview命令来查看:
#drbd-overview
5.从上面的信息中可以看出此时两个节点均处于Secondary状态。于是,我们接下来需要将其中一个节点设置为Primary。把某一个节点设置为主节点,只能在一个节点上操作。只有第一次时才执行下列操作。
#brdbadm -- --overwrite-data-of-peer primary web
使用命令drbd-overview 查看,等到复制完成后,就可以格式化,挂载了。
6.创建文件系统
#mkfs -t ext3 -L DRBDWEB /dev/drbd0
#mkdir /web
#mount /dev/drbd0 /web
创建一个目录:
#cd /web
#ls
#mkdir hanlenry
此时node2上也应该有hanlenry目录。
查看当前节点是什么角色
#drbdadm role web
7.更换主从
注意:更换主从时,要先把主的设置为从的,在把从的设置为主的。
在node1上
先卸载:
#umount /web
把主的设置为从的。
#drbdadm secondary web
查看节点状态
#drbd-overview
在node2上
#mkdir /web
#drbdadm primary web
#mount /dev/drbd0 /web
查看目录下是否有hanlenry目录
#cd /web
#ls