分布式块设备DRBD9基础用法(快速上手教程)

1. 概述

1.1 介绍

DRBD (Distributed Replicated Block Device) 是 Linux 平台上的分散式储存系统。其中包含了核心模组,数个使用者空间管理程式及 shell scripts,通常用于高可用性(high availability, HA)丛集。DRBD 类似磁盘阵列的RAID 1(镜像),只不过 RAID是在同一台电脑内,而DRBD是透过网络。

1.2 基本原理

DRBD是linux的内核的存储层中的一个分布式存储系统,架构分为两个部分:一个是内核模块,用于虚拟一个块设备;另一个是用户空间管理程序,用于和DRBD内核模块通讯,以管理DRBD资源。在DRBD中,资源是特指某复制的存储设备的所有方面。包括资源名称、DRBD设备(/dev/drbdm,这里m是设备最小号,最大号可到147)、磁盘配置(使本地数据可以为DRBD所用)、网络配置(与对方通信)。
一个DRBD系统由两个以上节点构成,和HA集群一样有主用节点和备用节点之分(DRBD每次只允许对一个节点进行读写访问,主机上的DRBD设备挂载到一个目录上进行使用.备机的DRBD设备无法被挂载,因为它是用来接收主机数据的,由DRBD负责操作.),在带有主要设备的节点上,应用程序和操作系统可以运行和访问DRBD设备。
DRBD块被加载到正常的块设备之上,文件系统之下,在文件系统和磁盘之间形成一个中间层 ,当用户往主节点文件系统中写入数据时,数据被正式写入磁盘之前会被DRBD系统截获,DRBD系统在捕获到有磁盘写入时,会通知用户空间管理程序把这些数据拷贝一份,写入远程DRBD镜像,然后存入DRBD镜像所映射的磁盘(备用节点)。 如图:


运行原理图

DRBD系统向虚拟块的镜像中写入数据时,支持三种协议:
A:数据一旦写入磁盘并发送到网络中就认为完成了写入操作
B:收到接收确认就认为完成了写入操作
C:收到写入确认就认为完成了写入操作
基于安全考虑我们一般选择协议C。

2. 实验环境准备

2.1 系统环境

本教程基于最新版DRBD+最新版本CENTOS,更新时间:2019-07-04

主机名 系统版本 IP地址 DRBD分区硬盘
node1 centos7.6_minial 192.168.10.30 /dev/mapper/drbd-data
node2 centos7.6_minial 192.168.10.40 /dev/mapper/drbd-data

也可以直接使用本地硬盘例如:sdb,sdc等作为drbd硬盘,此处使用逻辑卷是为了后续drbd磁盘扩容实验准备

2.2 DRBD软件下载地址

DRBD官网地址:https://www.linbit.com

软件名 备注 版本
DRBD 9 Linux Kernel Driver DRBD9内核组件 drbd-9.0.18-1.tar
DRBD Utilities DRBD9管理组件 drbd90-utils-sysvinit-9.3.1-1.el7.elrepo.x86_64..>
DRBD Sysvinit DRBD9管理组件 drbd90-utils-9.6.0-1.el7.elrepo.x86_64.rpm

3. 开始部署(主备节点同时部署)

一些基本初始化此处不再赘述(selinux,ntpdate,firewalld,hosts等)

3.1 更新系统内核

# yum install kernel kernel-devel gcc glibc -y
# 重启服务器生效
# reboot

3.2 部署DRBD9内核组件

[root@node1 drbd]# tar zxf drbd-9.0.18-1.tar.gz 
[root@node1 drbd]# cd drbd-9.0.18-1

