前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >玩转企业集群运维管理系列(十五):DRBD 原理与部署实践

玩转企业集群运维管理系列(十五):DRBD 原理与部署实践

作者头像
民工哥
发布2023-12-19 18:47:53
发布2023-12-19 18:47:53
1.3K00
代码可运行
举报
运行总次数:0
代码可运行

DRBD简介

DRBD(Distributed Replicated Block Device):叫做分布式复制块设备,这是一种基于软件,无共享,复制的解决方案。在服务器之间的块设备(包括硬盘、分区、逻辑卷)进行镜像。也就是说当某一个应用程序完成写操作后,它提交的数据不仅仅会保存在本地块设备上,DRBD也会将这份数据复制一份,通过网络传输到另一个节点的块设备上,这样,两个节点上的块设备上的数据将会保存一致,这就是镜像功能。

DRBD是如何工作的呢?

(DRBD Primary)负责接收数据,把数据写到本地磁盘并发送给另一台主机(DRBD Secondary)。另一个主机再将数据存到自己的磁盘中。目前,DRBD每次只允许对一个节点进行读写访问,但这对于通常的故障切换高可用集群来说已经足够用了。有可能以后的版本支持两个节点进行读写存取。

DRBD工作原理图

一般情况下文件写入磁盘的步骤是: 写操作 --> 文件系统 --> 内存缓存中 --> 磁盘调度器 --> 磁盘驱动器 --> 写入磁盘。而DRBD的工作机制如上图所示,数据经过buffer cache后有内核中的DRBD模块通过tcp/ip协议栈经过网卡和对方建立数据同步。更多关于企业集群运维管理系列的学习文章,请参阅:玩转企业集群运维管理专栏,本系列持续更新中。

DRBD与HA的关系

一个DRBD系统由两个节点构成,与HA集群类似,也有主节点和备用节点之分,在带有主要设备的节点上,应用程序和操作系统可以运行和访问DRBD设备(/dev/drbd*)。在主节点写入的数据通过DRBD设备存储到主节点的磁盘设备中,同时,这个数据也会自动发送到备用节点对应的DRBD设备,最终写入备用节点的磁盘设备上,在备用节点上,DRBD只是将数据从DRBD设备写入到备用节点的磁盘中。

现在大部分的高可用性集群都会使用共享存储,而DRBD也可以作为一个共享存储设备,使用DRBD不需要太多的硬件的投资。因为它在TCP/IP网络中运行,所以,利用DRBD作为共享存储设备,要节约很多成本,因为价格要比专用的存储网络便宜很多;其性能与稳定性方面也不错

DRBD的特性

DRBD具有如下特性:

  • 实时性:当某个应用程序完成对数据的修改时,复制功能立即发生
  • 透明性:应用程序的数据存储在镜像块设备上是独立透明的,他们的数据在两个节点上都保存一份,因此,无论哪一台服务器宕机,都不会影响应用程序读取数据的操作,所以说是透明的。
  • 同步镜像和异步镜像:同步镜像表示当应用程序提交本地的写操作后,数据后会同步写到两个节点上去;异步镜像表示当应用程序提交写操作后,只有当本地的节点上完成写操作后,另一个节点才可以完成写操作。
DRBD与RAID1区别

RAID1也是实现不同存储设备间的数据镜像备份的,不同的是RAID1各存储设备是连接一个RAID控制器接入到一台主机上的,而DRBD是通过网络实现不同节点主机存储设备数据的镜像备份。

DRBD的用户空间管理工具

为了能够配置和管理drbd的资源,drbd提供了一些管理工具与内核模块进行通信

drbdadm:高级的DRBD程序管理套件工具。它从配置文件/etc/drbd.conf中获取所有配置参数。drbdadm为drbdsetup和drbdmeta两个命令充当程序的前端应用,执行drbdadm实际是执行的drbdsetup和drbdeta两个命令。

drbdsetup:drbdsetup可以让用户配置已经加载在内核中运行的DRBD模块,它是底层的DRBD程序管理套件工具。使用该命令时,所有的配置参数都需要直接在命令行中定义,虽然命令很灵活,但是大大的降低了命令的简单易用性,因此很多的用户很少使用drbdsetup。

