DRBD分布式冗余复制块文件同步-ITB运维部落—http://www.itbcn.cn—ITB运维技术交流之家平台
记录工作点滴
分享运维知识

DRBD分布式冗余复制块文件同步

http://git.linbit.com/drbd-9.0.git/

分布式冗余复制块设备,由相关Linux内核模块和脚本组成,用以构建高可用性集群(HA, High Availability clusters)。

基于软件的,无共享架构的,冗余复制的存储解决方案,可在服务器之间的对块设备(磁盘,磁盘的某个分区,LVM逻辑卷等块设备)进行远程实时镜像(mirror)。

其实现方式是通过网络来镜像整个块设备,因此,可以把DRBD看作是一种基于网络的RAID-1。

 

========

高可用集群是指一组通过硬件和软件连接起来的独立计算机,它们在用户面前表现为一个单一系统,在这样的一组计算机系统内部的一个或者多个节点停止工作,服务会从故障节点切换到正常工作的节点上运行,不会引起服务中断。

==========

无共享架构(shared-nothing architecture)

Shared nothing架构(shared-nothing architecture)是一种分布式计算架构。架构中的每一个节点( node)都是独立、自给的,而且整个系统中没有单点竞争。

Shared Nothing在Web应用开发中尤其受到欢迎,究其原因是这种方案提供的scalability。在一个纯Shared Nothing系统中,通过简单地增加一些廉价的计算机做为系统的节点却可以获取几乎无限的扩展。正是由于Shared Nothing架构中不存在单一瓶颈而降低系统运行速度。Google 称之为sharding。

Shared nothing系统通常需要将他的数据分布在多个节点的不同数据库中(不同的计算机处理不同的用户和查询)或者要求每个节点通过使用某些协调协议来保留它自己的应用程序数据备份,这通常被成为数据库Sharding。

 

DRBD的基本特性

  1. 实时性:当应用对磁盘的数据进行修改或修改完成时,复制立即发生。
  2. 透明性:应用程序的数据存储在镜像设备上是独立和透明的,数据可存储在不同的服务器上。
  3. 同步镜像和异步镜像
  • 同步镜像,当本地发申请进行写操作进行时,同步写到两台服务器上
  • 异步镜像,当本地写申请已经完成对本地的写操作时,开始对对应的服务器进行写操作。

 

DRBD架构概要

 

image

Heartbeat的作用

Heartbeat 项目是 Linux-HA 工程的一个组成部分,它实现了一个高可用集群系统。心跳服务和集群通信是高可用集群的两个关键组件,在 Heartbeat 项目里,由 heartbeat 模块实现了这两个功能。

failover:失效转移。通俗地说,即当A无法为客户服务时,系统能够自动地切换,使B能够及时地顶上继续为客户提供服务,且客户感觉不到这个为他提供服务的对象已经更换。

image

 

DRBD与RAID-1的异同

相同点

  • 都是做镜像(Mirroring),全冗余。
  • 都具有高可靠性和安全性。
  • 高可用性。支持”热替换”,即不断电的情况下对故障磁盘进行更换。
  • 磁盘的利用率都只有50%

 

不同点

  • 实现机制不同。DRBD通过网络进行Mirror镜像备份。
  • DRBD会感知设备底层的组成部分。而RAID-1虽然有两个存储设备,但是对于使用RAID-1系统的应用来说,并不会感知到底层的组成部分,甚至如果有一块存储设备读/写失效时,也不会被应用感知。

image

 

DRBD组件

分为内核模块和用户空间管理工具.

DRBD技术的核心功能是Linux内核模块实现的。具体来说,DRBD包含一个虚拟的块设备。

DRBD技术,是由Linux内核架构所支撑的,它建立在不可知的架构层上面。

因此,DRBD不可能添加了上层所具备的一些新特性。例如,DRBD技术不能自动检测文件系统损坏或添加双主动群集能力,像Ext3或者XFS文件系统。

 

DRBD的另外一个重要组件是用户空间管理工具User space tools,管理和配置DRBD的资源(resource),与DRBD内核模块进行通信。

