DRBD教程|设置Linux磁盘复制| CentOS的8

时间:2020-01-09 10:38:14  来源:igfitidea点击:

在本文中,我将使用基于KVM的虚拟机在CentOS 8上共享"分步DRBD 9.0安装和配置指南"。

DRBD

DRBD(分布式复制块设备)是一种基于软件的无共享复制存储解决方案,可在主机之间镜像块设备的内容(硬盘,分区,逻辑卷等)。

DRBD镜像数据:

  • 实时:当应用程序修改设备上的数据时,复制会连续进行。

  • "透明地:"应用程序不需要知道数据存储在多个主机上。

  • 同步或者异步:通过同步镜像,在所有(连接的)主机上执行写操作后,将通知应用程序写完成情况。
    通过异步镜像,当本地完成写操作时(通常是在它们传播到其他主机之前),应用程序会收到写完成通知的通知。

Red Hat和CentOS的DRBD支持

  • DRBD由Linbit正式提供。
    我们可以获得免费版本的DRBD软件,但要获得支持,我们必须具有Linbit的有效订阅

  • 红帽不向其红帽网络提供DRBD软件包,但如果我们有Linbit的有效订阅,它们便会正式支持DRBD。

  • 对于CentOS环境,我们可以使用ELPORepo来获得DRBD软件包,这是一个开源社区。

  • 在本DRBD教程中,我们将使用"带有DRBD 9.0的CentOS 8"来设置Linux磁盘复制。

  • 稍后我们将在起搏器2.0集群中使用此DRBD配置

为DRBD配置较低级别的设备

为了在我的DRBD教程中使用DRBD配置来设置Linux磁盘复制,我向所有群集节点中添加了一个5GB的新磁盘/dev/sdb

[root@centos8-2 ~]# lsblk
NAME                   MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda                      8:0    0  20G  0 disk
├─sda1                   8:1    0   1G  0 part /boot
└─sda2                   8:2    0  19G  0 part
  ├─cl_centos8--2-root 253:0    0  17G  0 lvm  /
  └─cl_centos8--2-swap 253:1    0   2G  0 lvm  [SWAP]
sdb                      8:16   0   5G  0 disk

这将成为DRBD资源的"下层设备"。
为此,我们可以使用系统上找到的任何类型的阻止设备。
典型示例包括:

  • 硬盘分区(或者完整的物理硬盘),

  • 一个软件RAID设备,

  • LVM逻辑卷或者由Linux设备映射器基础结构配置的任何其他块设备,

  • 在系统上找到的任何其他块设备类型。

在我们的DRBD教程中,我们将继续进行用于DRBD配置的"逻辑卷解决方案"

使用/dev/sdb创建一个新的物理卷

[root@centos8-2 ~]# pvcreate /dev/sdb
  Physical volume "/dev/sdb" successfully created.

目前,我的"卷"组中没有"可用空间"

[root@centos8-2 ~]# vgs
  VG           #PV #LV #SN Attr   VSize   VFree
  cl_centos8-2   1   2   0 wz--n- <19.00g    0

我已经有一个卷组,因此我将通过在所有三个群集节点上添加新的物理卷来"扩展卷组"

[root@centos8-2 ~]# vgextend cl_centos8-2 /dev/sdb
  Volume group "cl_centos8-2" successfully extended

接下来,我将为我的DRBD配置"创建逻辑卷"以设置跨群集节点的Linux磁盘复制。

[root@centos8-2 ~]# lvcreate -L 4G -n drdb-1 cl_centos8-2
  Logical volume "drdb-1" created.

说明:

并非必须为DRBD配置使用相同的卷组和逻辑卷名称。
例如,在我的情况下,以下是来自3个群集节点的逻辑卷路径和名称,这些节点均在不同的VG下,尽管LV名称相同,但同样不是必须的。

/dev/cl_centos8-2/drdb-1
/dev/cl_centos8-3/drdb-1
/dev/cl_centos8-4/drdb-1

