学海无涯 个人blog lnmps.com 新站
分类: LINUX
2013-11-29 18:15:05
一、DRBD简介及复制架构
drbd(DistributedReplicatedBlockDevice) 是一种基于软件的,无共享的,复制的存储解决方案,在服务器之间的对块设备(硬盘,分区,逻辑卷等)进行镜像备份,drbd工作在内核之中,drbd工作 的位置在文件系统的buffer-cache和磁盘调度器之间,通过tcp/ip发给另一个主机,再由对方的主机通过tcp/ip传递给drbd再存储在 本地磁盘上,类似于RAID-1功能。
drbd的框架图如下:
二、DRBD的模式
1.主/从
primary可读,可写,可挂载
secondary不可挂载
2.双主(需要结合集群文件系统)
三、DRBD之protocol
A:Async,异步,本地磁盘写入完成即表示完成同步
B:semisync,半同步,本地写入+对方tcp/ip收到即表示同步
C:sync,同步,本地写入+对方完全写入磁盘即表示同步
四、实验DRBD主从配置:
1.软件包:
1.用户空间配置包brbd-83-8.3.15-2.el5.ceonts.i386.rpm
2.内核程序包kmod-drbd83-8.3.13-1.el5.centos.i686.rpm
(从2.6.33开始将drbd整合进内核中)
2.主配置文件:
1./etc/drbd.conf##主配置文件,通过include来包含了global_common.conf和*.res
2./etc/drbd.d/global_common.conf
3./etc/drbd.d/*.res
3.以下是配置文件的详细内容:
①/etc/drbd.conf
1
2
3
|
# You can find an example in /usr/share/doc/drbd.../drbd.conf.example
include "drbd.d/global_common.conf";
include "drbd.d/*.res";
|
②/etc/drbd.d/global_common.conf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
|
global {
usage-count no; ##用于开发者统计装机量统计
# minor-count dialog-refresh disable-ip-verification
}
common {
protocol C; ##使用protocol模式
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
}
disk { ##磁盘出现问题,如何处理
on-io-error detach;
# fencing use-bmbv no-disk-barrier no-disk-flushes
# no-disk-drain no-md-flushes max-bio-bvecs
}
net { ##定义网络传输,例如加密等信息
cram-hmac-alg "sha1";
shared-secret "123456";
# sndbuf-size rcvbuf-size timeout connect-int ping-int ping-timeout max-buffers
# max-epoch-size ko-count allow-two-primaries cram-hmac-alg shared-secret
# after-sb-0pri after-sb-1pri after-sb-2pri data-integrity-alg no-tcp-cork
}
syncer { ##同步速率
rate 1000M;
# rate after al-extents use-rle cpu-mask verify-alg csums-alg
}
}
|
③/etc/drbd.d/mydrbd.res
1
2
3
4
5
6
7
8
9
10
11
12
|
resource mydrbd {
##全局统一变量,可以一起写在这里也可以写在每个节点里面
device /dev/drbd0; ##定义drbd的设备号
disk /dev/loop0; ##这里使用的是losetup方式模拟块设备
meta-disk internal; ##元数据保存位置
on node1.redhat.com { #定义节点1的位置和端口
address 192.168.220.100:7789;
}
on node2.redhat.com { #定义节点2的位置和端口
address 192.168.220.101:7789;
}
}
|
4.资源的初始化,挂载使用,主从切换
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
1.初始化资源
# drbdadm create-md mydrbd
2.开启drbd服务
# service drbd start
(两边需要同时开启,不然一方会卡住)
3.查看drbd状态信息
# cat /proc/drbd or drbd-overview
4.设置drbd的primary节点(第一次)
# drbdsetup /dev/drbd0 primary -o or drbdadm -- --overwrite-data-of-peer primary mydrbd
5.格式化挂载(首次挂载使用才需要格式化)
# mke2fs -j /dev/drbd0
mount /dev/drbd0 /path/to/file
6.primary和secondary倒换
# drbdadm secondary mydrbd
# drbdadm primary mydrbd
# mount /dev/drbd /path/to/file
|