23 群集多设备(群集 MD) #
群集多设备(群集 MD)是一项基于软件的群集 RAID 储存解决方案。目前,群集 MD 为群集提供了 RAID1 镜像冗余。在 SUSE Linux Enterprise High Availability Extension 15 SP4 中,随附了 RAID10 技术预览版。如果您要尝试 RAID10,请在相关 mdadm
命令中用 10
替换 mirror
。本章介绍如何创建和使用群集 MD。
23.1 概念概述 #
群集 MD 提供在群集环境中使用 RAID1 的支持。每个节点都会访问群集 MD 使用的磁盘或设备。如果群集 MD 的一个设备发生故障,则在运行时可以由另一个设备代替它,并且系统会对其进行重新同步以提供相同数量的冗余。群集 MD 需要使用 Corosync 和分布式锁管理器 (DLM) 进行协调和消息交换。
群集 MD 设备不会像其他常规 MD 设备一样在引导时自动启动。为确保 DLM 资源已启动,需要使用资源代理来启动群集设备。
23.2 创建群集 MD RAID 设备 #
一个安装了 Pacemaker 的正在运行的群集。
DLM 的资源代理(有关如何配置 DLM 的信息,请参见过程 18.1 “配置 DLM 的基础组”)。
至少两个共享磁盘设备。您可以使用另外一个设备作为备用设备,该备用设备会在设备发生故障时自动进行故障转移。
安装的软件包 cluster-md-kmp-default。
请确保 DLM 资源在群集的每个节点上都正常运行,并使用以下命令检查资源状态:
root #
crm_resource
-r dlm -W创建群集 MD 设备:
如果您没有现有的常规 RAID 设备,请使用以下命令在运行 DLM 资源的节点上创建群集 MD 设备:
root #
mdadm
--create /dev/md0 --bitmap=clustered \ --metadata=1.2 --raid-devices=2 --level=mirror /dev/sda /dev/sdb由于群集 MD 只能与 1.2 版的元数据配合使用,因此建议使用
--metadata
选项来指定版本。有关其他有用选项,请参见mdadm
手册页。在/proc/mdstat
中监控重新同步进度。如果您有现有的常规 RAID,请先清除现有位图,然后再创建群集位图:
root #
mdadm
--grow /dev/mdX --bitmap=noneroot #
mdadm
--grow /dev/mdX --bitmap=clustered(可选)要创建带有用于自动故障转移的备用设备的群集 MD 设备,请在一个群集节点上运行以下命令:
root #
mdadm
--create /dev/md0 --bitmap=clustered --raid-devices=2 \ --level=mirror --spare-devices=1 /dev/sda /dev/sdb /dev/sdc --metadata=1.2
获取 UUID 以及相关的 MD 路径:
root #
mdadm
--detail --scan该 UUID 必须与超级块中储存的 UUID 匹配。有关 UUID 的细节,请参见
mdadm.conf
手册页。打开
/etc/mdadm.conf
并添加 MD 设备名称以及与其关联的设备。使用上一步中获得的 UUID:DEVICE /dev/sda /dev/sdb 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 }
23.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 raideradd
子命令默认会追加新的组成员。如果尚未克隆
g-storage
组,请执行该操作,以使其在所有节点上运行:crm(live)configure#
clone
cl-storage g-storage \ meta interleave=true target-role=Started使用
show
查看更改。如果所有设置均正确无误,请使用
commit
提交您的更改。
23.4 添加设备 #
要将某个设备添加到现有的活动群集 MD 设备,请先使用命令 cat /proc/mdstat
确保该设备在每个节点上均“可见”。如果设备不可见,则命令将会失败。
在一个群集节点上使用以下命令:
root #
mdadm
--manage /dev/md0 --add /dev/sdc
所添加的新设备的行为取决于群集 MD 设备的状态:
如果只有一个镜像设备处于活动状态,则新设备将会成为镜像设备中的第二个设备,并且会启动恢复进程。
如果群集 MD 设备的两个设备都处于活动状态,则新添加的设备将会成为备用设备。
23.5 重新添加暂时发生故障的设备 #
故障常常是短暂发生的,并且仅限于一个节点。如果在 I/O 操作期间有任何节点发生了故障,则会针对整个群集将设备标记为失败。
例如,其中一个节点发生电缆故障,可能就会导致发生这种情况。更正此问题后,您可以重新添加设备。与添加新设备会同步整个设备不同,这样只会同步过时的部件。
要重新添加设备,请在一个群集节点上运行以下命令:
root #
mdadm
--manage /dev/md0 --re-add /dev/sdb
23.6 去除设备 #
在运行时去除设备以进行替换之前,请执行以下操作:
检查
/proc/mdstat
以确保设备已失败。查看设备前面有无(F)
。在一个群集节点上运行以下命令,以使设备失败:
root #
mdadm
--manage /dev/md0 --fail /dev/sda在一个群集节点上使用以下命令去除失败的设备:
root #
mdadm
--manage /dev/md0 --remove /dev/sda
23.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)