认识DRDB并应用-1:DRDB是什么
一、概述
- DRBD(Distributed Replicated Block Device)是一个用软件实现的、无共享的、服务器之间镜像块设备内容的存储复制解决方案。
- DRBD的核心功能通过Linux的内核实现,DRBD工作在系统内核空间,最接近系统的IO栈,它直接复制的二进制数据,故速度很快,因此它没有上层的功能比如检测到EXT3文件系统的崩溃。
- 对于用户来说,一个DRBD设备,就像是一块物理的磁盘,可以在上面内创建文件系统。DRBD需要在底层设备之上构建出一个块设备。DRBD所支持的底层设备包括磁盘(或是磁盘的一个分区)、soft raid 设备、LVM的逻辑卷等块设备。
二、DRBD特性
一般只能做主从,主的资源为设primary,能不受限制进行读写操作,可以创建文件系统,可以使用裸设备,甚至直接io;从的的资源设为secondary连挂载都不能,并且只能一个主节点,一个从节点,不能一主多从,正是因为这样在集群中只能有一个节点可以随时操作数据,这种模式可用在任何的文件系统上(EXT3、EXT4、XFS等等)。
DRBD8.0之后支持双主模式。在双主模式下,任何资源在任何特定的时间,集群中都存在两个主节点。由于双方数据存在并发的可能性,这种模式需要一个共享的集群文件系统(如GFS和OCFS2),利用分布式的锁机制进行管理。部署双主模式时,DRBD是负载均衡的集群,需要从两个并发的主节点中选取一个首选的访问数据。这种模式默认是禁用的,如果要是用的话必须在配置文件中进行声明。
DRBD本身没有故障转移能力,当主节点挂了,需要借助高可用集群服务来把保证故障转移(fail-over)的能力,将从提升为主。
DRDB本身没有探测对方是否宕机的方法,需要借助高可用集群服务来实现此功能。
三、DRBD数据同步模式
异步:当数据写到磁盘上,并且复制的数据已经被放到本地的tcp缓冲区等待发送以后,就认为写入完成。(在一个节点发生故障时,可能发生数据丢失,因为被写入到远程节点上的数据可能仍在发送队列。尽管,在故障转移节点上的数据是一致的,但没有及时更新。这通常是用于地理上分开的节点。)
半同步:当数据已经写到磁盘上,并且复制的数据已经被放到对端的tcp缓冲区等待写入,就认为写入完成。(数据丢失可能发生在参加的两个节点同时故障的情况下,因为在飞行中的数据可能不会被提交到磁盘。)
同步: 本地和对端的磁盘都已经确认了写操作完成,写入才被认为完成。(没有任何数据丢失,所以这是一个群集节点的流行模式,但I/O吞吐量依赖于网络带宽。)
DRBD 的复制模型是靠protocol关键字来定义的:protocol A表示异步;protocol B表示半同步;protocol C表示同步,默认为protocol C。
四、DRBD脑裂(split brain)
split brain实际上是指在某种情况下,造成DRBD的两个节点断开连接,都以primary的身份来运行。当DRBD某primary节点连接对方节点准备发送信息的时候,如果发现对方也是primary状态,那么会立刻自行断开连接,并认定当前已经发生split brain,这时候会在系统日志中记录以下信息:“Split-Brain detected,dropping connection!”当发生split brain之后,如果查看连接状态,其中至少会有一个是StandAlone状态,另外一个可能也是StandAlone(如果是同时发现split brain状态),也有可能是WFConnection的状态。
对于脑裂,DRBD有四中处理方式:
新成为主节点的把数据丢弃,再同步老节点的数据
把老的主节点的数据丢弃,再同步新节点的数据
谁的数据修改的少,谁主动丢弃数据
如果有个节点从没发生过数据修改,那就不用动
自动裂脑自动修复能不能被接受取决于对数据丢失的容忍性。例如,财务的数据库对于任何修改的丢失都是不能容忍的,这 表示不管在什么情况下都需要手工修复裂脑问题。因此,是否启用裂脑自动修复需要考虑具体情况。
五、metadata
DRBD将数据的各种信息块保存在一个专用的区域里,这些metadata包括DRBD设备的大小、产生的标识、活动日志、快速同步的位图。
metadata的存储方式有内部和外部两种方式,使用方式可以在资源配置中定义。
__1.内部(internal)__:metadata存放在同一块硬盘或分区的最后的位置上
优点:metadata和数据是在一起,如果硬盘损坏,metadata同样就没有了,但在恢复的时候,metadata也会一起被恢复回来
缺点:metadata和数据在同一块硬盘上,磁盘I/O负载大。因为写请求会触发metadata的更新,每一次写操作就会造成两次磁头读写移动。
__2.外部(external)__:metadata存放在和数据磁盘分开的独立的块设备上
- 优点:写操作更流畅
- 缺点:metadata和数据不在一起,所以如果数据盘出现故障,在更换新盘的时候就需要人为的干预来进行新硬盘的同步。
六、DRBD的版本
Linux内核2.6.33以后,DRBD内核模块代码直接被整合进Linux内核中,使用DRBD只需安装用户空间管理工具。
在kernel 2.6.33以前的版本版本中,需要同时安装内核模块和用户空间管理工具。
内核模块程序包版本必须要系统内核保持匹配,使用uname -r查看内核版本,然后使用相对应的内核模块。
用户空间管理工具就不那么严格要求。
七、DRBD配置工具和配置文件
1.配置工具
drbdadm:户空间的工具,管理/etc/drbd.conf,向drbdsetup和drbdmeta发送指令。
drbdsetup:配置装载进kernel的DRBD模块,很少直接用。
drbdmeta:管理META数据结构,一般是修复DRDB时才使用。
2.配置文件
DRBD的主配置文件为/etc/drbd.conf;
为了管理的便捷性,目前通常会将些配置文件分成多个部分,且都保存至/etc/drbd.d目录中,主配置文件中仅使用”include”指令将这些配置文件片断整合起来。/etc/drbd.d目录中的配置文件为global_common.conf和所有以.res结尾的文件。
global_common.conf中主要定义global段和common段。
- global段必须位于配置文件的最开始处,可以定义的参数仅有minor-count, dialog-refresh, disable-ip-verification和usage-count。
- common段则用于定义被每一个资源默认继承的参数,
common段并非必须,但建议将多个资源共享的参数定义为common段中的参数以降低配置文件的复杂度。
每一个.res的文件用于定义一个资源,内里有一个resource段,包含:
Resource name:可以是除了空白字符的任意的ACSII码字符
DRBD device:在双方节点上,此DRBD设备的设备文件;一般为/dev/drbdN,其主设备号147
Disk configuration:在双方节点上,各自提供的存储设备
Nerwork configuration:双方数据同步时所使用的网络属性
每一个资源段的定义中至少要包含两个host子段,以定义此资源关联至的节点,其它参数均可以从common段或drbd的默认中进行继承。
八、安装配置DRBD
1.安装DRBD
node1/node2均安装
1 |
|
2.配置DRBD
- node1
1 |
|
1 |
|
3.为节点准备磁盘分区
node1/node2都需要准备,分好区不需要格式化,系统能识别就行
1 |
|
顺便同步时间,均设置
1 |
|
4.定义资源
1 |
|
5.同步配置文件
1 |
|
6.初始化资源
node1/node2均初始化
1 |
|
7.启动DRBD服务
node1/node2均启动
1 |
|
8.查看启动状态
1 |
|
9.选择主节点
将node1提升为主节点
1 |
|
观察
1 |
|
10.格式化并挂载
1 |
|
11.测试
1 |
|
九、corosync结合pacemaker,实现DRBD高可用
1.搭建集群
a).配置主机名
节点名称很关键,集群每个节的名称都得能互相解析。/etc/hosts中的主机名配置结果必须跟”uname -n”的解析的结果一致。
node1/node2都添加:
1 |
|
b).配置node之间SSH互信
1 |
|
c).安装corosync和pacemaker
所有节点均安装
1 |
|
d).安装资源管理器客户端命令接口工具crmsh
从pacemaker 1.1.8开始,crmsh发展成了一个独立项目,叫crmsh。pacemaker默认不提供命令接口工具,需要单独安装crmsh。
1 |
|
e).主配置文件
[root@node1 ~]# cd /etc/corosync/
[root@node1 corosync]# cp corosync.conf.example corosync.conf
[root@node1 corosync]# vi corosync.conf
1 |
|
f).生成认证key
用corosync-keygen生成key时,由于要使用/dev/random生成随机数,因此如果新装的系统操作不多,如果没有足够的熵,狂敲键盘即可,随意敲,敲够即可。(关于random使用键盘敲击产生随机数的原理可自行google)
实验演示没有足够的熵,这里将采用投机的方式,生产环境,切切不可。
1 |
|
g).copy配置给node2
1 |
|
h).启动corosync
1 |
|
i).检查启动情况
1 |
|
2.实现DRBD高可用
a).关闭drbd并设置开机不启动
node1/node2均设置
1 |
|
b).添加drbd资源
1 |
|
c).添加文件系统资源
定义文件系统资源,让服务器切换时自动挂载
1 |
|
d).定义约束
1 |
|
e).测试
复制
1 |
|