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的双主模型,需借助于集群文件系统,在以后会详细介绍。
DRBD原理知识的更多相关文章
- 高可用集群(HA)之DRBD原理和基础配置
目录 1.工作原理图 2.用户空间工具 3.工作模式 4.实现主备故障自动切换 5.所需软件 6.配置文件 7.详细配置 1.配置通用属性信息 2.定义一个资源 3.初始化资源 ...
- 深入学习卷积神经网络(CNN)的原理知识
网上关于卷积神经网络的相关知识以及数不胜数,所以本文在学习了前人的博客和知乎,在别人博客的基础上整理的知识点,便于自己理解,以后复习也可以常看看,但是如果侵犯到哪位大神的权利,请联系小编,谢谢.好了下 ...
- nginx 原理&知识
2015年6月4日 17:04:20 星期四 发现两个关于nginx原理的系列文章, 非常好 http://blog.sina.com.cn/s/blog_6d579ff40100wi7p.html ...
- poj 3370 鸽笼原理知识小结
中学就听说过抽屉原理,可惜一直没机会见识,现在这题有鸽笼原理的结论,但其实知不知道鸽笼原理都可以做 先总结一下鸽笼原理: 有n+1件或n+1件以上的物品要放到n个抽屉中,那么至少有一个抽屉里有两个或两 ...
- word2vec原理知识铺垫
word2vec: 词向量计算工具====>训练结果 词向量(word embedding) 可以很好的度量词与词的相似性,word2vec为浅层神经网络 *值得注意的是,word2vec是计算 ...
- Python 底层原理知识
1.Python是如何进行内存管理的? 答:从三个方面来说,一对象的引用计数机制,二垃圾回收机制,三内存池机制 一.对象的引用计数机制 Python内部使用引用计数,来保持追踪内存中的对象,所有对象都 ...
- 从底层谈,WebGIS 原理、设计、实现
留待备用! http://www.cnblogs.com/naaoveGIS/category/600559.html 介绍与WebGIS相关的各种原理知识,以及基于原理知识上的程序设计和实现. (一 ...
- (六)WebGIS中地图瓦片在Canvas上的拼接显示原理
文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/. 1.前言 在之前的五个章节中,我们在第一章节里介绍了WebGIS的基本 ...
- 1 构建Mysql+heartbeat+DRBD+LVS集群应用系统系列之DRBD的搭建
preface 近来公司利润上升,购买了10几台服务器,趁此机会,把mysql的主从同步的架构进一步扩展,为了适应日益增长的流量.针对mysql架构的扩展,先是咨询前辈,后和同事探讨,准备采用Mysq ...
随机推荐
- 解决WampServer窗口界面乱码问题
软件版本:WampServer 3.1.4 问题描述:Wamp安装完成.点击图标,发现导航界面乱码,也可能使用中没遇到这种问题.如下: 用记事本打开 wampmanager.ini 和 wampman ...
- python day two
今日内容: 1.常用数据类型及内置方法 2.文件处理 3.函数 列表类型: 定义: 在[]内,可以存放多个任意类型的值,并以逗号隔开. 一般用于存放学生的爱好,课堂的周期等等... 优先掌握的操作: ...
- QT+信号有参数与无参数的实现+QT4和QT5在信号和槽使用上的区别
在QT5中,信号有参数和无参数 #ifndef SUBWIDGET_H #define SUBWIDGET_H #include <QWidget> #include <QPushB ...
- HTML基础(一)
什么是HTMLHTML Hypertext Markup Language:即超文本标记语言 HTML特点 1.HTML不需要编译,直接由浏览器执行 2.HTML文件是一个文本文件 3.HTML文件必 ...
- Socket通信时服务端无响应,客户端超时设置
背景:在写一个客户端的socket程序,服务端没有返回消息,客户端一直在等待. 目标:我需要设置一个时间,如果超过这个时间客户端自动断开连接.最好是在服务端实现,客户端对我来说不可控.
- 数组合并--php
常用的合并数组方法有以下几种: 1 array_merge 2 '+' 3 array_merge_recursive 下面是一段对比的代码 $array1 = array(2,4," ...
- mac rar文件解压缩
在下载文件时经常遇到RAR格式的压缩文件, 之前从APP Store下载了免费的解压软件, 但是总觉着不好用, 广告信息很多. 好用的软件都要花钱, 所以找到了命令行解决的办法. 步骤如下: 首先需要 ...
- JDBC-Web项目导入mysql驱动包路径-Eclipse & Myeclipse
初学JAVA,很多都不懂,开始听老师说导入数据库驱动包的时候是: 右键项目 -> Properties -> Java Build Path -> 右侧选项卡选择Libraries ...
- HTML5新增的非主体元素header元素、footer元素、hgroup元素、adress元素
---恢复内容开始--- header header元素是一种具有引导和导航作用的结构元素,通常用来放置整个页面或页面内的一个内容区块的标题,但是也可以包含其他内容,例如数据表格.搜索表单或相关的lo ...
- crm 简约笔记
crm# 给modelform使用的 tutor = models.ForeignKey(verbose_name='班主任', to='UserInfo', related_name='cla ...