DRBD原理知识

DRBD原理知识DRBD(DistributedRelicatedBlockDevice分布式复制块设备),可以解决磁盘单点故障。一般情况下只支持2个节点。大致工作原理如下图:一般情况下文件写入磁盘的步骤是:写操作>文件系统>内存缓存中>磁盘调度器&g

大家好,欢迎来到IT知识分享网。DRBD原理知识

DRBD(Distributed Relicated Block Device 分布式复制块设备), 可以解决磁盘单点故障。一般情况下只支持2个节点。

大致工作原理如下图:

一般情况下文件写入磁盘的步骤是: 写操作 –> 文件系统 –> 内存缓存中 –> 磁盘调度器 –> 磁盘驱动器 –> 写入磁盘。而DRBD的工作机制如上图所示,数据经过buffer cache后有内核中的DRBD模块通过tcp/ip协议栈经过网卡和对方建立数据同步。

一、DRBD的工作模式

1、主从模型master/slave(primary/secondary)

这种机制,在某一时刻只允许有一个主节点。主节点的作用是可以挂在使用,写入数据等;从节点知识作为主节点的镜像,是主节点的备份。

这样的工作机制的好处是可以有效的避免磁盘出现单点故障,不会文件系统的错乱。

2、双主模型 dula primary(primary/primary)

所谓双主模型是2个节点都可以当做主节点来挂载使用。那么,思考这样一个问题?当第一个主节点对某一文件正在执行写操作,此时另一个节点也正在对同一文件也要执行写操作,结果会如何呢??

一般这种情况会造成文件系统的错乱,导致数据不能正常使用。原因是:对文件的加锁机制是由操作系统内核所管理的,一个节点对文件加速之后,另一个节点并不知道对方的锁信息。

解决办法是:使用集群文件系统。集群文件系统使用分布式文件锁管理器,当一个节点对文件加锁之后会通过某种机制来通知其他节点锁信息,从而实现文件锁共享。

二、DRBD的复制模型

当某一进程对某一文件执行了写操作时,写操作在上图执行到那个过程时就认为文件已经同步完成。

复制协议:

A协议:异步复制(asynchronous)如上图 文件写操作执行到A点是就认为写入磁盘成功。性能好,数据可靠性差。

B协议:半同步复制(semi sync)如上图 文件写操作执行到B点是就认为写入磁盘成功。性能好,数据可靠性介于A和C之间。

C协议:同步复制( sync)如上图 文件写操作执行到C点是就认为写入磁盘成功。性能差,数据可靠性高。也是drbd默认使用的复制协议

三、drbd的配置(主从模式)

实验环境:

2个节点:

172.16.10.50 director1.example.com

172.16.10.51 director2.example.com

1、准备工作

1
2
# drbd 2个节点之间通信是基于主机名的
# 设置主机名和主机名解析文件

1
# 准备好大小相同的磁盘,这里使用大小相同的分区代替。只需划好分区就好,不需要格式化。

2、安装软件包

1
2
3
4
5
6
7
8
9
10
drbd共有两部分组成:内核模块和用户空间的管理工具。
其中drbd内核模块代码已经整合进Linux内核2.6.33以后的版本中,因此,如果内核版本高于
此版本的话,只需要安装管理工具即可;否则,您需要同时安装内核模块和管理工具两个软件包,
并且此两者的版本号一定要保持对应。
 
# 对应的内核模块的名字分别为 drbd-kmod
注意:
drbd和drbd-kmdl的版本要对应;另一个是drbd-kmdl的版本要与当前系统的内核版本(
uname 
-r)相
   
对应。
下载地址:   直接安装即可。

 

3、配置drbd