从ELREPO安装DRBD 9.0

  • 默认情况下,ELREPO在CentOS服务器上不可用。

  • 要安装ELREPO,首先应"导入GPG密钥",否则GPG检查将在以后失败。

  • 由于我的群集节点位于无法访问Internet的专用网络中,因此我使用elrepo软件包创建了一个脱机存储库。

  • 使用NFS服务器在我的专用网络上共享此存储库

  • 我们可以直接继续在计划设置Linux磁盘复制的所有服务器上安装elpo-release rpm

[root@repo-server ~]# rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org

接下来安装用于CentOS 8发行版的ELPO存储库

提示:

我们也可以在RHEL 8上使用此存储库,但这将不会得到正式支持。
如果我们使用的是RHEL 8,则应使用" Linbit"提供的DRBD。

[root@repo-server ~]# rpm -Uvh  https://www.elrepo.org/elrepo-release-8.el8.elrepo.noarch.rpm
Retrieving https://www.elrepo.org/elrepo-release-8.el8.elrepo.noarch.rpm
Verifying...                          ################################# [100%]
Preparing...                          ################################# [100%]
Updating/installing...
   1:elrepo-release-8.1-1.el8.elrepo  ################################# [100%]

对于" RHEL环境",我们可以创建一个Repo文件" /etc/yum.repos.d/linbit.repo"以反映以下更改。

[drbd-9.0]
name=DRBD 9.0
baseurl=http://packages.linbit.com/<hash>/yum/rhel7/drbd-9.0/<arch>
gpgcheck=0

重要的提示:

我们将不得不填充 <hash><arch>变量。
"这是由LINBIT支持服务提供的。
"

在所有群集节点上都安装了elpo-release rpm后,请使用dnf查找drbd软件包。

[root@centos8-2 ~]# dnf search drbd
============================================================== Name & Summary Matched: drbd ===============================================================
kmod-drbd90.x86_64 : drbd90 kernel module(s)
collectd-drbd.x86_64 : DRBD plugin for collectd
drbd90-utils.x86_64 : Management utilities for DRBD
drbd90-utils-sysvinit.x86_64 : The SysV initscript to manage the DRBD.
drbdlinks.noarch : Program for managing links into a DRBD shared partition

因此,有可用的drbd软件包。

我们将在所有集群节点上安装kmod-drbd90drbd90-utils

[root@centos8-2 ~]# dnf install kmod-drbd90.x86_64 drbd90-utils.x86_64 -y

DRBD配置

DRBD的所有方面都在其配置文件/etc/drbd.conf中进行控制。
通常,此配置文件只是具有以下内容的框架:

[root@centos8-2 ~]# 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";

按照约定,/etc/drbd.d/global_common.conf包含DRBD配置的全局和公共部分,而.res文件每个都包含一个资源部分。

示例DRBD配置文件

我们将在/usr/share/doc/packages/drbd下获得一个示例DRBD配置文件。
我将附上该drbd配置文件的副本以供参考。

drbd.conf.example

配置global_common.conf

我们将在DRBD教程中提供一个简单的global_common.conf,其中包含以下条目:

[root@centos8-2 ~]# cat /etc/drbd.d/global_common.conf
global {
 usage-count no;
}
common {
 net {
  protocol C;
 }
}

使用次数usage-count

  • 每次在系统中安装新版本的软件时,全局部分中的"使用计数"无行将跳过向DRBD团队发送通知的过程。

  • 如果要从系统提交信息,可以将其更改为"是"。

  • 或者,我们可以将其更改为在每次升级时询问是否要提示我们做出决定。

  • 无论哪种方式,我们都应该知道他们仅将此信息用于统计分析,并且始终可以在http://usage.drbd.org/cgi-bin/show_usage.pl上向公众公开其报告。

协议C protocol C

  • 协议C行告诉DRBD资源使用完全同步复制

  • 这意味着,只有在确认了本地和远程磁盘写入后,才可以认为在充当主要节点的节点上进行本地写入操作已完成。

  • 因此,如果遇到单个节点丢失的情况,那么在正常情况下,这不会导致任何数据丢失,除非两个节点(或者其存储子系统)同时不可逆转地被破坏。