安装了该工具后,主要有如下命令:

  • drbdadm:高层的DRBD程序管理套件工具。它从配置文件/etc/drbd.conf 中获取所有配置参数
  • drbd-overview
  • drbdsetup
  • drbdmeta

DRBD的角色

在DRBD中,所有资源都有自己的角色,包括主(Primary)或者次(Secondary)。

Primary设备,可以进行不受限制的读/写操作,可创建和挂载文件系统、初始化或者是直接I/O 的块设备等等。

Secondary设备,可以接收所有来自对等设备(Peer)的更新,但是,完全拒绝访问也就是不能被使用(挂载)也不能被读/写访问,原因是为了保持缓存的一致性。

 

在实际集群中,主和备的概念是根据存储的可用性的而确定,通常情况下在高可用环境中主节点也往往是活动的节点,但是这不是必须的,也就是资源角色之间可以转换。

转换的方式主要有人工干预(manual intervention)或者用集群管理工具进行自动转换。其中资源从Secondary变为Primary,叫做升级(promotion),反之,资源从Primary变为Secondary,叫做降级(demotion)

 

人工干预: http://drbd.linbit.com/users-guide-9.0/s-switch-resource-roles.html

自动转换: http://drbd.linbit.com/users-guide-9.0/s-automatic-promotion.html

peer:对等端,在两个NameNode的环境下,指另外一个NameNode

 

DRBD的资源

在DRBD中,资源是指所有特定的可复制数据集合的总称,包括:

  • 资源(resource)

image

  • DRBD设备,DRBD管理的虚拟块设备。它有一个主设备号为147的设备,默认的它的次要编号从0开始。相关的DRBD块设备命名为/dev/drbdX,其中X是设备的次要号码

  image

  • 配置文件。包括磁盘配置、网络配置。

 

Metadata 资源的两种存储方式:internally和externally。存储方式是在每个resource配置段中指定的。这两种存储方式各有优缺点。

Internal metadata:

一个resource被配置成使用internal metadata,意味着DRBD把它的metadata,和实际生产数据存储于相同的底层物理设备中。该存储方式是在设备的最后位置留出一个区域来存储metadata。

优点:因为metadata是和实际生产数据紧密联系在一起的,如果发生了硬盘损坏,不需要管理员做额外的工作,因为metadata会随实际生产数据的丢失而丢失,同样会随着生产数据的恢复而恢复。

缺点:如果底层设备只有一块物理硬盘(和RAID相反),这种存储方式可能产生写竞争,对写操作的吞吐量有负面影响,因为应用程序的写操作请求会触发DRBD的metadata的更新。如果metadata存储于硬盘的同一块盘片上,那么,写操作会导致额外的两次磁头读写移动。

External metadata:

该存储方式比较简单,就是把metadata存储于一个和生产数据分开的专门的设备块中。

优点:对某些写操作,提供某些潜在的改进。

缺点:因为metadata和生产数据是分开的,如果发生了硬盘损坏,在更换硬盘后,需要管理员进行人工干预,从其它存活的节点向刚替换的硬盘进行完全的数据同步。

什么时候应该使用Exteranl的存储方式:设备中已经存有数据,而该设备不支持扩展(如LVM),也不支持收缩(shrinking)。

一、配置环境需求

两个节点,一主一次:Host1、Host2

节点环境

  • Linux Distribution(含有make, gcc, kernel-devel等工具),本次使用 CentOS 7.1
  • DRBD 版本8.4.6
  • DRBD User Space Tools 版本8.9.4

 

二、DRBD环境搭建

(1)确保系统中DRBD Module已加载

Step 1. 检查系统中是否加载DRBD Module

# lsmod | grep drbd

返回结果,则标明DRBD模块已加载,跳过第2、3步;否则,继续第2步。

 

Step 2. 检查系统中是否存在DRBD Module

# modprobe drbd

不返回结果,则表明DRBD模块存在且已加载成功,跳过第3步;否则继续第3步。

 

Step 3. 安装DRBD Module

方案1: 从http://drbd.linbit.com/download/packages/下载二进制包进行安装

方案2:从http://oss.linbit.com/drbd/ 下载源码包进行安装。

