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=none- root #- 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#- primitiveraider 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#- modgroupg-storage add raider- add子命令默认会追加新的组成员。- 如果尚未克隆 - g-storage组,请执行该操作,以使其在所有节点上运行:- crm(live)configure#- clonecl-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)