DRBD使用指南
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了DRBD使用指南相关的知识,希望对你有一定的参考价值。
概念:
- 分布式复制块设备(DRBD技术)是一种基于软件的,无共享,复制的存储解决方案,在服务器之间的对块设备(硬盘,分区,逻辑卷等)进行镜像。
- DRBD的全称为:Distributed ReplicatedBlock Device(DRBD) 分布式块设备复制
- DRBD由内核模块和相关脚本构成,用以构建高可用集群。其实现方式是通过网络镜像整个设备。可把它看作一种网络RAID。允许用户在远程机器上建立一个本地块设备的实时镜像
- 工作流程:(DRBD Primary)负责接收数据,把数据写到本地磁盘并发送给另一台主机(DRBD Secondary)。另一个主机再将数据存到自己的磁盘
- 一个DRBD系统由两个节点构成,与HA集群类似:也有主备节点之分,在带有主要设备的节点上,应用和系统可运行和访问DRBD设备(/dev/drbd*)
DRBD的三种复制模式:
协议A:异步复制协议。
一旦本地磁盘写入已完成且数据包已在发送队列中则写被认为是完成的。在一个节点发生故障时可能发生丢失,因为被写入到远程节点上的数据可能仍在发送队列。
尽管在故障转移节点上的数据是一致的但没有及时更新。通常用于地理上分开的节点(本地写成功后立即返回,数据放在发送buffer中,可能丢失)
协议B:内存同步(半同步)复制协议。
一旦本地磁盘写入完成且复制数据包达到了对等节点则认为写在主节点上被认为是完成的。
数据丢失可能发生在参加的两个节点同时故障的情况,因为在传输中的数据可能不会被提交到磁盘(本地写成功并将数据发送到对方后立即返回,如果双机掉电,数据可能丢失)
协议C:同步复制协议。
只有在本地和远程节点的磁盘均确认了写操作完成时写才被认为完成。没有任何数据丢失!所以这是一个群集节点的流行模式,但I/O吞吐量依赖于网络带宽
一般使用协议C,但选择C协议将影响流量,从而影响网络时延。为了数据可靠性在生产环境使用时须慎重使用一种协议(本地和对方写成功确认后返回。若双机掉电或磁盘同时损坏则数据可能丢失)
DRBD工作原理图:
DRBD是linux的内核的存储层中的一个分布式存储系统,可用使用DRBD在两台Linux服务器之间共享块设备,共享文件系统和数据。类似于一个网络RAID-1的功能,如图所示:
DRBD配置工具:
- drbdadm: 高级管理工具,管理/etc/drbd.conf,向drbdsetup和drbdmeta发送指令
- drbdsetup: 配置装载进kernel的DRBD模块,平时很少用
- drbdmeta: 管理META数据结构,平时很少用
DRBD配置文件:DRBD的主配置文件为/etc/drbd.conf
为了管理的便捷性通常会将些配置文件分多个部分,但都保存至/etc/drbd.d目录。主配置文件中仅使用"include"指令将这些配置文件片断整合。
通常/etc/drbd.d中的文件为global_common.conf和所有以.res结尾的文件。其中:
- global_common.conf中主要定义global段和common段
- 每个.res文件用于定义一个资源
global_common.conf:
- global:
在配置文件中global段仅出现一次,且若所有配置信息都保存至同一个配置文件中而不分开为多个文件的话则global段必须位于配置文件最开始处
目前global段中可以定义的参数仅有minor-count, dialog-refresh, disable-ip-verification和usage-count。
- common:
用于定义被每一个资源默认继承的参数,可在资源定义中使用的参数都可在common定义。实际应用中common段并非必须但建议将多个资源共享的参数定义在common段以降低配置复杂度
- resource:
用于定义drbd资源,每个资源通常定义在一个单独的位于/etc/drbd.d目录中的以.res结尾的文件中。资源在定义时必须为其命名
每个资源段的定义中至少要包含两个host子段,以定义此资源关联至的节点,其它参数均可以从common段或drbd的默认中进行继承而无须定义
DRBD资源:
- Resource name: 除空白字符的任意的ACSII码字符
- DRBD device: 在双方节点上,此DRBD设备的设备文件;一般为/dev/drbdN,其主设备号147
- Disk configuration: 在双方节点上各自提供的存储设备
- Nerwork configuration: 双方数据同步时所使用的网络属性
DRBD 配置步骤:
- 安装drbd
- 配置资源文件(定义资料名称,磁盘,节点信息,同步限制等)
- 将drbd加入到系统服务chkconfig --add drbd
- 初始化资源组 drbdadm create-md resource_name
- 启动服务 service drbd start
- 设置primary主机并同步数据
- 分区、格式化/dev/drbd*
- 一个节点进行挂载
- 查看状态
DRBD支持的底层设备:
DRBD需构建在底层设备之上,然后构建出块设备。对用户来说DRBD设备就像是物理磁盘,可在其内创建文件系统。DRBD所支持的底层设备有以下这些类:
- 磁盘或是磁盘的分区
- soft raid设备
- LVM的逻辑卷
- EVMS(Enterprise Volume Management System,企业卷管理系统)的卷。
- 其他任何的块设备
单主模式:
在单主模式下任何资源在任何特定的时间,集群中只存在一个主节点。正因为这样在集群中只能有一个节点可随时操作数据,这种模式可用在任何的文件系统上(EXT3、EXT4、XFS等)
部署DRBD单主节点模式可保证集群的高可用性(fail-over遇故障转移的能力)
双主模式:这是DRBD8.0之后的新特性
在双主模式下任何资源在任何特定的时间,集群中都存在两个主节点。由于双方数据存在并发的可能性这种模式需一个共享的集群文件系统,利用分布式的锁机制进行管理,如GFS和OCFS2。
部署双主模式时,DRBD是负载均衡的集群,这就需要从两个并发的主节点中选取一个首选的访问数据。这种模式默认是禁用的,如果要是用的话必须在配置文件中进行声明。
部署:
关闭防火墙限制及软件安装:
service iptables stop && setenforce 0
yum -y install gcc kernel-devel kernel-headers flex ; export LC_ALL=C
wget http://oss.linbit.com/drbd/8.4/drbd-8.4.1.tar.gz && tar xzf drbd-8.4.1.tar.gz
cd drbd-8.4.1
./configure --prefix=/usr/local/drbd --with-km --with-heartbeat --sysconfdir=/etc/drbd # --with-km 激活内核模块 --with-heartbeat 激活heartbeat相关配置
make KDIR=/usr/src/kernels/$(uname -r)/ # KDIR=指定内核源码路径,依实际情况设置(查内核路径:ls -l /usr/src/kernels/$(uname -r)/)
make install
mkdir -p /usr/local/drbd/var/run/drbd
cp /usr/local/drbd/etc/rc.d/init.d/drbd /etc/rc.d/init.d
chkconfig --add drbd && chkconfig drbd on
cd drbd #安装drbd模块
make clean && make KDIR=/usr/src/kernels/2.6.32-220.17.1.el6.x86_64/
cp drbd.ko /lib/modules/`uname -r`/kernel/lib/
depmod
modprobe drbd && lsmod | grep -i drbd
在两台主机之间配置host文件将名字指向对方:
vim /etc/hosts
10.0.0.7 data-1.localdomain #建议增加去往此网段的路由到指定出接口
10.0.0.8 data-2.localdomain #建议增加去往此网段的路由到指定出接口
在两端主机内创建分区:
数据区: parted /dev/sda mklabel gpt && parted /dev/sda mkpart logical ext3 20GB 20GB
重读分区: partprobe && cat /proc/partions
以上是关于DRBD使用指南的主要内容,如果未能解决你的问题,请参考以下文章