加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

multipath 配置各选项详解【转,SUSE】

(2014-01-09 13:28:51)
分类: Multipath
转载地址:http://www.novell.com/zh-cn/documentation/sles11/stor_admin/data/bbi89rh.html#bbj87iv

7.6配置路径故障转移策略和优先级

在 Linux 主机中,当存在多个路径到某储存控制器时,每个路径都显示为独立的块设备,导致单个 LUN 有多个块设备。设备映射程序多路径服务检测到具有同一 LUN ID 的多个路径,并使用该 ID 创建了一个新的多路径设备。例如,如果具有两个 HBA 的主机通过单个未确定区域的光纤通道交换机挂接到一个带两个端口的储存控器,则会看到四个块设备:/dev/sda/dev/sdb/dev/sdc 和 /dev/sdd。设备映射程序多路径服务创建了单个块设备 /dev/mpath/mpath1,它将通过这四个底层块设备重路由 I/O。

本节描述如何指定故障转移策略和配置路径的优先级。

7.6.1配置路径故障转移策略

使用带 -p 选项的 multipath 命令设置路径故障转移策略:


multipath devicename -p policy 

将 policy 替换为以下策略选项之一:

表 7-4 multipath -p 命令的组策略选项

策略选项

描述

failover

每个优先级组一个路径。

multibus

一个优先级组中的所有路径。

group_by_serial

每个检测到的序列号一个优先级组。

group_by_prio

每个路径优先级值一个优先级组。优先级由调出程序在 /etc/multipath.conf 配置文件中指定为 global、per-controller 或 per-multipath 选项来确定。

group_by_node_name

每个目标节点名一个优先级组。目标节点名是在 /sys/class/fc_transport/target*/node_name 位置获取的。

7.6.2配置故障转移优先级

必须在 /etc/multipath.conf 文件中手动输入设备的故障转移优先级。/usr/share/doc/packages/multipath-tools/multipath.conf.annotated 文件中有所有设置和选项的示例。

了解优先级组和属性

优先级组是通向同一物理 LUN 的路径的集合。默认情况下,I/O 在组中的所有路径中以循环方式分布。multipath 命令会基于 SAN 的 path_grouping_policy 设置为该 SAN 中的每个 LUN 自动创建优先级组。multipath 命令将一个组中的路径数乘以该组的优先级以确定哪个组是主组。计算出的值最高的组即是主组。当主组中的所有路径失败时,具有下一个最高值的优先级组即变为活动的组。

路径优先级是指派给一个路径的整数值。该值越高,优先级越高。将使用一个外部程序来指派每个路径的优先级。对于给定的设备,具有相同优先级的路径属于同一优先级组。

表 7-5 多路径属性

多路径属性

描述

user_friendly_names

指定使用 ID 还是使用/var/lib/multipath/bindings文件以 /dev/mapper/mpathN 的格式向多路径设备指派永久唯一别名。

yes: 自动生成用户友好的名称作为多路径设备的别名而不是实际 ID。

no: 默认。使用 /dev/disk/by-id/ 位置中显示的 WWID。

blacklist

指定作为非多路径设备忽略的设备名称的列表,例如 cciss、fd、hd、md、dm、sr、scd、st、ram、raw、loop。

有关示例,请参见 在 /etc/multipath.conf 中将非多路径设备加入黑名单

blacklist_exceptions

指定视为多路径设备(即使它们包含在黑名单中)的设备名称的列表。

有关示例,请参见 /usr/share/doc/packages/multipath-tools/multipath.conf.annotated 文件。

failback

指定是否监视失败路径恢复,并指明失败路径重新使用之后组故障回复的时间。

当失败的路径恢复时,该路径会基于此设置重新添加到支持多路径的路径列表中。多路径计算优先级组,并在主路径的优先级超出备用组时更改活动优先级组。

immediate: 当一个路径恢复时,立即启用该路径。

n (> 0): 当路径恢复时,等待 n 秒再启用该路径。指定大于 0 的整数值。

