如何在 CentOS Linux 上安装 DRBD

什么是 DRBD?

DRBD (分布式复制块设备)是基于 Linux 系统的软件包。 它用于通过网络将存储设备从一个节点复制到另一个节点。

它可以为处理灾难恢复和故障转移提供帮助。 DRBD 可以理解为对硬件的高可用,也可以看作是网络共享存储的替代品。

DRBD 是如何工作的?

drbd 设置概述

假设我们想在两个 CentOS 系统上集群一个存储分区,我们在两个系统上都需要一个块设备(如 /dev/sdb1)。 这些系统被定义为主节点和辅助节点(可以切换主节点和辅助节点)。

DRBD 使用虚拟块设备(如 drbd0)来共享两个系统的 /dev/sdb1 块设备。 主节点是安装虚拟驱动器 drbd0 以进行读/写目的的节点。

首先我们需要安装用于创建虚拟磁盘 drbd0 的 DRBD 包。 我们可以将其格式化为 xfs 或 ext3 文件系统以使用 /dev/drbd0 设备。 drbd0 设备配置为在两个系统上使用 /dev/sdb1 块设备。 我们现在只在 drbd0 设备上工作。

由于 drbd0 只能挂载在主节点上,因此一次只能从主节点访问内容。 无论如何,如果主系统崩溃,我们可能会丢失系统文件,但虚拟设备 drbd0 将可用。 我们可以将最初的辅助节点切换为主节点,并且可以再次访问其内容。

在 CentOS 上使用 DRBD

本教程是在 CentOS 7 上执行的,但它也应该适用于其他 CentOS 版本。 阅读此内容以了解如何检查 CentOS 版本。

要求

  • 两个 CentOS 安装系统
  • 两个系统上都有一个像 /dev/sdb1 这样的空闲块设备(最好是相同的大小)
  • Selinux 允许或禁用
  • 防火墙允许端口 7788
  • 节点必须在同一网络内。

安装

在这里,我们通过添加 epel 存储库来跟踪安装,因为 drbd 软件包在 CentOS 发行版中不可用。

$ rpm -ivh https://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm

还要在两个节点上添加 GPG-key。 GPG-key 是用于加密节点之间通信的公钥。

$ rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-elrepo.org

现在我们可以使用 yum 来安装 drbd 包了。 我们必须确定我们的内核支持的 drbd 版本。 检查内核可用的 drbd 版本:

$ yum info *drbd* | grep Name

输出如下:

现在安装所需版本的 drbd 以及必要的内核模块。

$ yum -y install drbd84-utils kmod-drbd84

验证内核模块是否已加载。

$ lsmod | grep -i drbd

如果上述命令的响应给出了空输出,则内核模块没有被加载。 您需要重新启动系统并尝试:

$ modprobe drbd

modprobe 是一个从 Linux 内核中智能地添加或删除模块的命令。 要在每次启动时加载模块, 系统模块加载 使用服务。 因此,在 /etc/modulesload.d 中创建一个名为 drbd.conf 的文件。

$ echo drbd > /etc/modules-load.d/drbd.conf

配置 DRBD

DRBD 配置文件位于 /etc/drbd.d/

默认情况下,/etc/drbd.d/global_common.conf 是全局可用的,其中包含全局或主要配置。 其他配置文件称为资源文件,扩展名为 *.res。

现在我们在两个节点上创建资源配置文件,为我们指定的块设备使用 drbd。

让我们创建名为 linuxhandbook.res 的资源文件

$ vi /etc/drbd.d/linuxhandbook.res

将以下内容复制并粘贴到资源文件中

resource linuxhandbook {
protocol C;          
on node1 {
                device /dev/drbd0;
                disk /dev/sdb1;
                address 10.20.222.14:7788;
                meta-disk internal;
                }
on node2 {
                device /dev/drbd0;
                disk /dev/sdb1;
                address 10.20.222.15:7788;
                meta-disk internal;
                }
} 

