25 群集多设备(群集 MD) #
群集多设备(群集 MD)是一项基于软件的群集 RAID 存储解决方案。目前,群集 MD 为群集提供了 RAID1 镜像冗余。在 SUSE Linux Enterprise High Availability 15 SP6 中,随附了 RAID10 技术预览版。如果您要尝试 RAID,请在相关 mirror
命令中用 10
10 替换 mdadm
。本章介绍如何创建和使用群集 MD。
25.1 概念概述 #
群集 MD 提供在群集环境中使用 RAID1 的支持。每个节点都会访问群集 MD 使用的磁盘或设备。如果群集 MD 的一个设备发生故障,则在运行时可以由另一个设备代替它,并且系统会对其进行重新同步以提供相同数量的冗余。群集 MD 需要使用 Corosync 和分布式锁管理器 (DLM) 进行协调和讯息交换。
群集 MD 设备不会像其他常规 MD 设备一样在引导时自动启动。为确保 DLM 资源已启动,需要使用资源代理来启动群集设备。
25.2 创建群集 MD RAID 设备 #
一个安装了 Pacemaker 的正在运行的群集。
DLM 的资源代理(请参见第 20.2 节 “配置 DLM 群集资源”)。
至少两个共享磁盘设备。您可以使用另外一个设备作为备用设备,以便在设备发生故障时自动进行故障转移。
安装的软件包 cluster-md-kmp-default。
为了提高稳定性,请使用永久设备名称(例如 /dev/disk/by-id/DEVICE_ID
),而不是 /dev/sdX
名称。
请确保 DLM 资源在群集的每个节点上都正常运行,并使用以下命令检查资源状态:
#
crm_resource -r dlm -W
创建群集 MD 设备:
如果您没有现有的常规 RAID 设备,请使用以下命令在运行 DLM 资源的节点上创建群集 MD 设备:
#
mdadm --create /dev/md0 --bitmap=clustered \ --metadata=1.2 --raid-devices=2 --level=mirror \ /dev/disk/by-id/DEVICE_ID1 /dev/disk/by-id/DEVICE_ID2
由于群集 MD 只能与 1.2 版的元数据配合使用,因此建议使用
--metadata
选项来指定版本。有关其他有用选项,请参见mdadm
手册页。在/proc/mdstat
中监控重新同步进度。如果您有现有的常规 RAID,请先清除现有位图,然后再创建群集位图:
#
mdadm --grow /dev/mdX --bitmap=none
#
mdadm --grow /dev/mdX --bitmap=clustered
(可选)要创建带有用于自动故障转移的备用设备的群集 MD 设备,请在一个群集节点上运行以下命令:
#
mdadm --create /dev/md0 --bitmap=clustered --raid-devices=2 \ --level=mirror --spare-devices=1 --metadata=1.2 \ /dev/disk/by-id/DEVICE_ID1 /dev/disk/by-id/DEVICE_ID2 /dev/disk/by-id/DEVICE_ID3
获取 UUID 以及相关的 MD 路径:
#
mdadm --detail --scan
该 UUID 必须与超级块中存储的 UUID 匹配。有关 UUID 的细节,请参见
mdadm.conf
手册页。打开
/etc/mdadm.conf
,然后添加 MD 设备名称及与其关联的设备。使用上一步中获得的 UUID:DEVICE /dev/disk/by-id/DEVICE_ID1 /dev/disk/by-id/DEVICE_ID2 ARRAY /dev/md0 UUID=1d70f103:49740ef1:af2afce5:fcf6a489
打开 Csync2 的配置文件
/etc/csync2/csync2.cfg
,并添加/etc/mdadm.conf
:group ha_group { # ... list of files pruned ... include /etc/mdadm.conf }
25.3 配置资源代理 #
按如下所示配置 CRM 资源:
创建
Raid1
原始资源:crm(live)configure#
primitive raider Raid1 \ params raidconf="/etc/mdadm.conf" raiddev=/dev/md0 \ force_clones=true \ op monitor timeout=20s interval=10 \ op start timeout=20s interval=0 \ op stop timeout=20s interval=0
将
raider
资源添加到您已为 DLM 创建的存储基础组:crm(live)configure#
modgroup g-storage add raider
add
子命令默认会追加新的组成员。如果尚未克隆
g-storage
组,请执行该操作,以使其在所有节点上运行:crm(live)configure#
clone cl-storage g-storage \ meta interleave=true target-role=Started
使用
show
查看更改。如果所有设置均正确无误,请使用
commit
提交您的更改。
25.4 添加设备 #
要将某个设备添加到现有的活动群集 MD 设备,请先使用命令 “ 确保该设备在每个节点上均”可见cat /proc/mdstat
。如果设备不可见,命令将会失败。
在一个群集节点上使用以下命令:
#
mdadm --manage /dev/md0 --add /dev/disk/by-id/DEVICE_ID
所添加的新设备的行为取决于群集 MD 设备的状态:
如果只有一个镜像设备处于活动状态,则新设备将会成为镜像设备中的第二个设备,并且会启动恢复进程。
如果群集 MD 设备的两个设备都处于活动状态,则新添加的设备将会成为备用设备。
25.5 重新添加暂时发生故障的设备 #
故障往往只发生于一时,并且仅限于一个节点。如果在执行 I/O 操作期间有任何节点发生了故障,则会在整个群集中将相应设备标记为失败。
例如,其中一个节点发生电缆故障,可能就会导致发生这种情况。更正此问题后,您可以重新添加设备。与添加新设备会同步整个设备不同,这样只会同步过时的部件。
要重新添加设备,请在一个群集节点上运行以下命令:
#
mdadm --manage /dev/md0 --re-add /dev/disk/by-id/DEVICE_ID
25.6 去除设备 #
在运行时去除设备以进行替换之前,请执行以下操作:
检查
/proc/mdstat
以确保设备处于失败状态。查看设备前面有无(F)
。在一个群集节点上运行以下命令,以使设备失败:
#
mdadm --manage /dev/md0 --fail /dev/disk/by-id/DEVICE_ID
在一个群集节点上使用以下命令去除失败的设备:
#
mdadm --manage /dev/md0 --remove /dev/disk/by-id/DEVICE_ID
25.7 在灾难恢复站点将群集 MD 组合成常规 RAID #
进行灾难恢复时,您可能会遇到下面的情况:灾难恢复站点的基础架构中没有 Pacemaker 群集堆栈,但应用程序仍需访问现有群集 MD 磁盘上或备份中的数据。
您可以将群集 MD RAID 转换为常规 RAID,方法是使用 --assemble
操作和 -U no-bitmap
选项相应地更改 RAID 磁盘的元数据。
下面的示例介绍了如何组合数据恢复站点上的所有阵列:
while read i; do NAME=`echo $i | sed 's/.*name=//'|awk '{print $1}'|sed 's/.*://'` UUID=`echo $i | sed 's/.*UUID=//'|awk '{print $1}'` mdadm -AR "/dev/md/$NAME" -u $UUID -U no-bitmap echo "NAME =" $NAME ", UUID =" $UUID ", assembled." done < <(mdadm -Es)