manual: (默认)不监视失败的路径是否恢复。管理员运行multipath 命令以更新启用的路径和优先级组。

getuid

用于调用以获取唯一路径标识符的默认程序和自变量。应使用绝对路径指定。


/sbin/scsi_id -g -u -s

这是默认位置和自变量。

示例:


getuid "/sbin/scsi_id -g -u -d /dev/%n"

no_path_retry

指定在路径失败时使用的行为。

n (> 0): 指定 multipath 停止排队和路径失败之前的重试次数。指定大于 0 的整数值。

fail: 指定立即失败(不排队)。

queue: 永不停止排队(一直排队,直到该路径成为活动路径)。

path_grouping_policy

指定由给定控制器托管的多路径设备的路径分组策略。

failover: 每个优先级组指派一个路径,以便每次只使用一个路径。

multibus: (默认)所有有效路径在一个优先级组中。通讯在该组所有活动路径之间平衡负载。

group_by_prio: 对于每个路径优先级值,都存在一个优先级组。具有相同优先级的路径在同一优先级组中。优先级由外部程序指派。

group_by_serial: 路径按 SCSI 目标序列号(控制器节点 WWN)分组。

group_by_node_name: 每个目标节点名指派一个优先级组。目标节点名是在 /sys/class/fc_transport/target*/node_name 中获取的。

path_checker

确定路径的状态。

directio: (在 multipath-tools 版本 0.4.8 和更高版本中是默认的)读取具有直接 I/O 的第一个扇区。对于 DASD 设备非常有用。在/var/log/messages 中记录故障消息。

readsector0: (在 multipath-tools 版本 0.4.7 和更低版本中是默认的)读取设备的第一个扇区。在 /var/log/messages 中记录故障消息。

tur: 向设备发出 SCSI 测试单元就绪命令。如果 LUN 支持,则这是首选设置。失败时,命令不在 /var/log/messages 中填充消息。

一些 SAN 供应商提供了自定义的 path_checker 选项:

  • emc_clariion: 查询 EMC Clariion EVPD 页 0xC0 以确定路径状态。

  • hp_sw: 使用活动/备用固件检查 HP 储存阵列的路径状态(Up、Down 还是 Ghost)。

  • rdac: 检查 LSI/Engenio RDAC 储存控制器的路径状态。

path_selector

指定用于负载平衡的 path-selector 算法。

round-robin 0: (默认)用于平衡一个优先级组中所有活动路径的通讯的负载平衡算法。

从 SUSE Linux Enterprise Server 11 开始,提供以下附加 I/O 平衡选项:

least-pending: 为基于 bio 的设备映射器多路径提供最少待发 I/O 动态负载平衡策略。此负载平衡策略考虑路径上待发的未服务请求数并选择待发服务请求计数最小的路径。

此策略在 SAN 环境具有异构组件时特别有用。例如,如果有一个 8GB HBA 和一个 2GB HBA 连接到同一服务器,则对于此算法最好利用 8GB HBA。

length-load-balancing: 用于平衡路径上运行中 I/O 数的动态负载平衡器,类似于 least-pending 选项。

service-time: 面向服务时间的、用于根据等待时间平衡路径上的 I/O 的负载平衡器。

pg_timeout

指定路径组超时处理。

NONE(内部默认值)

prio_callout

多路径 prio_callouts 位于/lib/libmultipath/lib*的共享库中。通过使用共享库,调用将在守护程序启动时装载到内存中。

指定用于确定多路径映射布局的程序和自变量。

当使用 multipath 命令查询时,指定的 mpath_prio_* 调出程序会返回给定路径与整个多路径布局相对的优先级。

当与 group_by_prio 的 path_grouping_policy 一起使用时,具有相同优先级的所有路径会分到一个多路径组中。具有最高聚合优先级的组成为活动组。

当一个组中的所有路径失败时,具有下一个最高聚合优先级的组成为活动组。此外,可能会向目标发送故障转移命令(由硬件处理程序确定)。

mpath_prio_* 程序也可以是由指定安装的供应商或管理员创建的自定义脚本。