将此文件global_common.conf复制到所有集群节点。

[root@centos8-2 ~]# scp /etc/drbd.d/global_common.conf centos8-3:/etc/drbd.d/
[root@centos8-2 ~]# scp /etc/drbd.d/global_common.conf centos8-4:/etc/drbd.d/

创建DRBD资源

  • 每个资源的配置文件通常命名为/etc/drbd.d/&lt;resource> .res

  • 我们定义的任何DRBD资源都必须通过在配置中指定资源名称来命名。

  • 在我们的DRBD教程中,我们将资源命名为drbd1

  • 每个资源配置还必须"在主机子节中至少有两个",每个集群节点一个。

  • 所有其他配置设置都可以从公共部分继承(如果存在),也可以从" DRBD"的默认设置继承而来。

以下是我的示例DRBD资源配置文件

[root@centos8-2 ~]# cat /etc/drbd.d/drbd1.res
resource drbd1 {
 meta-disk internal;
 device /dev/drbd1;
 net {
  verify-alg sha256;
 }
 on centos8-2.example.com {   		<-- hostname must match `uname -n` output
  node-id   0;				<-- Assign a unique node-id
  disk   /dev/cl_centos8-2/drdb-1;	<-- Logical Volume on the provided host
  address  192.168.122.10:7789;		<-- IP Address to be used to connect to the node with port
 }
 on centos8-3.example.com {
  node-id   1;
  disk   /dev/cl_centos8-3/drdb-1;
  address  192.168.122.11:7789;
 }
 on centos8-4.example.com {
  node-id   2;
  disk  /dev/cl_centos8-4/drdb-1;
  address  192.168.122.12:7789;
 }
 connection-mesh {
  hosts centos8-2 centos8-3 centos8-4;
 }
}
  • 默认情况下,DRBD使用7788-7790之间的端口,我们在DRBD教程中将内部通信的端口号明确定义为7789.

  • 我们必须确保该端口可以通过防火墙访问。

  • 我们有一个"全局"部分,其中提供了所有服务器上通用的值

  • 我们的DRBD设备资源为/dev/drbd1,即来自所有集群节点的逻辑卷将使用/dev/drbd1执行Linux磁盘复制

  • 在带有DRBD的Linux服务器上,我们可以在/dev/drbd *下看到可用的设备。

  • 我们将使用sha256算法进行同步验证。
    我们可以在系统的内核配置中选择内核加密API支持的任何摘要算法。

请遵循drbd9.X手册页以获取受支持参数的完整列表。

其中

on host-name [...]			
							Define the properties of a resource on a particular host or set of hosts.
							The host-name argument must match the Linux host name (uname -n).
 node-id value				
							Defines the unique node identifier for a node in the cluster. 
							The node-id parameter exists since DRBD 9. Its value ranges from 0 to 16; 
							there is nodefault.
							
 disk {[disk] | none}		
							Define the lower-level block device that DRBD will use for storing the actual data. 
							While the replicated drbd device is configured, the lower-level device must not be
							used directly. 
							
 address [address-family] address:port
							Defines the address family, address, and port of a connection endpoint.

创建并启用DRBD资源

接下来,我们必须将DRBD资源文件复制到所有群集节点。

[root@centos8-2 ~]# scp /etc/drbd.d/drbd1.res centos8-3:/etc/drbd.d/
root@centos8-3's password:
drbd1.res                                                                                                                100%  492   291.8KB/s   00:00
[root@centos8-2 ~]# scp /etc/drbd.d/drbd1.res centos8-4:/etc/drbd.d/
root@centos8-4's password:
drbd1.res                                                                                                                100%  492   376.7KB/s   00:00
  • 完成前面各节概述的初始资源配置后,可以启动资源。

  • 当我们较早安装DRBD时,也安装了名为drbdadm的实用程序

  • " drbdadm"旨在用于管理DRBD资源,例如我们新配置的卷

  • DRBD教程和Linux磁盘复制中启动和使DRBD资源联机的第一步是初始化其元数据

  • 注意,需要/var/lib/drbd目录。
    如果它不是以前在安装DRBD时创建的,请在继续操作之前手动创建它