这里,

  • linuxhandbook 是资源名称。 资源名称必须始终是唯一的。
  • 协议 C 用于同步通信。 它是完全同步的复制协议。 其他可用的协议是协议 A 和协议 B。
  1. 协议 A:异步复制协议。 通常首选用于长距离网络中的节点。
  2. 协议 B:半同步复制协议。 也称为内存同步协议。
  3. 协议 C:首选用于短距离网络中的节点。
  • node 1 和 node2 是各个节点的主机名。 仅用于识别块。
  • device /dev/drbd0 是创建用作设备的逻辑设备。
  • disk /dev/sdb1 是 drbd0 将占用的物理块设备。
  • 地址 10.20.222.14:7788 和地址 10.20.222.15:7788 分别是打开 tcp 端口 7788 的两个节点的 IP 地址。
  • meta-internal disk 用于定义使用磁盘的内部元数据。

两个节点上的配置必须相同。

现在,我们需要初始化每个节点上的元数据存储:

$ drbdadm create-md linuxhandbook

如果这给出了错误消息,那么您必须手动创建一个虚拟数据文件,然后再执行上述命令。

$ dd if=/dev/zero of=/dev/sdb1 bs=1024k count=1024

dd 命令用于创建指定内存的随机文件。 之后 create-md 命令必须成功。

逻辑设备可用后,将 drbd0 设备附加到两个节点上的 sdb1 磁盘。 查看 lsblk 的输出

$ lsblk

输出应该是这样的

如果没有,则通过资源文件将 drbd0 设备附加到 sdb1 磁盘。

$ drbdadm attach linuxhandbook
or
$ drbdadm up linuxhandbook

Once again try,
$ lsblk

在两个节点上启动并启用 drbd 服务。

$ systemctl start drbd
$ systemctl enable drbd

如果一个节点的 drbd 启动可能很快,而另一个节点则需要一些时间。

设置主节点和辅助节点

DRDB 一次只使用一个节点作为可以进行读写的主节点。

我们首先将节点 1 指定为主节点。

$ drbdadm primary linuxhandbook --force

检查drbd进程的状态:

$ cat /proc/drbd 
or 
$ drbd-overview

输出如下所示:

在这里,我们可以获得的信息是:

  • 目前哪个节点是主要的,哪个是次要的。
  • 数据同步过程。
  • drbd 设备状态,例如:不一致、更新、无盘。

另一个节点node2 自动设置为辅助节点。 查看 drbd 概览进程状态。

我们尚未执行的主要步骤是格式化 drbd0 设备。 这只能在其中一个节点上完成。

在这里,我们使用 mkfs 命令将 drbd0 格式化为 ext3。 xfs 文件系统也可以工作。 我们最好使用与 /dev/sdb1 相同的磁盘类型。

$ mkfs -t ext3 /dev/drbd0

现在,再次在主节点(例如,本教程中的 node1)我们必须挂载 drbd0 设备才能在其上工作。

$ mount /dev/drbd0  /mnt 

you can select your required mount point instead of /mnt. for example, I can mount the /dev/drbd0 device to /var/lib/mysql to use it for mysql database drbd.

笔记: 永远记住过程。 首先,您应该将该节点作为 DRBD 的主要节点。 然后将 drbd0 设备安装到您的系统,您就可以在设备上执行操作。 如果不将节点设置为主节点,则无法挂载 drb0 设备,也无法使用该设备的内容。

测试 DRBD 进程

在两个节点上都设置了 drbd 并且一个节点成为主节点之后。 我们将设备安装到 /mnt 位置。 现在创建一个文件来测试drbd节点的同步。

$ touch  /mnt/drbdtest.txt
$ ll /mnt/

之后,我们将 node1 设置为辅助节点,将 node2 设置为主节点。 该过程类似地反映。 在节点 1(在实例主节点),卸载 /dev/drbd0 设备,使其成为辅助节点。 在 node2(在实例辅助节点),使其成为主节点,并安装到所需位置。

在节点 1:

$ umount  /mnt
$ drbdadm secondary linuxhandbook

在节点 2:

$ drbdadm primary linuxhandbook
$ mount /dev/drbd0  /mnt

在 node2 上成功挂载后,检查 /mnt 文件夹中的文件。 您必须看到 drbdtest.txt 文件(在 node1 创建)。

$ ll  /mnt/

如果你想有 GUI 界面来管理和可视化 drbd 集群节点,你可以使用 LCMC (Linux 集群管理控制台)。

就是这样! 您已在系统中成功实施 DRBD。 如果还有任何疑问,您可以在下面的评论部分发表评论。

作者: Rishi Raj Gautam 是 Linux 爱好者和开源活动家。