级别: 中级 Lei Jiang, 软件工程师, IBM
2009 年 11 月 12 日 使用多路径从存储区域网络启动服务器可以给复杂的现代数据中心环境带来明显的好处,比如提高可用性,增加访问范围,能够更加轻松地管理和维护系统,提供可靠性等等。要通过 SAN 设备启动 Linux® 系统,您需要将 SAN 启动操作系统设置为支持多路径驱动程序的存储器;这是本文的中心。笔者将引导您在 IBM® System Storage DS8000 上完成 SAN 启动 Linux 系统的设置过程,该存储器必须具有 Device-Mapper MultiPath (DMMP) 提供的多路径功能。
如今复杂数据中心环境的关键要求是能够随时快速交付任务关键型数据,不会延迟。从存储区域网络 (SAN) 启动服务器可以在这方面提供明显的好处。
服务器一般是从内部硬盘上启动操作系统,但是如果物理服务器宕机的话将会造成许多麻烦,包括替换服务器,重载操作系统,重新安装应用程序等等。从 SAN 启动操作系统可以简化这些问题,因为您只需要替换服务器即可;您的操作系统和应用程序都保存在 SAN 上。
从 SAN 启动还可以简化数据中心的管理,提高灾难恢复能力,由于服务器没有磁盘,还降低了总拥有成本 (TCO)。
在本文中,我将演示如何将 Linux 设置为从 SAN 存储器启动,在这种情况下,使用 Device-Mapper
MultiPath (DMMP) 功能的 IBM System Storage DS8000 管理多个路径。我将介绍针对 Red Hat Enterprise Linux (RHEL) 4 和 5、SUSE Linux Enterprise Server
(SLES) 9 和 10 的流程。
在本文中,我重点介绍基于 Fibre Channel 的 SAN 架构,因为它是数据中心的典型架构,DS8000 也支持该架构。
什么是多路径 SAN 存储器?
回到 20 世纪 80 年代,磁盘或磁带存储器直接连接到服务器上。但是,从那时开始,我们依赖的数据数量就在不断上升,但是直接连接的存储器逐渐无法满足我们存储需求。我们变得越来越依赖数据共享、大容量存储功能,并且需要保证数据的安全。
这种需求变化的一个方面是需要让数据更容易取得。我们通过在主机和存储器之间添加更多路径解决了这个问题,这就是术语多路径 的由来。借助多个 I/O 路径,我们可以提高容错率 —— 如果路径子集失败,剩下的路径仍然能够工作,还可以提高性能,因为 I/O 可以同时经过多个路径。
一个简单的多路径示例及其好处
一个简单的示例是服务器直接连接到两个 SAN 存储端口。如果单个存储器端口或服务器端口失败,服务器还有一条路径用于数据传输。这个物理 I/O 通道配置在物理水平让多路径 SAN 成为可能。
此外,我们需要多路径软件层来管理多个存储路径。这个层应该让多路径解决方案对于用户是透明的,只向他们展示一个设备和路径。没有这个层,系统将把每个路径识别为不同的设备,应用程序将无法同时使用多个路径。
多路径软件层可以使用冗余路径交付性能增强,比如动态负载平衡、传输监控、自动路径管理和动态重配置。
DMMP 的结构
DMMP 是一个多路径 I/O 实现,在主动/被动配置中提供故障诊断功能:这种配置中只有一半的路径同时用于 I/O。如果 I/O 路径的任何元素(电缆、交换机或控制器)失败,DMMP 将把 I/O 切换到备用路径。
DMMP 也可以以主动/主动模式配置,这种模式下,I/O 以循环模式分散到所有路径。在某些配置中,DMMP 可以检测 I/O 路径的负载并动态重新平衡负载。出于这些原因,您需要存储系统的隐式支持。
图 1 展示了一个多路径配置,从服务器到存储器(RAID 阵列)有两条 I/O 路径。服务器上有两个主机总线适配器 (HBAs)、RAID 阵列上有两个 SAN 交换机和两个 RAID 控制器。
图 1. 一个 RAID 设备的多路径配置
在该配置中,一条 I/O 路径通过 hba1、SAN1 (Switch X) 和 controller 1,第二条 I/O 路径通过 hba2、SAN2 (Switch Y) 和 controller 2。配置了 DMMP 之后,这些设备的任何单点失败都将导致 DMMP 将 I/O 切换到备用路径。因此,即使存在某个点的失败,系统仍然可以使用;您可以在不影响系统使用的情况下修复失败的点设备。
对于主动/被动存储器 RAID 阵列,任何时候,您的主机只能通过其中一条路径到达该阵列的一个 LUN。它通常使用 I/O 偏好路径;如果偏好路径遇到问题,DMMP 将切换到独立路径。DMMP 还将在这两个路径之间传播 I/O,以提高活动/活动存储器的 I/O 性能。
如果喜欢,您还可以在服务器和 RAID 阵列之间添加多个路径,以提高可靠性,比如,可以在 controller
1 和 SAN 2 或者 controller 2 和
SAN 1 之间添加一条路径。那么服务器和存储器 RAID 阵列之间就将存在 4 条路径,如图 2 所示:
图 2. 一个 RAID 设备的多路径配置,更多路径
从支持多路径的 SAN 启动
如上所述,操作系统一般安装在本地硬盘或服务器上,但是如果这个服务器失败,您将需要重载操作系统并重新部署应用程序,这增加了维护时间。图 3 展示了这种拓扑。
图 3. 传统操作系统拓扑
另一方面,图 4 展示了设置系统从 SAN 启动操作系统时的好处。
图 4. 通过 SAN 拓扑简单启动
如果活动服务器失败,您的业务服务将迅速切换到被动服务器,如图 5 所示。
图 5. 从 SAN 环境启动情况下的操作系统故障转移
您还可以使用 DS8000 的远程复制服务将操作系统和应用程序备份到远程站点,如图 6 所示。
图 6. 从 SAN 环境启动情况下的操作系统远程故障转移
我将重点介绍如何设置操作系统从 SAN 活动服务器启动,但是该过程也可以用于替代服务器(被动服务器)。本文不讨论操作系统故障自动转移。
从 SAN 启动的策略
首先介绍设置策略。
- 在存储器端,本地启动和 SAN 启动没有区别。
- 在主机端,您需要更改一些设置来区分 SAN 启动和本地启动:
- 将 HBA 设置为支持 BIOS,并选择从 DS8000 启动设备。
- 通过服务器 BIOS 禁用本地硬盘,或者将其实际移除。
- 将服务器 BIOS 设置为将 SAN 操作系统卷作为启动的第一选择。
- 在 Linux 中支持 DMMP。
完成这些步骤之后,SAN 上的 Linux 将设置为主要的候选磁盘,在服务器电源打开和通过自检运行时将从这里启动。此外,由于 DMMP 在 HBA 驱动器之后的操作系统启动中需要加载,您的 Linux 需要支持多路径。
设置存储器设备
IBM System Storage DS8000 以活动/活动方式支持多路径 I/O 和双存储处理器。这意味着,将操作系统设置为从 SAN DS8000 启动时不需要任何特别的操作。该过程如下:
- 在服务器上为 DS8000 准备一个区域。
- 添加一个卷组。
- 创建一个主机连接。
- 为操作系统制作一个新卷。
以下是这些步骤的细节:
在服务器上为 DS8000 准备一个区域 每条路径都需要一个切换区域,以便您的服务器 HBA 端口能够到达 DS8000 IO 端口。如图 1 所示,您需要在 SAN1 上安置 hba1 和 controller 1 (DS8000 port
1),在 SAN2 上安置 hba2 和
controller2 (DS8000 port 2)。如果使用软区域,则如下所示:
区域 1: 50:05:07:63:07:03:07:7d (DS8000 端口 1 WWPN);
21:00:00:1b:32:04:82:b7(服务器 HBA 端口 1 WWPN)
区域 2: 50:05:07:63:07:08:07:7d(DS8000 端口 2 WWPN);
21:01:00:1b:32:24:82:b7(服务器 HBA 端口 2 WWPN)
添加一个卷组 假设您的存储器管理员已经将 DS8000 分区并创建了一个块池(extent pool)。您可以通过 CLI 在 DS8000 上执行以下命令为服务器添加一个卷组:
dscli>mkvolgrp -hosttype LinuxSUSE myvolgrp
在这里您将设置一个名为 myvolgrp 的卷组,主机类型为 LinuxSUSE,该类型定义附加基于 Intel 的 SUSE Linux OS。
创建一个主机连接 使用主机连接将服务器的 HBA WWPN 映射到 DS8000 上一个专用卷组,以便服务器可以在专用卷组中访问所有卷。命令如下:
dscli>mkhostconnect -wwname 2100001b3204b7ba -hosttype LinuxSUSE -volgrp v35 -ioport I0001 mysusehost
在这里,我使用 WWPN 2100001b3204b7ba 为服务器的一条路径创建了一个主机连接,它连接到 DS8000 的 I/O 端口 I0001 并将卷组 v35 (myvolgrp) 映射到该主机连接。这使该服务器端口可以访问卷组 myvolgrp 中的所有卷。
为操作系统制作一个新卷 您需要制作一个卷保存操作系统数据并为 Linux 安装提供足够的空间。最好让卷大一些,以便将来使用:
dscli>mkfbvol -extpool p2 -cap 10 -volgrp v35 -name mysuseboot 9802
在该步骤中,我在块池 p2 中创建了一个名为 mysuseboot 的卷,并将其分配到卷组 v35。该卷将用于加载 Linux。
您还可以使用该命令添加更多的卷用于数据或应用程序,但是最好通过最低 ID 将用作操作系统磁盘的卷放在最前面。Linux 配置完成之后,最好将多个卷分配给数据或应用程序。
现在已经设置好了存储设备,您可以设置服务器,准备在 SAN 上安装 Linux。
准备服务器以安装 SAN 操作系统
由于您希望在 SAN 存储器上安装操作系统,您需要禁用服务器本地硬盘并支持 HBA BIOS,以便在服务器启动设备检查时识别 DS8000 的磁盘。
步骤如下:
- 在服务器禁用本地磁盘。
- 启用 HBA BIOS 从 SAN 启动。
- 选择 DS8000 的根磁盘。
以下是这些步骤的详细信息:
在服务器上禁用本地磁盘 首先,您需要进入系统 BIOS 设置页面;我将使用 IBM System x 服务器 BIOS 演示该步骤。从页面中选择 Device and I/O Ports,如图 7 所示。
图 7. IBM System x
服务器 BIOS 主页面
然后,禁用服务器上的本地磁盘(图 8 中的 Planar SAS)。
图 8. 设备和 I/O 端口设置页面
如果您的服务器不支持直接禁用本地磁盘适配器,您可以卸下本地磁盘。
启用 HBA BIOS 从 SAN 启动 我将使用 Qlogic
HBA BIOS 设置作为示例。如果您使用其他供应商的 HBA,请参考相应文档获得正确的设置。
首先,您在服务器发布 Qlogic 自检时需要按下 Ctrl-Q 选择 Host Adapter 页面,如图 9 所示。
图 9. 选择 Host
Adapter 页面
您可以首先选择 HBA 端口,然后将出现 Fast!UTIL Options 页面,如图 10 所示。
图 10. Fast!UTIL
Options 页面
进入 Configuration Settings 页面(图 11)并选择 Adapter Settings。
图 11. 配置设置
在 Adapter Settings 页面,您需要启用 Host Adapter
BIOS,如图 12 所示。
图 12. 适配器设置
然后转到 Adapter Settings 页面(图 11)并进入 Selectable Boot Settings 页面,如图 13 所示。
图 13. 可选择的启动设置
从 DS8000 选择根磁盘 在 Selectable Boot
Settings 页面(图 13)中,您需要选择 Primary Boot
device,然后将出现 Select Fibre Channel Device 页面(如图 14 所示)。
图 14. 选择 Fibre
Channel 设备
现在,需要选择根设备安装 Linux。Selectable Boot Settings 页面如图 15 所示。
图 15. 选择根设备之后可选择的根设置
在该阶段,您需要在 Qlogic BIOS 中设置根设备。这就跟设置 HBA 端口一样,因此按上述步骤进行即可。离开 Fast!UTIL Options 页面时,您可以回到 Select Host Adapter 页面(图 10)。
为每个 HBA 或 HBA 端口选择根设备之后,可以插入 Linux 安装媒体并开始安装操作系统了。
在存储设备上安装 Linux
开始在 DS8000 卷上安装 Linux 之前,最好在服务器和 DS8000 之间保持一条路径。要做到这一点,禁用服务器的一个 HBA 端口:
- 禁用相应的交换端口
- 拔出 HBA 电缆
- 禁用服务器和 DS8000 之间的所有其他区域
最好在安装之前将该卷分配为操作系统安装卷。这样一来,您总是可以找到要安装 Linux 的卷,因为一次只有一个卷可用。
安装步骤与在本地硬盘上安装 Linux 的步骤一样。但是,RHEL5 是个特例。初始安装过程中您需要 linux mpath 选项,因为在安装过程中 RHEL5 支持启用 DMMP(换句话说,安装过程中您可以启用多条路径)。
我将演示不同 x86 平台上的安装过程(已经在 RHEL4 U7、RHEL5 U2、SLES9 SP4 和 SLES10 SP2 上进行了验证)。您可能需要使用对应于您的架构的安装包,比如,32 位 x86 Linux 应该使用 i586/i386 包,64 位 x86 Linux 应该使用 x86_64 包)。
安装
DMMP 多路径工具
现在,已经将 Linux 安装到 DS8000 卷中,您需要安装 DMMP 多路径工具(如果在安装操作系统的过程中没有安装)。DMMP 包括两个包:
- device-mapper
- multipath-tool
通常,总是默认安装 device-mapper 包,因为其他工具可能需要它,如 Logical Volume Manager (LVM)。在 SLES 上,您可以通过以下命令从发行版磁盘安装多路径工具:
<Linux ~>#rpm -ivh multipath-tools-0.4.7-75.7.i586.rpm
在 Red Hat 上:
<Linux ~>#rpm -ivh device-mapper-multipath-0.4.5-31.el4.x86_64.rpm
系统启动时启用 DMMP
现在所有必需的软件都已经就绪,您可以使用以下两个步骤配置系统,启用 DMMP 并添加 DS8000 支持:
- 启动过程中启用 DMMP。
- 配置 DMMP,使之支持存储设备。
启动过程中启用 DMMP
将多路径工具启动脚本添加到启动列表,如下所示:
<linux:~>#chkconfig --level 35 multipathd on
验证它的设置是否正确:
<linux:~>#chkconfig --list | grep multipath
multipathd 0:off 1:off 2:off 3:on 4:off 5:on 6:off
配置 DMMP 以支持存储设备
使用以下项编辑 /etc/multipath.conf 文件:
清单 1. 配置 DMMP 以支持 DS8000
defaults {
polling_interval 30
failback immediate
no_path_retry 5
rr_min_io 100
path_checker tur
user_friendly_names yes
}
devices {
# DS8000
device {
vendor "IBM"
product "2107900"
path_grouping_policy group_by_serial
}
}
multipaths {
multipath {
wwid 36005076307ffc77d0000000000001050
alias OSROOT
}
}
|
可以下载
配置文件。
现在使用 WWID(World Wide Identifier)配置 Linux 操作系统根磁盘的别名,以便可以在接下来的配置过程中使用较短好记的名称。要获得操作系统磁盘的 WWID,请使用以下命令:
<linux:~>#scsi_id -g -u -s /block/sda
36005076307ffc77d0000000000001050
sda 是不带 DMMP 的操作系统磁盘设备名称。
将 DMMP 模块集成到初始化内存镜像文件
在本节中,我将展示如何将 DMMP 模块放入 SLES9、SLES10、RHEL4 和 RHEL5 的初始化内存镜像文件(initrd image) —— 初始 ramdisk,这是一个 Linux 内核启动过程中常用的临时文件系统,可以在挂载真正的根文件系统之前先做好准备。请选择您的操作系统并按照以下步骤进行操作。
SLES9 的步骤
默认情况下,DMMP 没有构建到 SLES9 初始化内存镜像文件中以支持从 SAN 进行多路径 SLES9 启动。要使之能够成功运行,请按照以下操作进行:
编辑 /etc/sysconfig/kernel 文件 将 dm_mod dm_multipath dm_round_robin 添加到 INITRD_MODULES 行:
INITRD_MODULES="ata_piix qla2400 dm_mod dm_multipath dm_round_robin reiserfs"
制作一个新的带有 DMMP 支持的初始化内存镜像
<linux:~>#mkinitrd -k /boot/vmlinuz -i initrdmp.gz -x 6000
在这时,我向初始化内存镜像构建所有需要的 DMMP 模块(dm_mod、dm_multipath、dm_round_robin),以便 DMMP 能够在 SLES9 启动时加载它们。我还向镜像添加 6,000 个字节,以便进一步编辑空间。
RHEL4/5 的步骤
DMMP 没有构建到初始化内存镜像中,因此您可以使用以下命令来完成:
<linux:~>#mkinitrd --with=dm-mod --with=dm-multipath --with=dm-round-robin initrdmp.gz
`uname -r`
在这里,initrdmp.gz 是初始化内存镜像名称。如果在 RHEL5 安装过程中使用 linux mpath 选项,那么不需要执行该步骤。
SLES10 的步骤
对于 SLES10,您可以使用以下两种方法实现这一点。
构建一个内嵌 DMMP 的新初始化内存镜像 运行以下命令构建一个内嵌 DMMP 的新初始化内存镜像:
<linux:~>#mkinitrd -f mpath
编辑 /etc/sysconfig/kernel 文件 编辑
/etc/sysconfig/kernel 文件并将 dm-multipath 添加到 INITRD_MODULES 行,如下所示:
INITRD_MODULES="ata_piix qla2400 reiserfs dm-multipath"
然后运行以下命令将 DMMP 构建到初始化内存镜像中:
<linux:~>#mkinitrd
编辑初始化内存镜像
现在需要编辑初始化内存镜像。选择您的操作系统(SLES9、SLES10、RHEL4 或 RHEL5)并按照相应的步骤进行操作。
SLES9 的步骤
解压初始化内存镜像
<linux:~>#mkdir tmp;cd tmp
<linux:~/tmp#cp /boot/initrdmp.gz ./
<linux:~/tmp#gunzip ./initrdmp.gz
初始化内存镜像名称与我在上一步中使用的相同;可能与您所使用的名称不同。
将初始化内存镜像挂载到临时目录
<linux:~/tmp#mkdir temp
<linux:~/tmp#mount -t ext2 -o loop ./initrdmp temp
将 multipath.conf 复制到初始化内存镜像
<linux:~/tmp#cd temp
<linux:~/tmp/temp#cp /etc/multipath.conf temp/etc/
将与 DMMP 相关的二进制和库复制到初始化内存镜像
<linux:~/tmp/temp#cp /sbin/multipath sbin
<linux:~/tmp/temp#cp /sbin/dmsetup sbin/
<linux:~/tmp/temp#cp /sbin/kpartx sbin/
<linux:~/tmp/temp#cp /sbin/mpath_* sbin/
<linux:~/tmp/temp#cp /sbin/lvm sbin/
<linux:~/tmp/temp#cp /sbin/vgscan sbin/
<linux:~/tmp/temp#cp /sbin/vgchange sbin/
<linux:~/tmp/temp#cp /sbin/devmap_name sbin/
<linux:~/tmp/temp#cp /bin/awk bin/
<linux:~/tmp/temp#cp /lib/libdevmapper.so.1.01 lib/
<linux:~/tmp/temp#cp /lib/libsysfs.so.1 lib/
<linux:~/tmp/temp#mkdir lib/tls
<linux:~/tmp/temp#cp /lib/tls/libc.so.6 lib/tls
<linux:~/tmp/temp#cp /lib/libselinux.so.1 lib/
<linux:~/tmp/temp#cp /lib/libdl.so.2 lib/
<linux:~/tmp/temp#cp /lib/tls/libm.so.6 lib/tls
<linux:~/tmp/temp#cp /lib/tls/libc.so.6 lib/tls
<linux:~/tmp/temp#cp /lib/libsysfs.so.1 lib/
在该步骤中,如果您没有使用 LVM 管理您的根分区,那么可以忽略复制 lvm、vgscan、vgchange 和相关的 lib。如果您使用的是 X86_64
SLES9,那么需要在 lib64 目录下复制相关的库。
编辑 linuxrc 文件 找到最后一个驱动程序加载行(我的例子中是 dm-round-robin.ko):
insmod /lib/modules/2.6.5-7.308-bigsmp/kernel/drivers/md/dm-round-robin.ko
将以下内容添加到最后一个驱动程序加载行之后:
清单 2. 添加 linuxrc
multipath -v2
for i in `dmsetup ls | awk {'print $1'}`;
do
kpartx -a -v /dev/mapper/$i
done
|
如果不喜欢冗长的输出,则可以移除 multipath 或 kpartx 的 -v 参数。
重新打包初始化内存镜像
<linux:~/tmp#umount temp
<linux:~/tmp#gzip initrdmp
<linux:~/tmp#mv initrdmp.gz /boot/
RHEL4 的步骤
将初始化内存镜像解压缩到临时目录
<linux host ~>#mkdir temp
<linux host ~>#cd temp
<linux host ~>#gzip -dc ../initrdmp.gz | cpio -id
将 multipath.conf 复制到初始化内存镜像
<linux host ~>#cp /etc/multipath.conf temp/etc/
将 DMMP 二进制复制到初始化内存镜像
<linux host ~>#cp /sbin/dmsetup.static sbin/
<linux host ~>#cp /sbin/multipath.static sbin/
<linux host ~>#cp /sbin/kpartx.static sbin/
<linux host ~>#cp /sbin/scsi_id.static sbin/
<linux host ~>#cp -a /etc/udev/rules.d/ etc/udev/
编辑 init 文件 在所有驱动程序加载后添加两行:
/sbin/multipath -v2
/sbin/dmsetup ls --target multipath --exec "/sbin/kpartx -a"
重新打包初始化内存镜像
<linux host ~>#find ./ | cpio -H newc -o > ../initrdmp
<linux host ~>#gzip initrdmp
<linux host ~>#cp initrdmp.gz /boot/
RHEL5 和 SLES10 的步骤
由于 RHEL5 和 SLES10 支持 DMMP,您只需要向初始化内存镜像添加 multipath.conf 以支持 DS8000。
将初始化镜像解压缩到临时目录
<linux host ~>#mkdir temp
<linux host ~>#cd temp
<linux host ~>#gzip -dc ../initrdmp.gz | cpio -id
将 multipath.conf 复制到初始化镜像
<linux host ~>#cp /etc/multipath.conf temp/etc/
重新打包初始化镜像
<linux host ~>#find ./ | cpio -H newc -o > ../initrdmp
<linux host ~>#gzip initrdmp
<linux host ~>#cp initrdmp.gz /boot/
添加 LVM2 支持
如果安装了 Linux 和 LVM2 来管理根文件系统,您需要配置 LVM 配置文件 lvm.conf 来支持 DMMP 设备,并将该 lvm.conf 复制到初始化内存镜像。您的 lvm.conf 文件应该有具有类似以下内容的行:
filter = [ "a|^/dev/mapper/.*|", "r|.*|" ]
types = [ "device-mapper", 253 ]
编辑 GRUB 配置
有些 Linux 发行版不支持 /dev/mapper 目录下的名称,因此我使用 /dev/disk/by-name。该目录下的设备映射到 /dev/mapper 目录下的设备。编辑 /boot/grub/menu.lst 文件并更改内核启动部分,如下所示(以下内容为一行):
kernel (hd0,1)/boot/vmlinuz root=/dev/disk/by-name/OSROOT2 vga=0x314 selinux=0
splash=silent resume=/dev/disk/by-name/OSROOT1 elevator=cfq showopts
在这里,OSROOT2 表示原来的 sda2,OSROOT1 表示原来的 sda1。如果使用 SLES10,则它使用 OSROOT-part2 之类的名称。由于在不同的 Linux 发行版中名称可能不同,最好使用准确的名称格式,方法是指定一个来自 DS8000 的附加 LUN,在 DMMP 将它添加到设备映射之后对其分区。添加 LUN 的原因是,使用的根文件系统和 DMMP 无法将它添加到设备映射;因此,无法对根分区应用该名称。
编辑
fstab
编辑 /etc/fstab 文件,使用 DMMP 设备替代原来的 sdx 设备,如下所示:
/dev/mapper/OSROOT2 / reiserfs acl,user_xattr 1 1
/dev/mapper/OSROOT1 swap swap pri=42 0 0
这里的 /dev/mapper/OSROOT2 取代
/dev/sda2,/dev/mapper/OSROOT1 取代 /dev/sda1。请不要在这里使用标签。Linux 将发现重复的标签,因为您的每个文件系统都有多条路径,这将导致无法自动挂载文件系统。
验证 DMMP 根
这就差不多了!您完成了设置 Linux 从多路径 SAN 启动所需的所有步骤。您可以启用服务器和 DS8000 之间的所有路径,然后重新启动 Linux。重启服务器之后,您应该使用 multipath -ll 命令验证 DMMP 是否正常。输出如下所示:
OSROOT (36005076307ffc77d0000000000001050) dm-0 IBM,2107900
[size=10G][features=1 queue_if_no_path][hwhandler=0]
\_ round-robin 0 [prio=2][active]
\_ 2:0:0:0 sda 8:0 [active][ready]
\_ 3:0:0:0 sdb 8:16 [active][ready]
如果您禁用一个路径,它将更改状态,展示路径失败:
OSROOT (36005076307ffc77d0000000000001050) dm-0 IBM,2107900
[size=10G][features=1 queue_if_no_path][hwhandler=0]
\_ round-robin 0 [prio=1][active]
\_ 2:0:0:0 sda 8:0 [failed][faulty]
\_ 3:0:0:0 sdb 8:16 [active][ready]
如果重新启用,错误路径将回到就绪状态。
您还可以尝试禁用路径和重启服务器,以验证是否可以在只有一条路径活动时启动。如果没有发生错误,则可以运行服务器,multipath -ll 输出将如下所示:
OSROOT (36005076307ffc77d0000000000001050) dm-0 IBM,2107900
[size=10G][features=1 queue_if_no_path][hwhandler=0]
\_ round-robin 0 [prio=1][active]
\_ 3:0:0:0 sdb 8:16 [active][ready]
重新添加了禁用路径之后,您需要在 HBA 驱动器发现新的启用路径后运行 multipath -v0 将其添加回路径列表。
您可以向 DS8000 上的卷组添加多个卷,供数据和应用程序使用。您可以在服务器之间拉起 Fibre Channel 电缆和交换机,以模拟坏掉的 FC 电缆;您可以禁用服务器/存储器的某个交换机端口,以模拟交换机失败。在这两种情况下,您的服务器 I/O 只会冻结几秒钟,因为 DMMP 负责处理该问题。恢复到正常状态之后,DMMP 将重新建立与坏掉路径的连接,并重新平衡其 I/O。
最后要记住,如果双路径无法提供足够的可靠性、可用性和性能,则可以添加更多路径。
结束语
我介绍了如何设置 Linux,使之从具有 DMMP 多路径支持的 DS8000 SAN 存储器启动。如果希望将这些技术应用到其他存储机制(XIV、SAN Volume Controller、DS6000 等),记住配置文件可能与我在本文中使用的 multipath.conf 不同。
参考资料 学习
获得产品和技术
讨论
关于作者  | 
|  | Lei Jiang 在上海的 IBM 中国系统和技术实验室工作,他是 Open Systems Interoperability Validation Lab 存储测试团队的成员。他已经有 3 年的 SAN 存储异构支持和测试经验;目前主要研究存储技术、开源系统 SAN 和高可用性解决方案。 |
对本文的评价
|