DRBD
DRBD是一种块设备,属于DAS,可以被应用在高可用(HA)中,类似于raid 1的镜像功能,当写入数据时,数据会被工作在内核中DRBD模块通过网络发送到网络中的另一台主机。常工作于主备模式,数据实时同步,当主节点出现故障,备节点的可切换成主节点立马恢复工作。
DRBD工作模型
DRBD的工作特性:
- 实时同步
- 对用户透明
- 可以实现同步和异步同步
数据同步存在三种模型:
protocol [A|B|C]:
- A: Async 异步,相当于同步数据发送到主节点的tcp/ip协议栈就返回
- B: Semi-Sync 半同步,相当于同步数据发送到备节点的tcp/ip协议栈返回
- C: Sync 同步,将同步数据写入备节点磁盘才返回
工作类型:
主要工作在master/slave的模型,master工作的情况下,备节点不得挂载读写,否则文件系统奔溃。
dual master,双主模式,只有工作在集群文件系统的时候才可以使用,需要集群文件锁的信息层的支持。
安装DRBD
DRBD默认内核没有,我们需要第三方的加载内核模块支持:
1 | centos 6 |
2 | rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org |
3 | rpm -Uvh http://www.elrepo.org/elrepo-release-6-6.el6.elrepo.noarch.rpm |
4 | yum install -y kmod-drbd84 drbd84-utils |
5 | |
6 | centos 7 |
7 | rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org |
8 | rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm |
9 | yum install -y kmod-drbd84 drbd84-utils |
配置DRBD
配置文件:
1 | /etc/drbd.conf |
2 | /etc/drbd.d/global_common.conf: 提供全局配置,及多个drbd设备相同的配置 |
3 | /etc/drbd.d/*.res: 资源定义 |
4 | |
5 | global: 全局属性,定义drbd自己的工作特性 |
6 | common: 通用特性,定义多组drbd设备的通用特性 |
7 | *。res: 资源特有特性 |
DRB配置实例
node1 10.211.55.48
node2 10.211.55.49
准备工作:
- 时间同步
- 主机名于hostname相同
- /etc/hosts解析主机名
node1
1
~]#cat /etc/drbd.conf
2
include "drbd.d/global_common.conf";
3
include "drbd.d/*.res";
4
~]# cat /etc/drbd.d/global_common.conf
5
global {
6
usage-count no;
7
}
8
common {
9
disk { on-io-error detach; #io出错的磁盘,摘掉
10
}
11
net { cram-hmac-alg "sha1"; #加密算法
12
shared-secret "mydrbdlab"; #加密密钥
13
protocol C; #工作模型
14
}
15
syncer {
16
rate 100M; #同步速率
17
}
18
}
19
~]# cat /etc/drbd.d/mystore.res
20
resource mystore {
21
device /dev/drbd0;
22
disk /dev/sdb;
23
meta-disk internal;
24
on node1 {
25
address 10.211.55.48:7789;
26
}
27
on node2 {
28
address 10.211.55.49:7789;
29
}
30
31
}
32
~]# scp /etc/drbd.d/{mystore.res,global_common.conf} node2:/etc/drbd.d
33
初始化资源
34
~]# drbdadm create-md mystore;ssh node2 'drbdadm create-md mystore'
35
启动服务
36
~]# service drbd start;ssh node2 "service drbd start"
37
~]# cat /proc/drbd
38
version: 8.4.9-1 (api:1/proto:86-101)
39
GIT-hash: 9976da086367a2476503ef7f6b13d4567327a280 build by mockbuild@Build64R6, 2016-12-13 18:38:15
40
0: cs:Connected ro:Secondary/Secondary ds:Inconsistent/Inconsistent C r-----
41
ns:0 nr:0 dw:0 dr:0 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:10485404
42
~]# drbd-overview
43
0:mystore Connected Secondary/Secondary Inconsistent/Inconsistent C r----
44
两个都是备节点,切换下成主节点
45
在要设置为Primary的节点上可以执行如下命令的一个:
46
(1) ~]# drbdsetup /dev/drbd0 primary –o
47
(2) ~]# drbdadm -- --overwrite-data-of-peer primary mystore
48
(3) ~]# drbdadm primary --force mystore
49
50
设有主备节点后,开始位对齐:
51
~]# cat /proc/drbd
52
version: 8.4.9-1 (api:1/proto:86-101)
53
GIT-hash: 9976da086367a2476503ef7f6b13d4567327a280 build by mockbuild@Build64R6, 2016-12-13 18:38:15
54
0: cs:SyncSource ro:Primary/Secondary ds:UpToDate/Inconsistent C r-----
55
ns:1228800 nr:0 dw:0 dr:1229464 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:9256604
56
[=>..................] sync'ed: 11.8% (9036/10236)M
57
finish: 0:03:51 speed: 39,936 (39,636) K/sec
58
59
等位对齐,我们就可以在主节点挂载使用块设备了:
60
~]# cat /proc/drbd
61
version: 8.4.9-1 (api:1/proto:86-101)
62
GIT-hash: 9976da086367a2476503ef7f6b13d4567327a280 build by mockbuild@Build64R6, 2016-12-13 18:38:15
63
0: cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C r-----
64
ns:24 nr:10619544 dw:21104972 dr:1045 al:2 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0
65
66
~]# mkfs.ext4 /dev/drbd0
67
~]# mount /dev/drbd0 /mnt
68
~]# cd /mnt
69
~]# echo 'hello drdb' > hello
70
~]# cd ..
71
~]# umount /mnt
72
~]# drbdadm secondary mystore
node2
1
~]# drbdadm primary mystore
2
~]# cat /proc/drbd
3
version: 8.4.9-1 (api:1/proto:86-101)
4
GIT-hash: 9976da086367a2476503ef7f6b13d4567327a280 build by mockbuild@Build64R6, 2016-12-13 18:38:15
5
0: cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C r-----
6
ns:24 nr:10619544 dw:21104972 dr:1045 al:2 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0
7
8
~]# mount /dev/drbd0 /mnt
9
~]# cd /mnt
10
~]# ll
11
total 20
12
-rw-r--r--. 1 root root 11 May 19 03:53 hello
13
drwx------. 2 root root 16384 May 19 03:52 lost+found
14
~]# cat hello
15
hello drdb
我们切换DRBD的主从模式挂载都是很麻烦,所以在这个时候我们可以考虑使用高可用集群的crm来管理DRBD资源。