# mkdir /var/lib/drbd

必须在所有群集节点上完成以下每个步骤。

[root@centos8-2 ~]# drbdadm create-md drbd1
md_offset 4294963200
al_offset 4294930432
bm_offset 4294799360
Found some data
 ==> This might destroy existing data! <==
Do you want to proceed?
[need to type 'yes' to confirm] yes
initializing activity log
initializing bitmap (128 KB) to all zero
Writing meta data...
New drbd meta data block successfully created.

这样我们的DRBD设备/dev/drbd1就准备好了。
在其他集群节点上重复相同的步骤以进行DRBD配置

[root@centos8-3 ~]# drbdadm create-md drbd1
[root@centos8-4 ~]# drbdadm create-md drbd1

提示:

如果未定义" connection"或者" connection-mesh",则可能会获得"使用显式的" connection"部分(或者" connection-mesh"部分)以及两个以上的" on"部分)。
在设置drbd 9.X时使用资源

为DRBD设置防火墙

由于我们在DRBD配置中的所有群集节点之间使用了自定义端口7789进行通信,因此必须在所有群集节点上的防火墙规则中允许端口7789来跨服务器设置Linux磁盘复制

[root@centos8-3 ~]# firewall-cmd --add-port 7789/tcp --permanent
[root@centos8-3 ~]# firewall-cmd --reload

启用DRBD设备

下一步由drbd配置组成,包括启用drbd1资源,以完成为其操作分配磁盘和网络资源:

[root@centos8-2 ~]# drbdadm up drbd1
[root@centos8-3 ~]# drbdadm up drbd1
[root@centos8-4 ~]# drbdadm up drbd1

检查DRBD设备状态

现在," drbdadm"状态输出应包含与以下与Linux磁盘复制相关的信息类似的信息:

[root@centos8-2 ~]# drbdadm status drbd1
drbd1 role:Secondary
  disk:Inconsistent
  centos8-3.example.com connection:Inconsistent
  centos8-4.example.com connection:Inconsistent

到目前为止,DRBD已成功分配了磁盘和网络资源,并可以在我们的DRBD教程中进行操作。

说明:

如果我们以对等KVM节点的状态连接,则表示该节点正在等待,直到对等节点在网络上可见。
检查防火墙规则,以确保防火墙没有阻止连接。
我们可以通过在受影响的KVM群集节点上使用systemctl stop firewalld暂时禁用防火墙,并使用drbdadm down &lt;resource>drbdadm up &lt;resource>重新启动DRBD资源。
如果drbd状态更改,则意味着防火墙很可能是问题。
接下来,我们必须检查防火墙策略和系统日志/var/log/messages以获取更多调试信息。

配置DRDB主服务器

  • 请注意,该设备的状态显示为不一致,因为我们"尚未指示哪些DRBD设备将充当主要设备",而哪个DRBD设备将充当次要设备。

  • 必须仅在一个节点上,仅在初始资源配置上以及仅在我们选择作为同步源的节点上执行此步骤。

  • 要执行此步骤,请从我们要用作"主节点"的服务器上发出此命令

[root@centos8-2 ~]# drbdadm primary --force drbd1
  • 发出此命令后,初始"完全同步将开始" Linux磁盘复制。

  • 我们将可以通过drbdadm status &lt;resource>监视其进度。

  • 取决于设备的大小," drbd"同步可能需要一些时间。

因此我们的DRBD设备将把" centos8-2"作为主要对象,并将在其他KVM节点之间同步"/dev/drbd1"的数据