# 查看此文件可知DRBD9需要管理工具版本 >= 9.3
[root@node1 drbd-9.0.18-1]# cat README.drbd-utils 
=======================================================================
  With DRBD module version 8.4.5, we split out the management tools
  into their own repository at https://github.com/LINBIT/drbd-utils
  (tarball at http://links.linbit.com/drbd-download)

  That started out as "drbd-utils version 8.9.0",
  has a different release cycle,
  and provides compatible drbdadm, drbdsetup and drbdmeta tools
  for DRBD module versions 8.3, 8.4 and 9.

  Again: to manage DRBD 9 kernel modules and above,
  you want drbd-utils >= 9.3 from above url.
=======================================================================

# 指定KDIR参数,将drbd编译进系统内核
[root@node1 drbd-9.0.18-1]# make DIR=/usr/src/kernels/3.10.0-957.21.3.el7.x86_64/
[root@node1 drbd-9.0.18-1]# make install

# 将DRBD加载到系统内核
[root@node1 drbd-9.0.18-1]# modprobe drbd
# 确认是否成功加载
[root@node1 drbd-9.0.18-1]# lsmod | grep drbd
drbd                  558570  0 
libcrc32c              12644  2 xfs,drbd

3.3 部署DRBD9管理组件

[root@node1 drbd]# yum install drbd90-utils-9.6.0-1.el7.elrepo.x86_64.rpm -y
[root@node1 drbd]# yum install drbd90-utils-sysvinit-9.6.0-1.el7.elrepo.x86_64.rpm -y

3.4 配置DRBD9

在安装完DRDB软件后,必须在两边服务器上配置大致相同的存储空间,你可以采用如下任意一种存储设备:

  • 一个物理磁盘设备
  • 一个软RAID设备
  • 一个LVM逻辑卷
  • 任何块设备

DRBD对于网络的要求:建议drbd服务器之间通过交换机直接连接,不建议中间通过路由器设备,当然这不是强制要求,DRBD需要基于TCP的7788和7799端口

3.4.1 配置你的资源(主备机器都需要同时执行)

DRBD的配置文件在 /etc/drbd.conf中,当前只包含如下两行

include "/etc/drbd.d/global_common.conf";
include "/etc/drbd.d/*.res";

其中
/etc/drbd.d/global_common.conf :包含DRBD的全局和通用模块配置
/etc/drbd.d/*.res :用户资源配置模块

如下是一个drbd.conf的简单配置案例:

vim /etc/drbd.d/global_common.conf

global {
  usage-count yes;
}
common {
  net {
    protocol C;
  }
}
vim /etc/drbd.d/r0.res

resource r0 {
  on node1 {  # on 主机名
    device    /dev/drbd1;  # 映射的drbd磁盘,可默认
    disk      /dev/mapper/drbd-data;   # 设置后面存放数据的drbd磁盘
    address   192.168.10.30:7789;
    meta-disk internal;
  }
  on node2 {
    device    /dev/drbd1;
    disk      /dev/mapper/drbd-data;
    address   192.168.10.40:7789;
    meta-disk internal;
  }
}
3.4.5 启动drbd服务

初始化配置服务完成后,请记住你的资源名(r0)

# 创建device metadta
[root@node1 ~]# drbdadm create-md r0

  --==  Thank you for participating in the global usage survey  ==--
The server's response is:

you are the 859th user to install this version
initializing activity log
initializing bitmap (192 KB) to all zero
Writing meta data...
New drbd meta data block successfully created.
success
# 启动资源并查看状态
[root@node1 ~]# drbdadm up r0
[root@node1 ~]# drbdadm status r0
r0 role:Secondary
  disk:Inconsistent
  node2 role:Secondary
    peer-disk:Inconsistent

# 可以看到当前资源状态都是Inconsistent(数据未同步状态)
# 此操作只能在一个设备上执行,因为需要将此设备设置为主设备
[root@node1 ~]# drbdadm primary --force r0
[root@node1 ~]# drbdadm status r0
r0 role:Primary
  disk:UpToDate
  node2 role:Secondary
    replication:SyncSource peer-disk:Inconsistent done:49.11

# 看到此时数据的状态为UpToDate(数据正在同步,单未完全同步),且已经同步49.11

# 如下代表数据已经全部同步完成
[root@node1 ~]# drbdadm status r0
r0 role:Primary
  disk:UpToDate
  node2 role:Secondary
    peer-disk:UpToDate
3.4.6 详细服务状态查询
[root@node1 ~]# drbdsetup status r0 --verbose --statistics
r0 node-id:0 role:Primary suspended:no
    write-ordering:flush
  volume:0 minor:1 disk:UpToDate quorum:yes
      size:6291228 read:6292272 written:0 al-writes:0 bm-writes:0 upper-pending:0 lower-pending:0 al-suspended:no blocked:no
  node2 node-id:1 connection:Connected role:Secondary congested:no ap-in-flight:0 rs-in-flight:0
    volume:0 replication:Established peer-disk:UpToDate resync-suspended:no
        received:0 sent:6291228 out-of-sync:0 pending:0 unacked:0
DRBD运行状态图

3.5 格式化文件系统并挂载

此操作仅仅需要在主节点执行即可

[root@node1 ~]# mkfs.xfs /dev/drbd1
meta-data=/dev/drbd1             isize=512    agcount=4, agsize=393202 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0, sparse=0
data     =                       bsize=4096   blocks=1572807, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal log           bsize=4096   blocks=2560, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
[root@node1 ~]# mkdir /mydata
[root@node1 ~]# mount /dev/drbd1 /mydata/
[root@node1 ~]# df -h
Filesystem               Size  Used Avail Use% Mounted on
/dev/mapper/centos-root  8.0G  1.5G  6.6G  19% /
devtmpfs                 475M     0  475M   0% /dev
tmpfs                    487M     0  487M   0% /dev/shm
tmpfs                    487M  7.6M  479M   2% /run
tmpfs                    487M     0  487M   0% /sys/fs/cgroup
/dev/sda1               1014M  156M  859M  16% /boot
tmpfs                     98M     0   98M   0% /run/user/0
/dev/drbd1               6.0G   33M  6.0G   1% /mydata

3.6 写入文件并测试主备切换

# 进入挂载目录mydata下,随便创建一些文件
[root@node1 ~]# cd /mydata/
[root@node1 mydata]# touch {a,b,c,d,e,f}.txtx
[root@node1 mydata]# ll
total 0
-rw-r--r-- 1 root root 0 Jul  5 12:18 a.txtx
-rw-r--r-- 1 root root 0 Jul  5 12:18 b.txtx
-rw-r--r-- 1 root root 0 Jul  5 12:18 c.txtx
-rw-r--r-- 1 root root 0 Jul  5 12:18 d.txtx
-rw-r--r-- 1 root root 0 Jul  5 12:18 e.txtx
-rw-r--r-- 1 root root 0 Jul  5 12:18 f.txtx

# 尝试切换原先primary节点为secondary
[root@node1 ~]# umount /mydata/
[root@node1 ~]# drbdadm secondary r0
[root@node1 ~]# drbdadm status r0
r0 role:Secondary
  disk:UpToDate
  node2 role:Secondary
    peer-disk:UpToDate

# 将node2的secondary切换为primary节点并挂载
[root@node2 ~]# mkdir /mydata
[root@node2 ~]# drbdadm primary r0
[root@node2 ~]# mount /dev/drbd1 /mydata/
[root@node2 ~]# df -h
Filesystem               Size  Used Avail Use% Mounted on
/dev/mapper/centos-root  8.0G  1.5G  6.6G  19% /
devtmpfs                 475M     0  475M   0% /dev
tmpfs                    487M     0  487M   0% /dev/shm
tmpfs                    487M  7.6M  479M   2% /run
tmpfs                    487M     0  487M   0% /sys/fs/cgroup
/dev/sda1               1014M  156M  859M  16% /boot
tmpfs                     98M     0   98M   0% /run/user/0
/dev/drbd1               6.0G   33M  6.0G   1% /mydata
[root@node2 ~]# cd /mydata/
[root@node2 mydata]# ll
total 0
-rw-r--r-- 1 root root 0 Jul  5 12:18 a.txtx
-rw-r--r-- 1 root root 0 Jul  5 12:18 b.txtx
-rw-r--r-- 1 root root 0 Jul  5 12:18 c.txtx
-rw-r--r-- 1 root root 0 Jul  5 12:18 d.txtx
-rw-r--r-- 1 root root 0 Jul  5 12:18 e.txtx
-rw-r--r-- 1 root root 0 Jul  5 12:18 f.txtx
[root@node2 mydata]# drbdadm status r0
r0 role:Primary
  disk:UpToDate
  node1 role:Secondary
    peer-disk:UpToDate

综上操作可发现node2节点成功切换成主节点,且之前node1中创建的数据已经同步到node2,此时在node2中新建文件,也会同步到node1节点完成网络raid1的功能

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,519评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,842评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,544评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,742评论 1 271
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,646评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,027评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,513评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,169评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,324评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,268评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,299评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,996评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,591评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,667评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,911评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,288评论 2 345
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,871评论 2 341

推荐阅读更多精彩内容