DM多路径存储简单实现
什么是 multipath
普通的电脑主机都是一个硬盘挂接到一个总线上,这里是一对一的关系。而到了有光纤组成的SAN 环境,由
于主机和存储通过了光纤交换机连接,这样的话,就构成了多对多的关系。也就是说,主机到存储可以有多条
路径可以选择。主机到存储之间的IO 由多条路径可以选择。
既 然,每个主机到所对应的存储可以经过几条不同的路径,如果是同时使用的话,I/O 流量如何分配?其中一
条路径坏掉了,如何处理?还有在操作系统的角度来 看,每条路径,操作系统会认为是一个实际存在的物理
盘,但实际上只是通向同一个物理盘的不同路径而已,这样是在使用的时候,就给用户带来了困惑。多路径软
件就是为了解决上面的问题应运而生的。多路径的主要功能就是和存储设备一起配合实现如下功能:
1) 故障的切换和恢复
2) IO 流量的负载均衡
3) 磁盘的虚拟化
一套完整的multipath 由下面几部分组成:
1) device-mapper-multipath
提 供multipathd 和multipath 等工具和multipath.conf 等配置文件。这些工具通过device mapper 的ioctr
的接口创建和配置multipath 设备(调用device-mapper 的用户空间库。创建的多路径设备会在/dev
/mapper 中);
2) device-mapper
device-mapper 包括两大部分:内核部分和用户部分。
内 核部分由device-mapper 核心(multipath.ko)和一些target driver(dm-multipath.ko)构成。dm-mod.ko 是实现multipath 的基础,dm-multipath 其实是dm 的一个 target 驱动。核心完成设备的映射,而
target 根据映射关系和自身特点具体处理从mappered device 下来的i/o。同时,在核心部分,提供了一个接
口,用户通过ioctr 可和内核部分通信,以指导内核驱动的行为,比如如何创建mappered device,这些
device 的属性等。
用户空间部分包括device-mapper 这个包。其中包括dmsetup 工具和一些帮助创建和配置 mappered device
的库。这些库主要抽象,封装了与ioctr 通信的接口,以便方便创建和配置mappered device。Device-
mapper-multipath 的程序中就需要调用这些库;
3) scsi_id
其 包含在udev 程序包中,可以在multipath.conf 中配置该程序来获取scsi 设备的序号。通过序号,便可以
判断多个路径对应了同一设备。这个 是多路径实现的关键。scsi_id 是通过sg 驱动,向设备发送EVPD
page80 或page83 的inquery 命令来查询scsi 设备的标识。但一些设备并不支持EVPD 的inquery 命令,
所以他们无法被用来生成multipath 设备。但可以改写scsi_id,为不能提供scsi 设备标识的设备虚拟一个标
识符,并 输出到标准输出。
multipath 程序在创建multipath 设备时,会调用scsi_id,从其标准输出中获得该设备的scsi id。在改写
时,需要修改scsi_id 程序的返回值为0。因为在multipath 程序中,会检查该直来确定scsi id 是否已经成功
得到。
系统环境: RHEL6.0 SELINUX AND IPTABLES OFF
server1:eth0:192.168.0.2
eth1:192.168.0.3
server2:eth0:192.168.0.4
####server1安装scsi-target-utils
yum install scsi-target-utils -y
####编辑server1端scsi-target-utils的文件
vim /etc/tgt/target.conf
....
#
# backing-store /dev/LVM/somedevice
#
backing-store /dev/sdb1
initiator-address 192.168.0.4 #若省略此项,表示对所有用户可使用
....
/etc/init.d/tgtd start
tgtadm --lld iscsi --mode target --op show #用此命令验证指定是否正确
####server2安装软件
yum install iscsi-initiator-utils device-mapper device-mapper-multipath -y
iscsiadm -m discovery -t st -p 192.168.0.2 #发现target上的卷
iscsiadm -m node -l -p 192.168.0.2 #将target上发现的卷加入进来
iscsiadm -m discovery -t st -p 192.168.0.3
iscsiadm -m node -l -p 192.168.0.3
####便件DM文件(NEW)
vim /etc/multipath.conf
backlist {
devnode "sda" #表示禁用此设备(系统信息通常在/dev/sda)
}
defaults {
user_friendly_names yes
udev_dir /dev
path_grouping_policy failover #failover 为主备模式; multibus 为负载均衡模式
failback immediate
no_path_retry fail
}
#multipath.conf配置参数,默认值,可参考:
/usr/share/doc/device-mapper-multipath-0.4.9/multipath.conf.annotated
/etc/init.d/mulipathd start
[root@server4 ~]# multipath -ll #此为主备模式下链路状态
mpatha (1IET 00010001) dm-2 IET,VIRTUAL-DISK
size=2.0G features='0' hwhandler='0' wp=rw
|-+- policy='round-robin 0' prio=1 status=active
| `- 2:0:0:1 sdb 8:0 active ready running
`-+- policy='round-robin 0' prio=1 status=enabled
`- 3:0:0:1 sdc 8:16 active ready running
注:可以看到sdb 和sdc 两条链路复合成一条链路mpath,此为Failover(主备)情况,当你对mpath 设备读写时,处于active 状态的sdb 链路有数据流,而处于enabled 状态的sdc 链路无数据流;当sdb 链路出现问题时,才会切换到sdc 链路上。
[root@server4 ~]# multipath -ll #此为负载均衡模式下链路状态
mpatha (1IET 00010001) dm-2 IET,VIRTUAL-DISK
size=2.0G features='0' hwhandler='0' wp=rw
`-+- policy='round-robin 0' prio=1 status=active
|- 2:0:0:1 sdb 8:0 active ready running
`- 3:0:0:1 sdc 8:16 active ready running
注:当你对mpath设备读写的时,处于active状态的链路都有数据流,通过两条链路并行写入设备
####在server4上测试
用dd 往磁盘读写数据,然后用iostat 观察各通道的流量和状态,以判断Failover 或负载均衡方式是否正常:
dd if=/dev/zero of=/dev/mapper/mpatha #可将其打入后台
iostat -k 2 #此为主备模式下通过一条链路写入
avg-cpu: %user %nice %system %iowait %steal %idle
0.00 0.00 4.04 95.96 0.00 0.00
Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn
vda 0.00 0.00 0.00 0 0
dm-0 0.00 0.00 0.00 0 0
dm-1 0.00 0.00 0.00 0 0
sdb 341.92 1351.52 2068.69 2676 4096 #
sdc 0.00 0.00 0.00 0 0 #
dm-2 341.92 1351.52 2068.69 2676 4096
dm-3 0.00 0.00 0.00 0 0
iostat -k 2 #此模式为负载均衡模式下通链路写入数据的状态
avg-cpu: %user %nice %system %iowait %steal %idle
0.51 0.00 19.49 80.00 0.00 0.00
Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn
vda 0.00 0.00 0.00 0 0
dm-0 0.00 0.00 0.00 0 0
dm-1 0.00 0.00 0.00 0 0
sdb 893.85 3542.56 4201.03 6908 8192 #
sdc 626.67 2473.85 4201.03 4824 8192 #
dm-2 1520.51 6016.41 8402.05 11732 16384
dm-3 0.00 0.00 0.00 0 0
....GOOD LUCK!
阅读(3101) | 评论(2) | 转发(2) |