用multipath生成映射后,会在/dev目录下产生多个指向同一条链路的设备:
/dev/mapper/mpathn
/dev/mpath/mpathn
/dev/dm-n
但它们的来源是完全不同的:
/dev/mapper/mpathn 是multipath虚拟出来的多路径设备,我们应该使用这个设备;
/dev/mpath/mpathn 是udev设备管理器创建的,实际上就是指向下面的dm-n设备,仅为了方便,不能用来挂载;
/dev/dm-n 是软件内部自身使用的,不能被软件以外使用,不可挂载。
简单来说,就是我们应该使用/dev/mapper/下的设备符。对该设备即可用fdisk进行分区,或创建为pv。
然后用iostat观察各通道的流量和状态,以判断Failover或负载均衡方式是否正常:
# dd if=/dev/zero of=/dev/mapper/mpath0
# iostat -k 2
mpath18设备读写时,sdaf、sdv 会处于active状态,都有数据流,但sdb、sdl 组成的链路是enabled,作为ready情况。这为Failover(主备)情况
默认情况下,multipath已经支持大部分常见的存储型号(可见multipath.conf.defaults),但不同的multipath版本可能都有些不同。这时,建议参考存储的官方文档:
在前面的配置中,我们已经在/etc/mulitpah.conf中配置了多路径的默认path_grouping_policy为multibus。但有时候,同一台机器上如果连接了一个以上的存储时,可能默认规则并不完全适用。这时,我们可以给特定的存储定制多路径符合的策略。
devices {
device {
vendor "HITACHI" //厂商名称
product "OPEN-V" //产品型号
path_grouping_policy group_by_prio //默认的路径组策略
path_grouping_policy failover
#getuid_callout "/sbin/scsi_id -p 0x80-g -u -s /block/%n" //获得唯一设备号使用的默认程序
path_checker readsector0 //决定路径状态的方法
path_checker tur
path_selector "round-robin 0" //选择那条路径进行下一个IO操作的方法
prio_callout "/sbin/mpath_prio_alua/dev/%n" //获取有限级数值使用的默认程序
failback immediate //故障恢复的模式
#hardware_handler "0" //确认用来在路径切换和IO错误时,执行特定的操作的模块。
#no_path_retry queue //在disablequeue之前系统尝试使用失效路径的次数的数值
#rr_min_io 100 //在当前的用户组中,在切换到另外一条路径之前的IO请求的数目
}
}
※千万不要写错path_checker(可能值有:readsector0, tur, emc_clariion, hp_sw, directio)。不清楚的,可从存储的官方资料查看
# multipath -v3 -ll
# dmsetup ls
# multipathd -k
> > show config
> >reconfigure
> >show paths
> > CTRL-D
/var/lib/multipath/bindings
/dev/mapper/
# cat /sys/block/sda/device/vendor
# cat /sys/block/sda/device/model
※注意:
/var/lib/multipath/bindings显示的内容包括黑名单中的wwid,其mpathn顺序与multipath-ll 的结果可能不同。实际以multipath -ll 的结果为可用设备。
路径切换处理
※注意:1、绑定后,需重新生成路径的映射表;2、当加入该wwid绑定后,没有绑定的设备将不能使用,用-ll 也无法看到这些设备,但/var/lib/multipath/bindings 中可见。
# modprobe dm-multipath
# service multipathd start
# multipath -v0
在您更新 /etc/multipath.conf文件后,您必须手动让 m ultipathd 守护进程重新载入该文件。以下命令可重新载入更新的 /etc/multipath.conf 文件。
# servicemultipathd reload