如何在 CentOS Linux 上安装 DRBD
本分步教程演示了如何在 CentOS Linux 上安装分布式复制块设备 (DRBD)。
什么是 DRBD?
DRBD(分布式复制块设备)是基于 Linux 系统的软件包。它用于通过网络将存储设备从一个节点复制到另一节点。
它可以提供处理灾难恢复和故障转移的帮助。 DRBD可以理解为硬件的高可用性,可以看作是网络共享存储的替代品。
DRBD 是如何工作的?
假设我们想要在两个 CentOS 系统上集群存储分区,我们需要在两个系统上都有一个块设备(如 /dev/sdb1)。这些系统被定义为主节点和辅助节点(可以切换主节点和辅助节点)。
DRBD 使用虚拟块设备(如 drbd0)来共享两个系统的 /dev/sdb1 块设备。主节点是安装虚拟驱动器 drbd0 以进行读/写的节点。
首先我们需要安装 DRBD 软件包,它用于创建虚拟磁盘 drbd0。我们可以将其格式化为 xfs 或 ext3 文件系统以使用 /dev/drbd0 设备。 drbd0 设备配置为在两个系统上使用 /dev/sdb1 块设备。我们现在仅在 drbd0 设备上工作。
由于 drbd0 只能挂载在 Primary 节点上,因此一次只能从 Primary 节点访问内容。无论如何,如果主系统崩溃,我们可能会丢失系统文件,但虚拟设备 drbd0 将可用。我们可以将最初的辅助节点切换为主节点,并可以再次访问其内容。
在 CentOS 上使用 DRBD
本教程是在 CentOS 7 上执行的,但它也应该适用于其他 CentOS 版本。阅读本文以了解如何检查 CentOS 版本。
要求
两台CentOS安装系统
两个系统上都有像 /dev/sdb1 这样的空闲块设备(最好大小相同)
Selinux 允许或禁用
防火墙允许端口 7788
节点必须位于同一网络内。
安装
这里我们通过添加 epel 存储库来进行安装,因为 drbd 软件包在 CentOS 发行版上不可用。
$ rpm -ivh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm
还要在两个节点上添加 GPG 密钥。 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 内核中智能添加或删除模块的命令。为了使模块在每次启动时加载,使用了systemd-modules-load服务。因此,在 /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 用于指定的块设备。
让我们创建名为 linux.res 的资源文件
$ vi /etc/drbd.d/linux.res
将以下内容复制并粘贴到资源文件中
resource linux {
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;
}
}
这里,
linux 是资源名称。资源名称必须始终是唯一的。
协议C用于同步通信。它是完全同步的复制协议。其他可用的协议有协议 A 和协议 B。
协议A:异步复制协议。通常首选用于长距离网络中的节点。
协议B:半同步复制协议。也称为内存同步协议。
协议C:短距离网络中节点的首选。
节点 1 和节点 2 是各个节点的主机名。仅用于识别块。
device /dev/drbd0 是创建用作设备的逻辑设备。
disk /dev/sdb1 是 drbd0 将占用的物理块设备。
地址 10.20.222.14:7788 和地址 10.20.222.15:7788 是开放 TCP 端口 7788 的两个相应节点的 IP 地址。
元内部磁盘用于定义使用磁盘内部元数据。
两个节点上的配置必须相同。
现在,我们需要初始化每个节点上的元数据存储:
$ drbdadm create-md linux
如果这给出了错误消息,那么您必须手动创建一个虚拟数据文件,然后尝试上面的命令。
$ dd if=/dev/zero of=/dev/sdb1 bs=1024k count=1024
dd命令用于创建指定内存的随机文件。之后create-md命令必须成功。
逻辑设备可用后,将 drbd0 设备附加到两个节点上的 sdb1 磁盘。查看 lsblk 的输出
$ lsblk
输出应该是这样的
如果没有,则通过资源文件将 drbd0 设备附加到 sdb1 磁盘。
$ drbdadm attach linux
or
$ drbdadm up linux
Once again try,
$ lsblk
在两个节点上启动并启用 drbd 服务。
$ systemctl start drbd
$ systemctl enable drbd
如果 drbd 启动对于一个节点可能很快,而对于另一个节点则需要一些时间。
设置主节点和辅助节点
DRDB一次只使用一个节点作为主节点,可以进行读写。
我们首先指定节点 1 作为主节点。
$ drbdadm primary linux --force
检查drbd进程的状态:
$ cat /proc/drbd
or
$ drbd-overview
输出看起来像:
在这里,我们可以获得的信息是:
目前哪个节点是主要节点,哪个节点是次要节点。
数据同步过程。
drbd 设备状态如:不一致、最新、无盘。
另一个节点,node2 会自动设置为辅助节点。查看 drbd 概述进程状态。
我们尚未执行的主要步骤是格式化 drbd0 设备。这只能在其中一个节点上完成。
这里,我们使用 mkfs 命令将 drbd0 格式化为 ext3。 xfs 文件系统也可以工作。最好使用与 /dev/sdb1 相同的磁盘类型。
$ mkfs -t ext3 /dev/drbd0
现在,再次在主节点(例如,本教程中的节点 1)我们必须安装 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/
之后,我们将节点 1 设置为辅助节点,将节点 2 设置为主节点。该过程是类似的镜像。在节点 1(在实例主节点),卸载 /dev/drbd0 设备,使其成为辅助设备。在node2(在实例辅助节点)上,将其设为主节点,并挂载到所需位置。
在节点 1 处:
$ umount /mnt
$ drbdadm secondary linux
在节点 2 处:
$ drbdadm primary linux
$ mount /dev/drbd0 /mnt
在node2成功挂载后,检查/mnt文件夹中的文件。您必须看到 drbdtest.txt 文件(在节点 1 上创建)。
$ ll /mnt/
如果您希望使用 GUI 界面来管理和可视化 drbd 集群节点,可以使用 LCMC(Linux 集群管理控制台)。
就是这样!您已在系统中成功实施 DRBD。如果还有疑问,可以在下方评论区评论。
作者:Rishi Raj Gautam 是一位 Linux 爱好者和开源活动家。