DRBD:(Distributed Replicated Block Device) 分布式复制块设备
是一个用软件实现的、无共享的、服务器之间镜像块设备内容的存储复制解决方案。
主要特点:
1.Distributed Replicated Block Device
2.A software based, shared nothing, replicated storage solution mirroring the content of block devices (hard disks, partitions, logical volumes etc.) between servers.
3.DRBD's core functionality is implemented by way of a Linux kernel module
4.DRBD mirrors data
(1)In real time
(2)Transparently
(3)Synchronously or asynchronously
如下图为DRBD的工作模式:
如图所示:DRBD有主从之分
primary:(可执行读、写操作) secondary:(文件系统不能挂载)
DRBD它能够将位于两个主机的硬盘或分区做成镜像设备,客户端应用程序像我们主服务器发起写请求,经过DRBD模块的时候,DRBD模块会将请求一分为二,将请求发往本地硬盘一份,然后通过TCP/IP协议将数据通过网卡传递给secondary一份。
如果我们先读写数据,首先发起系统调用(File System),文件系统在实现文件读写的时候,为了加快读取速度,内核会在内存空间中划分出一段空间,用于Buffer和Cache,Buffer和Cache主要用来缓存源数据和数据等;所以在读写数据时,实在Buffer和Cache中完成的,而且在Buffer和Cache中完成读写之后不会立即同步到磁盘上,而由Buffer和Cache往硬盘中写数据时,DRBD会把数据分流成两份,一份写到本地硬盘中,一份会经TCP/IP协议经过网卡传送到另一个节点上。
另外primary在与secondary传送数据时有三种协议:
1、A模型(异步模型):刚刚交由TCP/IP协议站,刚刚往外发送时,就通告主机结束。
2、B模型(半同步模型):数据报文发送到对方节点的TCP/IP协议站,就通告系统已经完成。
3、C模型(同步模型):数据报文发到对方主机并且存储完成以后,才返回主节点同步完成。
DRBD Resources
Include:
Resource name(资源名称)
可以是除了空白字符外的任意ACSII码字符;
DRBD device(资源设备)
双方节点上,此DRBD设备的设备文件,一般为/dev/drbdN,其主设备号IANA(147);
Disk configuration(磁盘设备)
在双方节点上,各自提供的存储设备;
Network configuration(网络配置)
双方数据同步时所使用的网络属性;
DRBD administration tools(管理工具):
drbdadm
The high level administration tool of the DRBD program suite It obtains all DRBD configuration parameters from the configuration file /etc/drbd.conf (/etc/drbd.d/)
drbdsetup
The program that allows users to configure the DRBD module that has been loaded into the run ning kernel It is the low-level tool within the DRBD program suite
drbdmeta
The program which allows users to create, dump, restore, and modify DRBD's meta data
structures
繁杂的概念我不知道我有木有解释清楚,接下来就跟我一起走进DRBD的配置吧!!!
DRBD配置:
DRBD在Linux 2.6.33之前,需要对内核打补丁才能使用。而Red hat 5.8 kernel是2.6.18,所以首先需要给内核打补丁。
节点之间同步时间:
date [ntp server]
配置主机名称,主机名称之间需要使用域名解析
hostname node1.heartbeat.com
使主机名开机以后不会失效:
echo "node1.heartbeat.com" > /etc/sysconfig/network
配置第二个节点主机名称,主机名称之间需要使用域名解析
hostname node2.heartbeat.com
使主机名开机以后不会失效:
echo "node2.heartbeat.com" > /etc/sysconfig/network
使用hosts文件解析对方节点:
172.16.39.5 node1.heartbeat.com
172.16.39.6 node2.heartbeat.com
在第二个节点做相同的配置
使两个节点互信通信:
ssh-keygen -f ~/.ssh/id_rsa -t rsa -P ' '
ssh-copy-id -i .ssh/id_rsa.pub node2.heartbeat.com
在第二个节点做相同的配置
ssh-keygen -f ~/.ssh/id_rsa -t rsa -P ' '
ssh-copy-id -i .ssh/id_rsa.pub node1.heartbeat.com
安装补丁包:
两个节点各自安装补丁包:
rpm -ivh drbd83-8.3.15-2.el5.centos.i386.rpm kmod-drbd83-8.3.15-3.el5.centos.i686.rpm
在两个节点分别划出两个分区:(做DRDB)
DRBD的配置文件:
/etc/drbd.conf
/etc/drbd.d/global.common.conf
/etc/drbd.d/resource.d/* 任何一个文件都是一个资源
copy模板文件至主配置文件下:
cp /usr/share/doc/drbd-8.3.15/drbd.conf /etc/drbd.conf
配置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 1000M;
}
}
定义一个资源/etc/drbd.d/web.res
resource web {
on node1.heartbeat.com {
device /dev/drbd0;
disk /dev/sda5;
address 172.16.100.11:7789;
meta-disk internal;
}
on node2.heartbeat.com {
device /dev/drbd0;
disk /dev/sda5;
address 172.16.100.12:7789;
meta-disk internal;
}
}
以上文件在两个节点上必须相同,因此,可以基于ssh将刚才配置的文件全部同步至另外一个节点。
# scp /etc/drbd.* node2:/etc
初始化资源,在Node1和Node2上分别执行:
# drbdadm create-md web
启动服务,在Node1和Node2上分别执行:
/etc/init.d/drbd start
查看启动状态:
tail -f /proc/drbd
而后再次查看状态,可以发现数据同步过程已经开始:
# drbd-overview
0:web SyncSource Primary/Secondary UpToDate/Inconsistent C r----
[============>.......] sync'ed: 66.2% (172140/505964)K delay_probe: 35
等数据同步完成以后再次查看状态,可以发现节点已经牌实时状态,且节点已经有了主次:
drbd-overview
0:web Connected Primary/Secondary UpToDate/UpToDate C r----
创建文件系统
文件系统的挂载只能在Primary节点进行,因此,也只有在设置了主节点后才能对drbd设备进行格式化:
mke2fs -j -L DRBD /dev/drbd0
mkdir /mnt/drbd
mount /dev/drbd0 /mnt/drbd
切换Primary和Secondary节点
对主Primary/Secondary模型的drbd服务来讲,在某个时刻只能有一个节点为Primary,因此,要切换两个节点的角色,只能在先将原有的Primary节点设置为Secondary后,才能原来的Secondary节点设置为Primary:
Node1:
cp -r /etc/drbd.* /mnt/drbd
umount /mnt/drbd
drbdadm secondary web
查看状态:
drbd-overview
0:web Connected Secondary/Secondary UpToDate/UpToDate C r----
Node2:
drbdadm primary web
drbd-overview
0:web Connected Primary/Secondary UpToDate/UpToDate C r----
mkdir /mnt/drbd
mount /dev/drbd0 /mnt/drbd
使用下面的命令查看在此前在主节点上复制至此设备的文件是否存在:
ls /mnt/drbd
时间原因:到此为止,有错误的地方请大家帮我改正...
谢谢