[root@centos8-2 ~]# drbdadm status drbd1
drbd1 role:Primary
  disk:UpToDate
  centos8-3.example.com role:Secondary
    replication:SyncSource peer-disk:Inconsistent done:2.91
  centos8-4.example.com role:Secondary
    replication:SyncSource peer-disk:Inconsistent done:2.88

到目前为止,即使在Linux磁盘复制完成之前,DRBD设备也可以完全运行。
几分钟后检查状态

[root@centos8-2 ~]# drbdadm status drbd1
drbd1 role:Primary
  disk:UpToDate
  centos8-3.example.com role:Secondary
    peer-disk:UpToDate
  centos8-4.example.com role:Secondary
    peer-disk:UpToDate

我们可以检查"跨所有群集节点"的设备映射。

[root@centos8-2 ~]# ls -l /dev/drbd/by-disk/cl_centos8-2/drdb-1
lrwxrwxrwx 1 root root 14 Jan  2 12:05 /dev/drbd/by-disk/cl_centos8-2/drdb-1 -> ../../../drbd1
[root@centos8-3 ~]# ls -l /dev/drbd/by-disk/cl_centos8-3/drdb-1
lrwxrwxrwx 1 root root 14 Jan  2 12:06 /dev/drbd/by-disk/cl_centos8-3/drdb-1 -> ../../../drbd1
[root@centos8-4 ~]# ls -l /dev/drbd/by-disk/cl_centos8-4/drdb-1
lrwxrwxrwx 1 root root 14 Jan  2 12:06 /dev/drbd/by-disk/cl_centos8-4/drdb-1 -> ../../../drbd1

启用双主节点(可选)

  • 双主要模式允许资源"在多个节点上同时承担主要角色"。

  • 双主模式要求将资源配置为同步复制("协议C")。
    因此,它对延迟敏感,并且不适用于WAN环境。

  • 此外,由于两种资源始终都是主要资源,因此KVM节点之间网络的任何中断都将导致脑裂。

  • 在本DRBD教程中,"我们将使用单个主节点",并且这些步骤仅用于演示。

  • 要启用双主要模式,请在资源配置的net部分中将allow-two-primaries选项设置为`yes':

resource <resource>
  net {
    protocol C;
    allow-two-primaries yes;
    fencing resource-and-stonith;
  }
  • 接下来,在所有群集节点上更新此配置文件。

  • 如果我们像往常一样对现有资源进行此更改,则将drbd.conf与同级同步,

  • 在所有集群节点上执行以下命令`

# drbdadm adjust <resource>

在DRBD设备上创建文件系统

  • 接下来,我们将"在我们的DRBD设备上创建一个文件系统"以能够执行读写操作。

  • 我将在/dev/drbd1上创建ext4文件系统。

  • 在任何一个群集节点上都需要执行此步骤,并且由于DRBD已经在运行,因此更改将被复制到整个副本上

[root@centos8-2 ~]# mkfs.ext4 /dev/drbd1
mke2fs 1.44.6 (5-Mar-2019)
Discarding device blocks: done
Creating filesystem with 1048503 4k blocks and 262144 inodes
Filesystem UUID: e4f134c7-6ef5-4508-9d11-358a030e19a8
Superblock backups stored on blocks:
        32768, 98304, 163840, 229376, 294912, 819200, 884736
Allocating group tables: done
Writing inode tables: done
Creating journal (16384 blocks): done
Writing superblocks and filesystem accounting information: done

现在,可以像往常一样在我们的DRBD教程中使用DRBD资源。
我们现在可以将其"挂载"到挂载点上,然后开始将文件保存到该挂载点上。

在所有集群节点上创建具有相同名称的安装点

[root@centos8-2 ~]# mkdir /share
[root@centos8-3 ~]# mkdir /share
[root@centos8-4 ~]# mkdir /share

接下来,我们可以将共享手动安装到群集节点之一上的安装点

[root@centos8-2 ~]# mount /dev/drbd1 /share
[root@centos8-2 ~]# df -h /share/
Filesystem      Size  Used Avail Use% Mounted on
/dev/drbd1      3.9G   16M  3.7G   1% /share