命令行中的 %n 展开为 /dev 目录中的设备名。

%b 展开为 /dev 目录中主要:次要格式的设备号。

%d 展开为 /dev/disk/by-id 目录中的设备 ID。

如果设备可热插拔,请使用 %d 标志而不是 %n。这会处理设备可用的时间和 udev 创建设备节点的时间之间经过的时间。

如果不使用 prio_callout 属性,所有路径都是等同的。这是默认值。

/bin/true: 当不在使用 group_by_priority 时使用此值。

当用 multipath 命令查询时,prioritizer 程序会生成路径优先级。程序名必须以 mpath_prio_ 开头,并按使用的设备类型或平衡方法命名。当前优先级排序程序包括以下程序:

mpath_prio_alua %n: 基于 SCSI-3 ALUA 设置生成路径优先级。

mpath_prio_balance_units: 为所有路径生成同一优先级。

mpath_prio_emc %n: 为 EMC 阵列生成路径优先级。

mpath_prio_hds_modular %b: 为 Hitachi HDS Modular 储存阵列生成路径优先级。

mpath_prio_hp_sw %n: 为活动/备用模式的 Compaq/HP 控制器生成路径优先级。

mpath_prio_netapp %n: 为 NetApp 阵列生成路径优先级。

mpath_prio_random %n: 为每个路径生成随机优先级。

mpath_prio_rdac %n: 为 LSI/Engenio RDAC 控制器生成路径优先级。

mpath_prio_tpc %n: 您还可以选择使用由供应商或管理员创建的脚本,从您用于为每个路径指定所用优先级的文件获取优先级。

mpath_prio_spec.sh %n: 提供基于另一个数据文件中包含的信息,为多路径生成优先级的用户创建脚本的路径。(此路径和文件名仅作为示例提供。请改为您的脚本的位置。)该脚本可由供应商或管理员创建。脚本的目标文件可以识别所有多路径设备的每个路径并为每个路径指定优先级。有关示例,请参见 部分 7.6.3, 使用脚本设置路径优先级

rr_min_io

指定在切换到同一路径组中的下一个路径之前要路由到一个路径的 I/O 事务数,下一个路径由path_selector 设置中指定的算法确定。

n (>0): 指定大于 0 的整数值。

1000: 默认。

rr_weight

指定用于路径的加权方法。

uniform: 默认。所有路径具有相同循环加权。

priorities: 每个路径的加权通过该路径的优先级乘以 rr_min_io 设置来确定。

配置循环负载平衡

所有路径都是活动的。I/O 被配置为等候数秒或一定的 I/O 事务数,再移到序列中下一个打开的路径。

配置单路径故障转移

具有最高优先级(设置值为最低)的一个路径是活动的,可以进行通讯。其他路径可用于故障转移,但在发生故障转移前不会使用。

为循环负载平衡将 I/O 路径分组

具有相同优先级的多个路径分在活动的组中。当该组中的所有路径失败时,设备会故障转移到下一个最高优先级的组。该组中的所有路径以循环负载平衡的方式共享通讯负载。

7.6.3使用脚本设置路径优先级

您可以创建与“设备映射器多路径 (DM-MPIO)”交互的脚本,从而当 LUN 设置为 prio_callout 设置的资源时提供通向 LUN 的路径的优先级。

首先,设置一个文本文件,列出关于每个设备的信息和要指派给每个路径的优先级值。例如,将该文件命名为/usr/local/etc/primary-paths。以下列格式为每个路径输入一行:


host_wwpn target_wwpn scsi_id priority_value

为设备上的每个路径返回一个优先级值。确保变量 FILE_PRIMARY_PATHS 解析为具有每个设备相应数据(主机 wwpn、目标 wwpn、scsi_id 和优先级值)的真实文件。

单个 LUN 有 8 个路径的 primary-paths 文件内容类似如下所示:


0x10000000c95ebeb4 0x200200a0b8122c6e 2:0:0:0 sdb 3600a0b8000122c6d00000000453174fc 50