drbdmeta:drbdmeta允许用户创建、转储、还原和修改drbd的元数据结构。这个命令也是用户极少用到。

DRBD的模式

DRBD有2中模式,一种是DRBD的主从模式,另一种是DRBD的双主模式。

DRBD的主从模式

这种模式下,其中一个节点作为主节点,另一个节点作为从节点。其中主节点可以执行读、写操作;从节点不可以挂载文件系统,因此,也不可以执行读写操作。在这种模式下,资源在任何时间只能存储在主节点上。这种模式可用在任何的文件系统上(EXT3、EXT4、XFS等等)。默认这种模式下,一旦主节点发生故障,从节点需要手工将资源进行转移,且主节点变成从节点和从节点变成主节点需要手动进行切换。不能自动进行转移,因此比较麻烦。

为了解决手动将资源和节点进行转移,可以将DRBD做成高可用集群的资源代理(RA),这样一旦其中的一个节点宕机,资源会自动转移到另一个节点,从而保证服务的连续性。

DRBD的双主模式

这是DRBD8.0之后的新特性

在双主模式下,任何资源在任何特定的时间都存在两个主节点。这种模式需要一个共享的集群文件系统,利用分布式的锁机制进行管理,如GFS和OCFS2。部署双主模式时,DRBD可以是负载均衡的集群,这就需要从两个并发的主节点中选取一个首选的访问数据。这种模式默认是禁用的,如果要是用的话必须在配置文件中进行声明。

DRBD的同步协议

DRBD的复制功能就是将应用程序提交的数据一份保存在本地节点,一份复制传输保存在另一个节点上。但是DRBD需要对传输的数据进行确认以便保证另一个节点的写操作完成,就需要用到DRBD的同步协议,DRBD同步协议有三种:

协议A:数据在本地完成写操作且数据已经发送到TCP/IP协议栈的队列中,则认为写操作完成。如果本地节点的写操作完成,此时本地节点发生故障,而数据还处在TCP/IP队列中,则数据不会发送到对端节点上。因此,两个节点的数据将不会保持一致。这种协议虽然高效,但是并不能保证数据的可靠性。

协议B:数据在本地完成写操作且数据已到达对端节点则认为写操作完成。如果两个节点同时发生故障,即使数据到达对端节点,这种方式同样也会导致在对端节点和本地节点的数据不一致现象,也不具有可靠性。

协议C:只有当本地节点的磁盘和对端节点的磁盘都完成了写操作,才认为写操作完成。这是集群流行的一种方式,应用也是最多的,这种方式虽然不高效,但是最可靠。

DRBD的资源

在DRBD中,资源是所有可复制移动存储设备的总称,它包括:

  • 资源名称:资源名称可以是除了空白字符以外的任意ASCII码字符
  • DRBD设备:DRBD的虚拟块设备。在双方节点上,DRBD设备的设备文件命名方式;一般为/dev/drbdN,其主设备号147,N是次设备号
  • 磁盘配置:DRBD内部应用需要本地数据副本,元数据。在双方节点上,为各自提供的存储设备。
  • 网络配置:双方数据同步时所使用的网络属性;

metadata

DRBD将数据的各种信息块保存在一个专用的区域里,这些metadata包括了:

  • DRBD设备的大小
  • 产生的标识
  • 活动日志
  • 快速同步的位图

metadata的存储方式有内部和外部两种方式,使用哪种配置都是在资源配置中定义的。

内部meta data
  • 内部metadata存放在同一块硬盘或分区的最后的位置上。
  • 优点:metadata和数据是紧密联系在一起的,如果硬盘损坏,metadata同样就没有了,同样在恢复的时候,metadata也会一起被恢复回来。
  • 缺点:metadata和数据在同一块硬盘上,对于写操作的吞吐量会带来负面的影响,因为应用程序的写请求会触发metadata的更新,这样写操作就会造成两次额外的磁头读写移动。
外部meta data
  • 外部的metadata存放在和数据磁盘分开的独立的块设备上。
  • 优点:对于一些写操作可以对一些潜在的行为提供一些改进。
  • 缺点:metadata和数据不是联系在一起的,所以如果数据盘出现故障,在更换新盘的时候就需要人为的干预操作来进行现有node对新硬盘的同步了。