(a)源码包在8.4.5之前,下载drbd-****.tar.gz,解压到/usr/src/,在解压后的目录下,执行下列命令

#./configure –prefix=/usr –localstatedir=/var –sysconfdir=/etc –with-km

#make

#make install

(b)源码包在8.4.5版本后, User Space Tools从内核包中分离出来了。执行下列命令

#make

#make install

注意:  ./configure 命令配置生成makefile的参数详细参见: http://drbd.linbit.com/users-guide-8.4/s-build-from-source.html

 

(2)安装 User Space Tools

方案 1. 从http://drbd.linbit.com/download/packages/下载二进制包进行安装

方案2. 从http://oss.linbit.com/drbd/ 下载源码包进行安装。

(a) 安装8.4.5之前的版本。

如果自己动手安装过DRBD Module,则此不需要再次安装;否则,在解压后的目录下执行下列命令

#./configure –prefix=/usr –localstatedir=/var –sysconfdir=/etc

#make

#make install

(b) 安装8.4.5之后的版本。

下载drbd-utils-***.tar.gz,解压到/usr/src/,在解压后目录中执行下列命令

# ./configure –prefix=/usr –localstatedir=/var –sysconfdir=/etc

# make

# make install

(3)配置 DRBD

Step 1. 配置底层存储

当你安装完DRBD后,你必须在两个集群节点上留下大小相同的存储区域。这将会成为DRBD资源的底层资源,你可以用任何类型的块设备用于此存储区域。

在两个Host上执行下述操作,且保证分区大小一致:

a)新追加一个磁盘,在/dev/中可查看到是sdb

b)对sdb进行分区

# fdisk /dev/sdb

输入n

输入p

输入分区号

输入开始簇号

输入+10G #####分区大小设定

输入w #####保存

# partx /dev/sdb1 #####查看内核是否已经识别新分区,不识别需要重新启动

Step 2. 配置网络

建议使用专用的连接来运行DRBD,不推荐使用路由器是因为它明显的影响了系统性能(包括吞吐量和延迟等造成等不良影响)。就防火墙而言,DRBD使用TCP端口从7788开始,并且每一个资源监听都使用一个独立的端口,DRBD使用两个TCP连接配置资源。为了正常使用DRBD功能,这些连接需要能通过防火墙。

a) 设置主机名、以及 ip地址及主机名的对应关系。

在两个Host上均执行下述操作:

/etc/hostname 中将Host1的主机名修改为node1.localdomain,将Host2的主机名修改为node2.localdomain。

将下列两行追加到Host1和Host2的/etc/hosts 文件中:

193.160.11.30 node1.localdomain

193.160.11.107 node2.localdomain

最终保证,两个Host之间可以互相通过主机名ping通对方。

b)关闭防火墙或者设置防火墙允许端口7789。

方案1:关闭防火墙(安全性低)

CentOS7默认使用firewalld,则执行命令

#systemctl stop firewalld ,

如果已禁用firewalld而启用了iptables,则执行 命令 #systemctl stop iptables

 

方案2:设置防火墙允许端口7789

firewalld:

Step1. 执行firewall-cmd –permanent –add-port=7789/tcp

Step2. systemctl restart firewalld

iptables:

Step1. 在/etc/sysconfig/iptables和/etc/sysconfig/ip6tables文件中找到22端口所在行下方添加与22端口行一致的数据,将—dport参数值更改为7789

Step2. systemctl restart iptables

 

Step 3. 配置DRBD资源

1. 编辑/etc/drbd.conf并添加下面内容

include “/etc/drbd.d/global_common.conf”;