0x10000000c95ebeb4 0x200200a0b8122c6e 2:0:0:1 sdc 3600a0b80000fd6320000000045317563 2

0x10000000c95ebeb4 0x200200a0b8122c6e 2:0:0:2 sdd 3600a0b8000122c6d0000000345317524 50

0x10000000c95ebeb4 0x200200a0b8122c6e 2:0:0:3 sde 3600a0b80000fd6320000000245317593 2

0x10000000c95ebeb4 0x200300a0b8122c6e 2:0:1:0 sdi 3600a0b8000122c6d00000000453174fc 5

0x10000000c95ebeb4 0x200300a0b8122c6e 2:0:1:1 sdj 3600a0b80000fd6320000000045317563 51

0x10000000c95ebeb4 0x200300a0b8122c6e 2:0:1:2 sdk 3600a0b8000122c6d0000000345317524 5

0x10000000c95ebeb4 0x200300a0b8122c6e 2:0:1:3 sdl 3600a0b80000fd6320000000245317593 51

要继续表 7-5中提及的示例,请创建一个名为 /usr/local/sbin/path_prio.sh 的脚本。您可以使用任何路径和文件名。该脚本将执行以下任务:

  • 使用 multipath 查询时,从 /usr/local/etc/primary-paths 文件 grep 该设备及其路径。

  • 向 multipath 返回该文件中该项最后一列的优先级值。

7.6.4配置 ALUA (mpath_prio_alua)

mpath_prio_alua(8) 命令用作 Linux multipath(8) 命令的优先级调出值。它返回一个由 DM-MPIO 用于将具有相同优先级的 SCSI 设备分组到一起的编号。路径优先级工具基于 ALUA(异步逻辑单元访问)。

语法


mpath_prio_alua [-d directory] [-h] [-v] [-V] device [device...] 

前提条件

SCSI 设备。

选项

-d 目录

指定可以找到列出的设备节点名的 Linux 目录路径。默认目录是 /dev。使用此选项时,请仅指定要管理的一个或多个设备的设备节点名(例如 sda)。

-h

显示此命令的帮助,然后退出。

-v

打开详细输出以按用户可读格式显示状态。输出包含关于指定的设备属于哪个端口组及其当前状态的信息。

-V

显示此工具的版本号,然后退出。

device [device...]

指定要管理的一个或多个 SCSI 设备。该设备必须是支持报告目标端口组 (sg_rtpg(8)) 命令的 SCSI 设备。对该设备节点名使用以下格式之一:

  • 完整 Linux 目录路径,例如 /dev/sda。不要使用 -d 选项。

  • 仅设备节点名,例如 sda。使用 -d 选项指定该目录路径。

  • 设备的主号和次号,使用冒号 (:) 隔开,没有空格,例如 8:0。这会在 /dev 目录中创建一个临时设备节点,名称格式为 tmpdev-:-。例如,/dev/tmpdev-8:0-

返回值

成功后,返回值 0 和该组的优先级值。表 7-6显示由 mpath_prio_alua 命令返回的优先级值。

表 7-6 设备映射程序多路径的 ALUA 优先级

优先级值

描述

50

该设备在活动的优化组中。

10

该设备在活动但非优化组中。

1

该设备在备用组中。

0

所有其他组。

由于 multipath 处理值的方式,这些值的间隔很大。它将一个组中的路径数乘以该组的优先级值,然后选择结果最高的组。例如,如果一个非优化组有六个路径 (6 x 10 = 60),并且优化路径组有单个路径 (1 x 50 = 50),则该非优化组得分最高,所以 multipath 选择该非优化组。发往该设备的通讯以循环方式使用该组中的所有六个路径。

发生故障时,返回值 1 到 5,表示该命令发生故障的原因。有关信息,请参见 mpath_prio_alua 的手册页。

7.6.5报告目标路径组

使用 SCSI 报告目标端口组 (sg_rtpg(8)) 命令。有关信息,请参见 sg_rtpg(8) 的手册页。

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有