概要
-
DRBD 简介 -
DRBD 安装及测试 -
DRBD与pacemaker集成
一、DRBD 简介
1、DRBD基础
DRBD的全称为:Distributed Replicated Block Device(DRBD)分布式块设备复制。DRBD是一个基于软件的、无共享、复制存储解决方案,它在主机之间镜像块设备(硬盘、分区、逻辑卷等)的内容。可以简单的看作是一种网络RAID-1。
DRBD镜像数据
-
实时: 当应用程序修改设备上的数据时,数据的副本更改是连续进行的。 -
透明: 应用程序不会意识到数据实际上是存储在多台主机上的。 -
同步 or 异步: 当使用同步镜像数据时,只有在所有(连接上的)主机上都完成写操作后,才会通知应用程序写完成。当使用异步镜像数据时,在本地完成写入时(通常在镜像数据传输到其他节点前),就会通知应用程序写入完成。
DRBD工作原理
DRBD的核心功能是通过Linux内核模块实现的。具体来说,DRBD构成虚拟块设备的驱动程序,因此DRBD位于系统的I/O堆栈的底部附近。因此,DRBD非常灵活和通用,这使得它成为一个复制解决方案,适合为几乎任何应用程序添加高可用性。
根据定义和Linux内核体系结构的要求,DRBD与上面各层无关。因此,DRBD不可能奇迹般地向上层添加它们不具备的特性。例如,DRBD无法自动检测文件系统损坏,也无法向ext3或XFS等文件系统添加活动群集功能。
原理架构图如下:
2、DRBD特征
DRBD两种模式
1、单主模式
在单一主模式下,资源在任何给定的时间仅在一个群集成员上处于主角色。由于可以保证在任何时候只有一个集群节点操作数据,因此这种模式可以用于任何传统的文件系统(ext3、ext4、XFS等)。
在单一主模式下部署DRBD是高可用性(支持故障转移)集群的规范方法。
2、双主模式
在双主模式下,资源在任何给定时间都处于两个群集节点上的主角色。由于可以并发访问数据,因此模式需要依赖使用分布式锁管理器的共享群集文件系统。示例包括GFS和OCFS2。
在双主模式下部署DRBD是负载均衡集群的首选方法,这种集群需要从两个节点并发访问数据,例如需要实时迁移的虚拟化环境。此模式在默认情况下是禁用的,并且必须在DRBD的配置文件中显式启用。
主备说明
主的DRBD设备可以不受限制地用于读写操作。它可用于创建和装载文件系统、原始或直接I/O到块设备等。
备的DRBD设备接收来自对等节点设备的所有更新,但在其他情况下完全不允许访问。它不能被应用程序使用,也不能用于读写访问。甚至不允许对设备进行只读访问的原因是必须保持缓存一致性,如果以任何方式访问辅助资源,这是不可能的。
DRBD的复制模式
DRBD支持三种不同的复制模式,允许三种程度的复制同步性。
-
Protocol A 异步复制协议。一旦本地磁盘写入完成,并且复制数据包已放置在本地TCP发送缓冲区中,则认为主节点上的本地写入操作已完成。在强制故障转移的情况下,可能会发生数据丢失。备用节点上的数据在故障转移后是一致的;但是,在崩溃之前执行的最新更新可能会丢失。Protocol A最常用于远程复制场景。当与DRBD Proxy结合使用时,它是一个有效的灾难恢复解决方案 -
Protocol B 内存同步(半同步)复制协议。一旦本地磁盘写入发生,并且复制数据包已到达对等节点,则认为主节点上的本地写入操作已完成。通常,在强制故障转移的情况下不会丢失任何写操作。但是,如果同时在主备节点 同时 发生了电源故障,则主节点的数据存储可能会丢失最新完成的写入操作。 -
Protocol C 同步复制协议。只有在确认本地和远程磁盘写入之后,主节点上的本地写入操作才被视为完成。因此,单个节点的丢失不会导致任何数据丢失。数据丢失当然是不可避免的,即使采用这个复制协议,如果所有节点(例如:它们的存储子系统)同时遭到不可逆转的破坏, 数据也可能丢失。
到目前为止,DRBD设置中最常用的复制协议是protocol C。
复制协议的选择影响部署的两个因素:保护和延迟 。相比之下,吞吐量在很大程度上独立于所选的复制协议。
高效同步
同步不同于设备复制。当对主角色中的资源的任何写入事件发生复制时,同步与传入的写操作是分离的。否则,它会影响到设备整体。
如果复制链路由于任何原因中断(无论是由于主节点故障、辅助节点故障还是复制链路中断)时,则必须进行同步。同步是有效的,因为DRBD不会按照修改后的块最初写入的顺序,而是按照线性顺序同步,这会产生以下后果:
-
同步速度很快,因为发生多个连续写操作的块只同步一次。 -
同步还与很少的磁盘查找相关,因为块是根据磁盘上块的自然布局进行同步的。 -
在同步过程中,备用节点上的数据集部分过时,部分已更新。这种数据状态称为 不一致 。后台同步正在进行时,服务继续在活动节点上不间断地运行。
支持磁盘刷新
当本地块设备(如硬盘驱动器或RAID逻辑磁盘)启用了写缓存时,对这些设备的写入在到达易失性缓存后即被视为完成。控制器制造商通常将此称为回写模式,反之则为直写模式。如果控制器在回写模式下断电,则最后一次写入永远不会提交到磁盘,可能会导致数据丢失。
为了解决这个问题,DRBD使用了磁盘刷新。磁盘刷新是一种写入操作,仅当关联的数据已提交到稳定(非易失性)存储时才完成,也就是说,它已有效地写入磁盘,而不是缓存。DRBD使用磁盘刷新对其复制的数据集和元数据进行写操作。实际上,DRBD在其认为必要的情况下绕过写缓存
磁盘错误处理策略
策略可能是以下选项之一
-
detach 这是默认和推荐的选项。在发生较低级别的I/O错误时,节点将丢弃其备份设备,并继续以无盘模式运行。 -
pass-on 这导致DRBD向上层报告I/O错误。在主节点上,它将报告给已装入的文件系统。在次节点上,它被忽略(因为次节点没有要报告的上层)。 -
call-local-io-error 调用定义为本地I/O错误处理程序的命令。这要求在资源的 handlers 部分中定义相应的 local-io-error 命令调用。完全由管理员自行决定使用 local-io-error 调用的命令(或脚本)来实现I/O错误处理。
如果是detach策略,主盘坏了可以不用提升和降级资源(也就是不用做任何操作),主盘可以以diskless(无盘)模式继续运行,在主节点上可以继续读写数据。因为这时候写数据会通过TCP写到备盘。当主盘恢复后,会同步数据回主盘。
二、CentOS7 DRBD 安装及测试
安装
1、安装drbd-utils
wget https://pkg.linbit.com//downloads/drbd/utils/drbd-utils-9.18.2.tar.gz
tar zxvf drbd-utils-9.18.2.tar.gz&&cd drbd-utils-9.18.2
./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var --runstatedir=/var/run/drbd
make -j cat /proc/cpuinfo | grep processor | wc -l
make install
ps: --sysconfdir=/etc 这个最好就是/etc 我用pacemaker管理dtbd 发现他是从/etc下面找这个配置文件的(也许pacemaker有什么地方能配置,但是没仔细研究)
error : Operation in progress
warning: failed to load external entity "http://docbook.sourceforge.net/release/xsl/current/manpages/pi.xsl"
compilation error: file http://docbook.sourceforge.net/release/xsl/current/manpages/docbook.xsl line 41 element include
xsl:include : unable to load http://docbook.sourceforge.net/release/xsl/current/manpages/pi.xsl
make[1]: *** [drbdsetup.8] 错误 5
make[1]: 离开目录“/home/xxx/Desktop/data/drbd-utils-9.18.2/documentation/v9”
make: *** [doc] 错误 2
或者
../../scripts/drbd.ocf meta-data |\
/usr/bin/xsltproc --novalid \
--stringparam package "drbd-pacemaker" \
--stringparam provider linbit \
--stringparam version "9.18.2" \
--output ocf_linbit_drbd.xml ../ra2refentry.xsl -
../../scripts/drbd-attr meta-data |\
/usr/bin/xsltproc --novalid \
--stringparam package "drbd-pacemaker" \
--stringparam provider linbit \
--stringparam version "9.18.2" \
--output ocf_linbit_drbd-attr.xml ../ra2refentry.xsl -
../../scripts/drbd-attr:行4: /resource.d/heartbeat/.ocf-shellfuncs: 没有那个文件或目录
../../scripts/drbd-attr:行319: ocf_is_true: 未找到命令
asciidoctor -I. -rasciidoctor-extensions.rb -amansource=drbd-utils -amanmanual='DRBD Manual' -amanversion= -aorgname='LINBIT HA Solutions GmbH https://linbit.com' -d manpage -b docbook5 drbd-lvchange@.service.adoc
make[1]: asciidoctor:命令未找到
make[1]: *** [drbd-lvchange@.service.xml] 错误 127
make[1]: *** 正在等待未完成的任务....
make[1]: 离开目录“/home/xxx/Desktop/data/drbd-utils-9.18.2/documentation/v9”
make: *** [doc] 错误 2
报错影响的是文档, 文档要在线下载但翻不过那座墙, 那就不用管,不影响软件使用。
2、安装drbd
wget https://pkg.linbit.com//downloads/drbd/9/drbd-9.1.3.tar.gz
tar zxvf drbd-9.1.3.tar.gz&&cd drbd-9.1.3
make && make install
modprobe drbd
lsmod|grep drbd
systemctl status drbd
systemctl enable drbd #这样开机drbd就会自动加载到Linux内核模块
DRBD的测试使用
虚拟机重启后如果改了配置资源,需要重新配置资源 DRBD允许您在资源运行时重新配置它们。包括, 对 /etc/drbd.conf 中的资源配置需要进行任何必要的更改, 在两个节点之间同步 /etc/drbd.conf 文件, 在两个节点上发出 drbdadm adjust 命令。 drbdadm adjust 然后切换到 drbdsetup 对配置进行必要的调整。与往常一样,您可以通过使用 -d (dry-run)选项运行 drbdadm 来查看挂起的 drbdsetup 调用。 对 /etc/drbd.conf 中的 common 部分进行更改时,可以通过发出 drbdadm adjust all 来调整一次运行中所有资源的配置。
环境
主机 | IP | 角色 |
---|
node1 | 192.168.1.115 | DRBD主节点 | node2 | 192.168.1.116 | DRBD备节点 |
注意: 本文实验中所有主机SElinux和防火墙都关闭
vim /etc/hosts (node1和node2都要执行)
192.168.1.115 node1
192.168.1.116 node2
node1机器上面执行 hostnamectl set-hostname node1
node2机器上面执行 hostnamectl set-hostname node2
不设置hostname后面执行命令会报错,如下
$ drbdadm create-md drbd0 1 ?
'drbd0' not defined in your config (for this host).
-------- -------- --------两个节点都要进行这些操作 开始-------- -------- --------
1、为虚拟机添加硬盘并进行分区 把虚拟机中的系统关闭,如果现在不关闭的话,后面添加不了新硬盘(VMWare Fusion不提示不"无法添加此设备,直到关闭了虚拟机")。然后选择 虚拟机->设置,在弹出的对话框中点击硬盘(SCSI),接着点击添加设备,就会出现添加硬件向导:新硬盘->应用,其他都是默认,SCSI、默认是20G、将虚拟磁盘拆分成多个文件
2、打开虚拟机的Linux系统。执行fdisk -l
$ fdisk -l
磁盘 /dev/sda:64.4 GB, 64424509440 字节,125829120 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x000bd3cb
设备 Boot Start End Blocks Id System
/dev/sda1 * 2048 616447 307200 83 Linux
/dev/sda2 616448 4812799 2098176 82 Linux swap / Solaris
/dev/sda3 4812800 125829119 60508160 83 Linux
磁盘 /dev/sdb:21.5 GB, 21474836480 字节,41943040 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
可以看到此时多了个sdb,但是并没有分区,下面我们为sdb进行分区:
输入命令fdisk /dev/sdb
在提示下输入m,就会出现帮助列表,根据需要选择选项完成自己的需要。
输入n,即为增加分区,
接着回车 建立主分区,
再回车,下面会提示卷的起始地址和结束地址,
再回车
回车默认就可以了。
最后键入w保存并退出。
操作记录如下
$ fdisk /dev/sdb
欢迎使用 fdisk (util-linux 2.23.2)。
更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。
Device does not contain a recognized partition table
使用磁盘标识符 0xfd63b3d2 创建新的 DOS 磁盘标签。
命令(输入 m 获取帮助):m
命令操作
a toggle a bootable flag
b edit bsd disklabel
c toggle the dos compatibility flag
d delete a partition
g create a new empty GPT partition table
G create an IRIX (SGI) partition table
l list known partition types
m print this menu
n add a new partition
o create a new empty DOS partition table
p print the partition table
q quit without saving changes
s create a new empty Sun disklabel
t change a partition's system id
u change display/entry units
v verify the partition table
w write table to disk and exit
x extra functionality (experts only)
命令(输入 m 获取帮助):n
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p):
Using default response p
分区号 (1-4,默认 1):
起始 扇区 (2048-41943039,默认为 2048):
将使用默认值 2048
Last 扇区, +扇区 or +size{K,M,G} (2048-41943039,默认为 41943039):
将使用默认值 41943039
分区 1 已设置为 Linux 类型,大小设为 20 GiB
命令(输入 m 获取帮助):w
The partition table has been altered!
Calling ioctl() to re-read partition table.
正在同步磁盘。
再输入 fdisk -l
就可以看到多了/dev/sdb1了,说明我们已经成功为sdb添加了分区。
$ fdisk -l
磁盘 /dev/sda:64.4 GB, 64424509440 字节,125829120 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x000bd3cb
设备 Boot Start End Blocks Id System
/dev/sda1 * 2048 616447 307200 83 Linux
/dev/sda2 616448 4812799 2098176 82 Linux swap / Solaris
/dev/sda3 4812800 125829119 60508160 83 Linux
磁盘 /dev/sdb:21.5 GB, 21474836480 字节,41943040 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0xfd63b3d2
设备 Boot Start End Blocks Id System
/dev/sdb1 2048 41943039 20970496 83 Linux
创建完分区后不能对其进行格式化
mkdir /data
查看配置文件位置
find / -name 'drbd.conf' 2>/dev/null
/etc/drbd.conf
/etc/multipath/conf.d/drbd.conf
/usr/lib/tmpfiles.d/drbd.conf
/home/bob/Desktop/data/drbd-utils-9.18.2/scripts/drbd.conf
/home/bob/Desktop/data/drbd-utils-9.18.2/scripts/multipath/drbd.conf
$ find / -name 'global_common.conf' 2>/dev/null
/etc/drbd.d/global_common.conf
/home/bob/Desktop/data/drbd-utils-9.18.2/scripts/global_common.conf
备份配置
mv /etc/drbd.d/global_common.conf /etc/drbd.d/global_common.conf.bak
cat << EOF > /etc/drbd.d/global_common.conf
global {
usage-count no;
}
common {
net {
protocol C;
}
options {
auto-promote yes;
}
}
EOF
按回车
拓展说明: 这里的自动提升资源,auto-promote官方说明如下: If you’re using the auto-promote feature, you don’t need to change the roles (Primary/Secondary) manually; only stopping of the services and unmounting, respectively mounting, is necessary.
cat << EOF > /etc/drbd.d/drbd0.res
resource drbd0 {
disk /dev/sdb1;
device /dev/drbd0;
meta-disk internal;
on node1 {
address 192.168.1.115:7789;
}
on node2 {
address 192.168.1.116:7789;
}
}
EOF
按回车
首次启用资源
创建设备元数据
此步骤只能在初始设备创建时完成。它初始化DRBD的元数据:
drbdadm create-md drbd0
$ drbdadm status
# No currently configured DRBD found.
启用资源
此步骤将资源与其备份设备(如果是多卷资源,则为多个设备)关联,设置复制参数,并将资源连接到其对等方
drbdadm up drbd0
$ drbdadm status
drbd0 role:Secondary
disk:Inconsistent
node2 connection:Connecting (如果是Connecting应该就是防火墙没关)
$ drbdadm status
drbd0 role:Secondary
disk:Inconsistent
node2 role:Secondary
peer-disk:Inconsistent
到目前为止,DRBD已经成功地分配了磁盘和网络资源,并准备就绪。然而它还不知道应该使用哪个节点作为初始设备同步的源。
-------- -------- --------两个节点都要进行这些操作 结束-------- -------- --------
初始设备同步
要使DRBD完全运行,还需要两个步骤:
选择初始同步源 如果处理的是新初始化的空磁盘,则此选择完全是任意的。但是,如果您的某个节点已经有需要保留的有价值的数据,则选择该节点作为同步源至关重要。如果在错误的方向上执行初始设备同步,则会丢失该数据。这点要非常小心。
启动初始化全量同步 此步骤只能在一个节点上执行,只能在初始资源配置上执行,并且只能在您选择作为同步源的节点上执行。要执行此步骤,请输入以下命令:
这里设置node1为主节点,在node1上执行
drbdadm primary --force drbd0
发出此命令后,将启动初始化全量同步。您将能够通过 drbdadm status 监视其进度。根据设备的大小,可能需要一些时间。
drbdadm status drbd0
drbd0 role:Primary
disk:UpToDate
node2 role:Secondary
replication:SyncSource peer-disk:Inconsistent done:4.56
$ fdisk -l
磁盘 /dev/sda:64.4 GB, 64424509440 字节,125829120 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x000bd3cb
设备 Boot Start End Blocks Id System
/dev/sda1 * 2048 616447 307200 83 Linux
/dev/sda2 616448 4812799 2098176 82 Linux swap / Solaris
/dev/sda3 4812800 125829119 60508160 83 Linux
磁盘 /dev/sdb:21.5 GB, 21474836480 字节,41943040 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0xfd63b3d2
设备 Boot Start End Blocks Id System
/dev/sdb1 2048 41943039 20970496 83 Linux
磁盘 /dev/drbd0:21.5 GB, 21473095680 字节,41939640 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字
在node2上
$ drbdadm status drbd0
drbd0 role:Secondary
disk:Inconsistent
node1 role:Primary
replication:SyncTarget peer-disk:UpToDate done:16.52
$ fdisk -l
磁盘 /dev/sda:64.4 GB, 64424509440 字节,125829120 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x000bd3cb
设备 Boot Start End Blocks Id System
/dev/sda1 * 2048 616447 307200 83 Linux
/dev/sda2 616448 4812799 2098176 82 Linux swap / Solaris
/dev/sda3 4812800 125829119 60508160 83 Linux
磁盘 /dev/sdb:21.5 GB, 21474836480 字节,41943040 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x44229f15
设备 Boot Start End Blocks Id System
/dev/sdb1 2048 41943039 20970496 83 Linux
就变成Secondary了
通过上述两个对比可以看到primary上面多了个 /dev/drbd0
格式化并挂载 primary上执行
需要对drbd设备格式化并挂载才能使用(drbd正常情况下只有主节点能够挂载)
mkfs.ext4 /dev/drbd0 #格式化drbd设备
mount /dev/drbd0 /data #挂载到data目录
输出内容如下
$ mkfs.ext4 /dev/drbd0
mke2fs 1.42.9 (28-Dec-2013)
文件系统标签=
OS type: Linux
块大小=4096 (log=2)
分块大小=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
1310720 inodes, 5242455 blocks
262122 blocks (5.00%) reserved for the super user
第一个数据块=0
Maximum filesystem blocks=2153775104
160 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000
Allocating group tables: 完成
正在写入inode表: 完成
Creating journal (32768 blocks): 完成
Writing superblocks and filesystem accounting information: 完成
╭─root@localhost ~ ?node-? ??
╰─$ mount /dev/drbd0 /data
╭─root@localhost ~ ?node-? ??
╰─$ ll /
总用量 36K
。。。。。。。。。。。。 其他目录省略
drwxr-xr-x 3 root root 4.0K 8月 15 17:36 data
。。。。。。。。。。。。
创建测试文件
在primary上执行
cd /data
dd if=/dev/zero of=50M.file bs=1M count=50
dd if=/dev/zero of=50M.file2 bs=1M count=50
$ ll
总用量 101M
-rw-rw-r-- 1 root root 50M 8月 15 17:46 50M.file
-rw-rw-r-- 1 root root 50M 8月 15 17:46 50M.file2
drwx------ 2 root root 16K 8月 15 17:36 lost+found
可以看到有两个生成的文件了。
DRBD同步测试1
当在备机node2启动drbd时,它是无法挂载/dev/sdb1分区的,我们可以尝试写些数据到node1的目录/data上,然后停止node2的drbd。
drbdadm down drbd0
之后就可以把node2的/dev/sdb1挂载到目录/data
mount /dev/sdb1 /data
DRBD同步测试2
将node1设置为seondary并将node2设置为primary 执行命令前要退出/data目录(如cd / 或 cd 到非/data目录即可),否则umount报错如下
$ umount /data 32 ?
umount: /data:目标忙。
(有些情况下通过 lsof(8) 或 fuser(1) 可以
找到有关使用该设备的进程的有用信息)
umount /data #首先要卸载drbd0
drbdadm secondary drbd0
其他命令
drbdadm status drbd0
drbdsetup status drbd0 --verbose --statistics
drbdsetup events2 --now drbd0
drbdadm cstate drbd0
drbdadm dstate drbd0
drbdsetup status --verbose --statistics 性能指标
手动故障切换
如果不使用Pacemaker并希望在被动/主动配置中手动处理故障转移,则过程如下。 在当前主节点上,停止使用DRBD设备的任何应用程序或服务,卸载DRBD设备,并将资源降级为次要资源。
# umount /dev/drbd/by-res/<resource>/<vol-nr>
# drbdadm secondary <resource>
现在登录到想提升为primary的节点上,升级资源并装载设备。
# drbdadm primary <resource>
# mount /dev/drbd/by-res/<resource>/<vol-nr> <mountpoint>
If you’re using the auto-promote feature, you don’t need to change the roles (Primary/Secondary) manually; only stopping of the services and unmounting, respectively mounting, is necessary.
三、DRBD与pacemaker集成
pacemaker 官方文档
https://clusterlabs.org/pacemaker/doc/deprecated/en-US/Pacemaker/1.1/html-single/Clusters_from_Scratch/index.html
Pacemaker是一个复杂的、功能丰富的、广泛部署的Linux平台集群资源管理器。这里主要是利用pacemaker管理DRBD实现故障时自动切换主备,并mount目录
pacemaker 安装
node1 和node2都执行
yum install -y pacemaker pcs psmisc policycoreutils-python3
echo password|passwd --stdin hacluster
systemctl start pcsd.service
systemctl enable pcsd.service
node1执行
pcs cluster auth node1 node2
pcs cluster setup --name mycluster node1 node2
pcs cluster start --all
pcs cluster cib
pcs property set stonith-enabled=false
crm_verify -L 没报错就行
pcs cluster cib drbd_cfg
drbd_cfg 是自己起的配置名称
pcs -f drbd_cfg resource create DRBDData ocf:linbit:drbd drbd_resource=drbd0 op monitor interval=60s
说明:DRBDData 是resource的名称(自己起),drbd0是DRBD配置的资源名称
pcs -f drbd_cfg resource master DRBDDataClone DRBDData master-max=1 master-node-max=1 clone-max=2 clone-node-max=1 notify=true
DRBDDataClone是自己起的备用节点resource的名称
pcs -f drbd_cfg resource show
pcs cluster cib-push drbd_cfg --config
pcs cluster cib fs_cfg
pcs -f fs_cfg resource create DRBDFS Filesystem device="/dev/drbd0" directory="/data" fstype=“ext4”
DRBDFS是自己起的名称;/dev/drbd0是对应的DRBD设备;/data 是要挂载的目录;ext4是文件系统类型
pcs -f fs_cfg constraint colocation add DRBDFS with DRBDDataClone INFINITY with-rsc-role=Master
pcs -f fs_cfg constraint order promote DRBDDataClone then start DRBDFS
执行步骤,先提升备,在挂载文件系统
pcs -f fs_cfg resource show
pcs cluster cib-push fs_cfg --config
pcs status
测试
pcs cluster standby node1
然后node2上执行
drbdadm status drbd0
就会发想自动切换为primary了并且/data目录页自动挂载了
|