分布式块设备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 toolsinto 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 toolsfor 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.confglobal {usage-count yes;
}
common {net {protocol C;}
}
vim /etc/drbd.d/r0.resresource 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:Secondarydisk:Inconsistentnode2 role:Secondarypeer-disk:Inconsistent# 可以看到当前资源状态都是Inconsistent(数据未同步状态)
# 此操作只能在一个设备上执行,因为需要将此设备设置为主设备
[root@node1 ~]# drbdadm primary --force r0
[root@node1 ~]# drbdadm status r0
r0 role:Primarydisk:UpToDatenode2 role:Secondaryreplication:SyncSource peer-disk:Inconsistent done:49.11# 看到此时数据的状态为UpToDate(数据正在同步,单未完全同步),且已经同步49.11# 如下代表数据已经全部同步完成
[root@node1 ~]# drbdadm status r0
r0 role:Primarydisk:UpToDatenode2 role:Secondarypeer-disk:UpToDate
3.4.6 详细服务状态查询
[root@node1 ~]# drbdsetup status r0 --verbose --statistics
r0 node-id:0 role:Primary suspended:nowrite-ordering:flushvolume:0 minor:1 disk:UpToDate quorum:yessize:6291228 read:6292272 written:0 al-writes:0 bm-writes:0 upper-pending:0 lower-pending:0 al-suspended:no blocked:nonode2 node-id:1 connection:Connected role:Secondary congested:no ap-in-flight:0 rs-in-flight:0volume:0 replication:Established peer-disk:UpToDate resync-suspended:noreceived: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:Secondarydisk:UpToDatenode2 role:Secondarypeer-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:Primarydisk:UpToDatenode1 role:Secondarypeer-disk:UpToDate
综上操作可发现node2节点成功切换成主节点,且之前node1中创建的数据已经同步到node2,此时在node2中新建文件,也会同步到node1节点完成网络raid1的功能
作者:素白流殇
链接:https://www.jianshu.com/p/dfceb3730e22
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
分布式块设备DRBD9基础用法(快速上手教程)相关推荐
- PyTorch 分布式训练DDP 单机多卡快速上手
PyTorch 分布式训练DDP 单机多卡快速上手 本文旨在帮助新人快速上手最有效的 PyTorch 单机多卡训练,对于 PyTorch 分布式训练的理论介绍.多方案对比,本文不做详细介绍,有兴趣的读 ...
- 分布式块设备复制:客户端
分布式块设备复制,英文名称 Distributed Replicated Block Device,简称为 DRBD,它是一种由应用引导内核驱动工作.基于网络的块复制存储解决方案,主要用于服务器之间的 ...
- Angular 初学者快速上手教程
课程介绍 本课程是一个系列基础教程,目标是带领读者上手实战,课程以新版本 Angular 的 3 个核心概念作为主线:组件.路由.模块,加上业务开发过程中必须用到的特性:工具.指令.表单.RxJS.i ...
- 申请 Let's Encrypt 数字证书,并安装cerbot快速上手教程~~
申请 Let's Encrypt 数字证书,并安装cerbot快速上手教程~~ Let's Encrypt SSL证书介绍 如今,越来越多的网站已经由HTTP迁移到HTTPS安全协议了.HTTPS不但 ...
- 【Endnote】EndnoteX9快速上手教程
想得美,自己慢慢摸索才是硬道理,哪有什么快速上手教程,链接在下面 链接:https://pan.baidu.com/s/1Vtnaz90Iwp3I17M8ijxMWg 密码:ems7
- Debussy 快速上手教程
本文为转载,刚瞄了一眼,应该是在LINUX下的应用快速上手教程.Debussy是个很强大的看V代码及Debug V代码工具.你能方便地看到信号从哪里来到哪里去,比较强大.简单地用,用起来也比较简单.在 ...
- 嵌入式SQL编程快速上手教程
嵌入式SQL编程快速上手教程 声明:我这里标题虽是<嵌入式SQL编程快速上手教程>,但只是嵌入式SQL编程的冰山一角罢了,我会通过举一道简单例题来教小白快速上手嵌入式SQL编程 第一:题目 ...
- 【Scala教程】如何在已掌握的Java知识基础上快速上手Scala?【个人学习记录】
如何在已掌握的Java知识基础上学习Scala 前言 正文开始! 1. 编译运行 2. 声明变量 3. 输出 4. 显式指定变量类型 5. 范围区间 6. 写入文本文件 7. 读取文本文件 8. if ...
- 零基础如何快速上手高精度AI模型开发?
常听技术大佬侃侃而谈AI模型开发,小白不知从何开始? 自动驾驶车辆分割.智慧农业小麦计数.智能硬件垃圾分拣.智慧城市交通流量.结构化文字识别模型定制,这些在视觉.机器学习.OCR等领域具备广泛应用前景 ...
最新文章
- linux 常用命令:
- 从技术角度谈一谈,我参与设计开发的手Q春节红包项目--转
- Go 语言运行时环境变量快速导览
- Oracle 原理: 过程和函数
- 并查集 poj1182
- 已经创建了AWS EC2实例,Linux系统默认没有root用户,那么如何创建root用户并更改为root用户登录呢?
- java web项目中的根路径踩坑
- 7.监控应用和数据可视化 7.1通用健康状态指引器
- 语言模型(NNLM)
- linux cat用法退出,Linux常用命令 - cat命令用法详解
- windows安装exe为系统服务
- Mysql原理篇之索引不懂不要瞎用---04
- 好书推荐 | 2020 年读过的这些好书,建议收藏!
- 旗帜软件工作室年会总结
- Mondly怎么样,Mondly好用吗——Mondly使用评测+七折优惠购买+App Store退订
- java运费模板设计_电商系统设计之运费模板(下)
- 洛谷 P4147 玉蟾宫 题解【悬线dp】
- python中all函数
- Build msm8953+android 7.0
- 周报| 吉吉拍扶微助农助力公益