include “/etc/drbd.d/*.res”;

 

一般/etc/drbd.d/global_common.conf 文件中包含有DRBD共同配置的部分,而.res文件则包含每一个资源特有的部分。也有可能仅使用drbd.conf文件作为配置文件。

2. 编辑/etc/drbd.d/global_common.conf文件,添加如下内容:

# sudo  vim /etc/drbd.d/global_common.conf

global { usage-count yes; }

common {

protocol C;

handlers { }

startup {

wfc-timeout 300;

degr-wfc-timeout 300;

outdated-wfc-timeout 2000;

}

disk { on-io-error detach; }

net {

cram-hmac-alg “sha1”;

shared-secret “vsm”;

}

syncer { rate 100M; }

}

 

3. 编辑/etc/drbd.d/*.res文件,添加如下内容

# sudo  vim /etc/drbd.d/*.res

resource r0 {

meta-disk internal;

device /dev/drbd0;

on node1.localdomain {

disk /dev/sdb1;

address 193.160.11.30:7789;

}

on node2.localdomain {

disk /dev/sdb1;

address 193.160.11.107:7789;

}

}

 

四、DRBD的使用

1.给两个节点都创建DRBD设备并启动资源

创建DRBD设备并启动资源
# drbdadm create-md r0
# drbdadm up r0

启动DRBD服务

# service drbd start

查看DRBD状态
方法一:#drbd-overview

方法二:#cat /proc/drbd

 

2.将其中一个节点设置为Primary

DRBD第一次设置主节点时,需要使用–force参数来初始化设备同步,之后切换节点则不在需要
#drbdadm primary r0
#drbd-overview

0:r0 SyncSource Primary/Secondary UpToDate/Inconsistent C r—n-
[=============>……] sync’ed: 70.6% (310268/1044092)K

过一段时间后再次执行

#drbd-overview

0:r0  Connected Primary/Secondary UpToDate/UpToDate

3. 在Primary节点上格式化/dev/drbd0,挂载到指定目录上,往该目录写入文件

# mkfs.ext4 /dev/drbd0

# cd /mnt

# mkdir test

# mount /dev/drbd0 /mnt/test

# echo “This is a test.” >> test.txt

4. 将Primary节点更改为Secondary节点

# umount /dev/drbd0 ####这一步很重要

# drbdadm secondary r0

5. 将Secondary节点更改为Primary节点

# drbdadm primary r0

# cd /mnt

# mkdir test

# mount /dev/drbd0 /mnt/test

6. 确认当前的Primary节点下mnt/test目录下是否存在文件test.txt

# cd  /mnt/test

 

五、DRBD安装配置参见错误处理

错误一:启用resource后,使用drbd-overview查看后状态一直为” WFConnection Secondary/Unknown Inconsistent/DUnknown ”

A:防火墙不允许DRBD的端口号,可以关闭防火墙,或者开放DRBD的端口号。

 

错误二:启用resource后,使用drbd-overview查看后状态一直为” WFConnection Secondary/Secondary Diskless/Diskless ”

A:底层存储设置未检测到,可以执行命令:# drbdadm up r0

 

错误三:执行命令‘ #drbdadm secondary r0’报错,错误信息 “0: State change failed : (-12) Device is held open by someone….”

A:在执行这个命令前必须执行# umount /dev/drbd0

 

错误四:执行格式化/dev/drbd0时出错,错误信息为 ““mkfs.ext3: Wrong medium type while trying to determine filesystem size“

A:执行命令所在节点不是Primary节点,先将其设置未Primary节点,再进行格式化/dev/drbd0

 

错误五:执行mount /dev/drbd0时出错,错误信息为 “mount: block device /dev/drbd0 is write-protected, mounting read-only mount: Wrong medium type“

A:执行命令所在节点不是Primary节点,先将其设置未Primary节点,再进行mount /dev/drbd0

 

错误六:执行[[email protected] ~]# drbdadm create-md r0 出现如下错误

Device size would be truncated, which

would corrupt data and result in

‘access beyond end of device’ errors.

You need to either

* use external meta data (recommended)

* shrink that filesystem first

* zero out the device (destroy the filesystem)

Operation refused.

Command ‘drbdmeta 0 v08 /dev/sdb internal create-md’ terminated with exit code 40

A:执行如下命令来zero out the device。

dd if=/dev/zero bs=1M count=1 of=/dev/sdb

然后在创建资源r0

未经允许不得转载:ITB运维部落—http://www.itbcn.cn—ITB运维技术交流之家平台 » DRBD分布式冗余复制块文件同步

如果文章对你有帮助,欢迎点击上方按钮打赏作者

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址