DRBD 部署配置

环境布置
  • 系统版本、软件:vmworkstation、CENTOS 7.3
  • 虚拟机及IP:两台虚拟机node3(10.0.0.5)、node4(10.0.0.6)
  • 软件包:yum安装kmod-drbd84、drbd84-utils(包要同版本)
通信、同步配置

⑴、修改node3、nide4的hosts文件,通过此文件解析到主机IP

⑵、ssh免密登入

代码语言:javascript
代码运行次数:0
复制
[root@node3 ~]#ssh-keygen 
#多次回车直到密钥创建完成
[root@node3 ~]#ssh-copy-id  node4

⑶、设置两台服务器时钟服务器

代码语言:javascript
代码运行次数:0
复制
[root@node3 ~]# crontab -l
*/5 * * * * ntpdate cn.pool.ntp.org #在node3
[root@node4 ~]# crontab -l
*/5 * * * * ntpdate cn.pool.ntp.org #在node4

⑷、关闭防火墙和SELINUX

安装elrepo源,安装drbd
代码语言:javascript
代码运行次数:0
复制
[root@node3 ~]# rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
[root@node3 ~]# rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm
[root@node3 ~]# yum install -y kmod-drbd84 drbd84-utils

在两台虚拟机服务器上个各添加一块大小相同磁盘,重启虚拟机

两台服务器配置drbd配置文件
代码语言:javascript
代码运行次数:0
复制
[root@node3 ~]# cat /etc/drbd.conf ##不用改动此文件
# You can find an example in  /usr/share/doc/drbd.../drbd.conf.example
 
include "drbd.d/global_common.conf";
include "drbd.d/*.res";
代码语言:javascript
代码运行次数:0
复制
#配置全局配置文件
[rootglob@node3 ~]# cat /etc/drbd.d/global_common.conf
 global {
usage-count no;  
# minor-count dialog-refresh disable-ip-verification
 }