配置文件说明:

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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
drbd的主配置文件为
/etc/drbd
.conf;为了管理的便捷性,目前通常会将些配置文件分成多个部分,
且都保存至
/etc/drbd
.d/目录中,
主配置文件中仅使用
"include"
指令将这些配置文件片断整合起来。通常,
/etc/drbd
.d目录中的配置
文件为global_common.conf和所有以.res结尾的文件。
其中global_common.conf中主要定义global段和common段,而每一个.res的文件用于定义一个资源。 
 
在配置文件中,global段仅能出现一次,且如果所有的配置信息都保存至同一个配置文件中而不分开
为多个文件的话,global段必须位于配置文件的最开始处。
目前global段中可以定义的参数仅有minor-count, dialog-refresh, disable-ip-verification
  
和usage-count。 
 
common段则用于定义被每一个资源默认继承的参数,可以在资源定义中使用的参数都可以在common段
中定义。
实际应用中,common段并非必须,但建议将多个资源共享的参数定义为common段中的参数以降低配置
文件的复杂度。 
 
resource段则用于定义drbd资源,每个资源通常定义在一个单独的位于
/etc/drbd
.d目录中的以.res结
尾的文件中。
资源在定义时必须为其命名,名字可以由非空白的ASCII字符组成。
每一个资源段的定义中至少要包含两个host子段,以定义此资源关联至的节点,其它参数均可以从
    
common段或drbd的默认中进行继承而无须定义。配置过程:
###############下面的操作在director1.example.com上完成。
 
# 1 配置/etc/drbd.d/global-common.conf
global {
        
usage-count no; 
# 是否为drbd官方收集数据
        
# minor-count dialog-refresh disable-ip-verification
}
# common是各个资源共用的选项
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; 
# 发生i/o错误的处理方法,detach将镜像磁盘直接拔除
                
#fencing resource-only;
        
}
 
        
net {
                
cram-hmac-alg 
"sha1"
;
                
shared-secret 
"mydrbdlab"
;
        
}
 
        
syncer {
                
rate 1000M;
        
}
}
 
2、定义一个资源
/etc/drbd
.d
/test
.res,内容如下:
resource 
test 
{
  
on director1.example.com {
    
device    
/dev/drbd0
;
    
disk      
/dev/sda3
;
    
address   172.16.10.50:7789;
    
meta-disk internal;
  
}
  
on director2.example.com {
    
device    
/dev/drbd0
;
    
disk      
/dev/sda3
;
    
address   172.16.10.51:7789;
    
meta-disk internal;
  
}
}

以上文件在两个节点上必须相同,因此,可以基于ssh将刚才配置的文件全部同步至另外一个节点。

1
scp  
/etc/drbd
.d/*  director2.example.com:
/etc/drbd
.d

在两个节点上初始化已定义的资源并启动服务

1
2
3
4
5
1)初始化资源,在 director1 和 director2上分别执行:
drbdadm create-md 
test 
 
2)启动服务,在 director1 和 director2 上分别执行:
/etc/init
.d
/drbd 
start

 

完成以上2步骤后,查看启动状态:

完成以上操作后,继续下面操作。同步metadata(元数据)

1
2
# 将director1.example.com 节点设置为Primary。在要设置为Primary的节点上执行如下命令:
drbdadm primary --force 
test

接下来创建文件系统,挂载使用

1
2
mke2fs -t ext4 -L DRBD 
/dev/drbd0
mount 
/dev/drbd0 
/mnt/

配置完成。

三、主从节点切换

drbd主从模型只有主节点才能挂载使用。所以就会有升级降级的操作。对主Primary/Secondary模型的drbd服务来讲,在某个时刻只能有一个节点为Primary,因此,要切换两个节点的角色,只能在先将原有的Primary节点设置为Secondary后,才能原来的Secondary节点设置为Primary。

具体使用如下:

这样的切换需手动升级,降级。通常drbd会于HA一起使用来达到自动切换的效果,此时drbd是HA的一种clone资源。

 

drbd的双主模型,需借助于集群文件系统,在以后会详细介绍。

 

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/32115.html

(0)

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信