common {
    protocol C; #使用DRBD的同步协议
    handlers {
        pri-on-incon-degr "/usr/lib/drbd/notify-pri-on-incon-degr.sh; /usr/lib/drbd/notify-emergency-reboot.sh; echo b > /proc/sysrq-trigger ; reboot -f";
        pri-lost-after-sb "/usr/lib/drbd/notify-pri-lost-after-sb.sh; /usr/lib/drbd/notify-emergency-reboot.sh; echo b > /proc/sysrq-trigger ; reboot -f";
        local-io-error "/usr/lib/drbd/notify-io-error.sh; /usr/lib/drbd/notify-emergency-shutdown.sh; echo o > /proc/sysrq-trigger ; halt -f";
    }
    startup {
       
    }
    options {
      
    }
    disk {
        on-io-error detach; 
 
    }
    net {
    
    }
    syncer {
        rate 1024M;   
    }
代码语言:javascript
代码运行次数:0
复制
##创建资源配置文件
cat /etc/drbd.d/mysql.res 
resource mysql { #资源名称
protocol C; #使用协议
meta-disk internal;
device /dev/drbd1; #DRBD设备名称
syncer {
verify-alg sha1;# 加密算法
}
net {
allow-two-primaries;
}
on node3 {
disk /dev/sdb; drbd1使用的磁盘分区为"mysql",指定新加的磁盘
address 10.0.0.5:7789; #设置DRBD监听地址与端口
}
on node4 {
disk /dev/sdb;
address 10.0.0.6:7789;
}
}
代码语言:javascript
代码运行次数:0
复制
##在node4也使用相同的配置
[root@node3 ~]# scp -p global_common.conf  mysql.res
启动brbd内核模块、创建启动资源、查看磁盘状态
代码语言:javascript
代码运行次数:0
复制
#node3、node4查看内核模块是否已经加载
[root@node3 ~]# lsmod | grep drbd
#没有则主动加载
[root@node3 ~]# modprobe drbd 
#如果显示没有此模块是因为系统内核版本太低,不支持模块需要升级
#执行可以用 yum install kernel* 方式来更新
#也可以 yum kernel-devel kernel kernel-headers -y 
##########################node4相同操作######################################
代码语言:javascript
代码运行次数:0
复制
#创建资源
[root@node3 ~]#  drbdadm create-md mysql
initializing activity log
initializing bitmap (160 KB) to all zero
Writing meta data...
New drbd meta data block successfully created.
#启动资源、指定本机为primary
[root@node3 ~]# drbdadm up mysql
[root@node3 ~]# drbdadm -- --force primary mysql

#node4
[root@node4 ~]# drbdadm create-md mysql
[root@node4 ~]# drbdadm up mysql

更多关于企业集群运维管理系列的学习文章,请参阅:玩转企业集群运维管理专栏,本系列持续更新中。

代码语言:javascript
代码运行次数:0
复制
[root@nod4 ~]# drbdadm dstate mysql
#Inconsistent/Inconsistent
#本地和对等节点的硬盘有可能为下列状态之一:
#Diskless 无盘:本地没有块设备分配给DRBD使用,这表示没有可用的设备,或者使用drbdadm命令手工分离或是底层的I/O错误导致自动分离
#Attaching:读取无数据时候的瞬间状态
#Failed 失败:本地块设备报告I/O错误的下一个状态,其下一个状态为Diskless无盘
#Negotiating:在已经连接的DRBD设置进行Attach读取无数据前的瞬间状态
#Inconsistent:数据是不一致的,在两个节点上(初始的完全同步前)这种状态出现后立即创建一个新的资源。此外,在同步期间(同步目标)在一个节点上出现这种状态
#Outdated:数据资源是一致的,但是已经过时
#DUnknown:当对等节点网络连接不可用时出现这种状态
#Consistent:一个没有连接的节点数据一致,当建立连接时,它决定数据是UpToDate或是Outdated
#UpToDate:一致的最新的数据状态,这个状态为正常状态

格式化drbd磁盘
代码语言:javascript
代码运行次数:0
复制
[root@node3 ~]# mkfs.xfs /dev/drbd1
...
挂载/dev/drbd1磁盘到primary
代码语言:javascript
代码运行次数:0
复制
[root@node3 ~]# mkdir /data
[root@node3 ~]# mount /dev/drbd1 /data

简单测试drbr高可用

代码语言:javascript
代码运行次数:0
复制
##先在主从结点上创建一个文件,在从节点同样创建一个/data目录
[root@node3 data]# echo "11111" > 123.txt
[root@node4 /]#mkdir data
##先把主结点降为从结点(先卸载才能变为从):
[root@node3 etc]# umount /data/
[root@node3 etc]# drbdadm secondary mysql
[root@node3 etc]# drbd-overview
NOTE: drbd-overview will be deprecated soon.
Please consider using drbdtop.
 1:mysql/0  Connected Secondary/Secondary UpToDate/UpToDate
##
[root@node4 ~]# drbdadm primary mysql
You have new mail in /var/spool/mail/root
[root@node4 ~]# drbd-overview 
NOTE: drbd-overview will be deprecated soon.
Please consider using drbdtop.
 
 1:mysql/0  Connected Primary/Secondary UpToDate/UpToDate 

##然后我们挂载试一下:
[root@node3 ~]# mount /dev/drbd1 /data/
[root@node3 ~]# cat /data/123.txt
11111

到此为止drbd的一般搭建就完成了。

参考链接:https://blog.csdn.net/sj349781478/ article/details/77893474 https://blog.51cto.com /bluesrer/1977153

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-12-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 民工哥技术之路 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • DRBD简介
  • DRBD是如何工作的呢?
  • DRBD与HA的关系
  • DRBD的特性
    • DRBD与RAID1区别
  • DRBD的用户空间管理工具
  • DRBD的模式
    • DRBD的主从模式
    • DRBD的双主模式
  • DRBD的同步协议
  • metadata
  • DRBD 部署配置
    • 环境布置
    • 通信、同步配置
    • 安装elrepo源,安装drbd
    • 两台服务器配置drbd配置文件
    • 启动brbd内核模块、创建启动资源、查看磁盘状态
    • 格式化drbd磁盘
    • 挂载/dev/drbd1磁盘到primary
    • 简单测试drbr高可用
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档