小试iSCSI多路径( by quqi99)

作者:张华  发表于:2014-11-07
版权声明:可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息及本版权声明

( http://blog.csdn.net/quqi99 )

以前发表在OpenStack中国社区的一篇文章(http://www.openstack.cn/p593.html ), 刚好要温习iscsi知识了, 就顺便贴过来了。

iscsi用于提供块存储,它也是c/s结构的程序,服务端叫target, 客户端叫initator。
服务端:
1,安装, sudo yum install scsi-target-utils
2,模拟一块块设备,注意,直接使用裸设备即可,不需要使用文件系统对其格式化
$ dd if=/dev/zero of=/bak/images/cinder-volume.img bs=1M count=2048
$ sudo losetup -f –show /bak/images/cinder-volume.img
/dev/loop0
3, 配置, iqn(iSCSI Qualified Name)格式是:“iqn”+“年月”+“.”+“域名的颠倒”+“:”+“设备的具体名称”
vi /etc/tgt/targets.conf
<target iqn.2013-10.cn.openstack:cinder-volume.target>
backing-store /dev/loop0
</target>
4, 启动iscsi target服务,sudo service tgtd restart
5, 配置iscsi多路径
1)创建iscsi多路径接口, 配置均位于/var/lib/iscsi/ifaces目录中。
sudo iscsiadm -m iface -I ibr-phy –op=new
sudo iscsiadm -m iface -I iwlan0 –op=new
2)更新多路径接口的配置,使之指向主机真实的网络接口。wlan0的ip为:192.168.1.103, br-phy的ip为:172.16.1.122
sudo iscsiadm -m iface -I ibr-phy –op=update -n iface.net_ifacename -v br-phy
sudo iscsiadm -m iface -I iwlan0 –op=update -n iface.net_ifacename -v wlan0
6, 可使得“sudo iscsiadm -m iface”命令查看状态。
7, iscsiadm命令说明
-m, –mode, 选项有:discovery, node, fw, host, iface,session
-I,–interface
-o, –op, 对数据库的操作,选项有:new, delete, update,show
-n, –name, 数据记录的名字
-t, –type, 选项有:sendtargets(st), fw,isns, 仅在-m 模式为 discovery 时有效。
-p, –portal, 指定其目标主机的 IP 地址和端口,默认端口为3260
-L, –loginall,其选项有 all,manual 和 automatic,指定其登录会话时的类型
-T, –targetname,表示其目标名字
-v, –value,通常在 –op=update时指定其值

客户端:
1,安装,可安装在不同的机器上,sudo yum install iscsi-initiator-utils
2, 启动iscsi initator服务,sudo service iscsi restart
3, 通过多路径的两个接口都可以查询存储的配置信息, 注意服务器默认端口3260的防火墙配置
sudo iscsiadm -m discovery -t st -p 192.168.1.103 -I ibr-phy -I iwlan0
sudo iscsiadm -m discovery -t st -p 172.16.1.122 -I ibr-phy -I iwlan0
4, 发现所有的目录节点
$ sudo iscsiadm -m node
192.168.1.103:3260,1 iqn.2013-10.cn.openstack:cinder-volume.target
172.16.1.122:3260,1 iqn.2013-10.cn.openstack:cinder-volume.target
5, 登录所有的目标节点
$ sudo iscsiadm -m node –loginall=all
Logging in to [iface: iwlan0, target: iqn.2013-10.cn.openstack:cinder-volume.target, portal: 192.168.1.103,3260] (multiple)
Logging in to [iface: ibr-phy, target: iqn.2013-10.cn.openstack:cinder-volume.target, portal: 172.16.1.122,3260] (multiple)
Login to [iface: iwlan0, target: iqn.2013-10.cn.openstack:cinder-volume.target, portal: 192.168.1.103,3260] successful.
Login to [iface: ibr-phy, target: iqn.2013-10.cn.openstack:cinder-volume.target, portal: 172.16.1.122,3260] successful.
6, 查询已登录目标节点的会话或host信息
$ sudo iscsiadm -m session
tcp: [1] 192.168.1.103:3260,1 iqn.2013-10.cn.openstack:cinder-volume.target
tcp: [2] 172.16.1.122:3260,1 iqn.2013-10.cn.openstack:cinder-volume.target
$ sudo iscsiadm -m host
tcp: [7] 192.168.1.103,[<empty>],wlan0 <empty>
tcp: [8] 172.16.1.122,[<empty>],br-phy <empty>
$ sudo cat /sys/class/iscsi_host/host7/ipaddress
192.168.1.103
6, 这时在客户机上用sudo fdisk -l命令查看,会看到有多个磁盘的状态和容量都是一样的,因为它们指向同一个iscsi target,只是访问路径不同而已
Disk /dev/sdb: 2147 MB, 2147483648 bytes
67 heads, 62 sectors/track, 1009 cylinders, total 4194304 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes

Disk /dev/sdc: 2147 MB, 2147483648 bytes
67 heads, 62 sectors/track, 1009 cylinders, total 4194304 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
7,为了客户端可以使用iscsi多路径访问存储设备,需要在客户机上安装多路径设备映射器(DM-Multipath)
1) 安装,sudo yum install device-mapper-multipath
2) 启动multipath服务,sudo service multipathd restart
3)查询多路径设备,它会包含一些路径
$ sudo multipath –ll
Oct 01 16:31:03 | DM multipath kernel driver not loaded
Oct 01 16:31:03 | /etc/multipath.conf does not exist, blacklisting all devices.
Oct 01 16:31:03 | A default multipath.conf file is located at
Oct 01 16:31:03 | /usr/share/doc/device-mapper-multipath-0.4.9/multipath.conf
Oct 01 16:31:03 | You can run /sbin/mpathconf to create or modify /etc/multipath.conf
Oct 01 16:31:03 | DM multipath kernel driver not loaded
上述日志说明模块没有加载,解决 如下:
$ sudo modprobe dm-multipath
$ sudo modprobe dm-round-robin
$ sudo service multipathd restart
还有一个错误“/etc/multipath.conf does not exist, blacklisting all devices”,配置如下,然后重启服务“sudo service multipathd restart”:
sudo vi /etc/multipath.conf
blacklist {
devnode “^sda”
}

defaults {
user_friendly_names yes
path_grouping_policy multibus
failback immediate
no_path_retry fail
}
$ sudo multipath -ll
mpatha (1IET_00010001) dm-0 IET,VIRTUAL-DISK
size=2.0G features=’0′ hwhandler=’0′ wp=rw
`-+- policy=’round-robin 0′ prio=0 status=active
|- 7:0:0:1 sdb 8:16 active ready running
`- 8:0:0:1 sdc 8:32 active ready running

这时候,可以为上面看到的多路径设备(mpatha, 这个默认名由user_friendly_names=yes控制)配置设备别名,如配置别名为kvm, 这时候应该多出设备/dev/mapper/kvm
vi /etc/multipath.conf
multipaths {
multipath {
wwid                    1IET_00010001   # 每个多路径设备都有一个全球识别符(WWID)
alias                   kvm
}
}
再用“multipath -ll”命令查看别名就变成kvm了。

删除多路径设备, multipath -f 1IET_00010001

删除也可以通过scsitools删除(sudo apt-get install scsitools)如:

sudo nova-rootwrap /etc/nova/rootwrap.conf tee -a /sys/bus/scsi/drivers/sd/3:0:1:9/delete

sudo rescan-scsi-bus
$ sudo multipath -ll
kvm (1IET_00010001) dm-0 IET,VIRTUAL-DISK
size=2.0G features=’0′ hwhandler=’0′ wp=rw
`-+- policy=’round-robin 0′ prio=0 status=active
|- 7:0:0:1 sdb 8:16 active ready running
`- 8:0:0:1 sdc 8:32 active ready running
$ ll /dev/mapper/kvm
lrwxrwxrwx 1 root root 7 Oct  1 16:48 /dev/mapper/kvm -> ../dm-0

当在 DM-Multipath中添加新设备时,这些新设备会位于 /dev 目录的两个不同位置:/dev/mapper/mpathn 和 /dev/dm-n . /dev/mapper 中的设备是在引导过程中生成的。可使用这些设备访问多路径设备,例如在生成逻辑卷时。所有 /dev/dm-n 格式的设备都只能是作为内部使用,请不要使用它们。

8, kvm虚机就可以使用上面的多路径设备了,方法是添加一个Stroage, Device type选“Disk”,
在”Select managed or other existing storage”里填:/dev/mapper/kvm, 然后在虚机里用”fdisk -l”命令就能看到了
或者在虚机启动的情况下给它attach一个磁盘:sudo virsh attach-disk fedora19 /dev/mapper/kvm vdx –cache none

或生成物理卷, pvcreate /dev/mapper/kvm

参考:

http://blog.csdn.net/yaoyao4959/article/details/11476201

http://www.ibm.com/developerworks/cn/linux/1303_zhuzq_iscsikvmha/



2015-06-11更新

今天整理机器文档发现居然还有一篇关于iscsi的文档,粘贴如下:

iscsi是C/S架构的,server端叫iSCSI Target, client端叫iSCSI Initiator
server端的配置只干一件事,就是给我提供一个target。下面看看客户如何使用这个target
1)发现target
  1, sudo iscsiadm -m discovery -t st -p 9.151.153.240
     9.151.153.240:3260,1535 iqn.2005-10.com.xivstorage:010099
  2, cat /etc/iscsi/initiatorname.iscsi
     InitiatorName=iqn.2005-10.com.xivstorage:010099
2)建立连接
  sudo iscsiadm -m node -T iqn.2005-10.com.xivstorage:010099 -p 9.151.153.240:3260 --op new
3)登录
  sudo iscsiadm -m node -T iqn.2005-10.com.xivstorage:010099 -p 9.151.153.240:3260 –login
  sudo iscsiadm -m node -T iqn.2005-10.com.xivstorage:010099 -p 9.151.153.240:3260 --op update -n node.startup -v automatic
4)登录之后,从 ls -l /dev/disk/by-path/ip-9.151.153.240:3260-iscsi-iqn.2005-10.com.xivstorage:010099-lun-122可看到设备
   ip-9.151.153.240:3260-iscsi-iqn.2005-10.com.xivstorage:010099-lun-122 -> ../../sdc
   它显示这个文件被挂到了sdc下,这个名字可能会每次变(如果只有一个target. 那么没有任何问题。 每次initiator连上后都会把这个target 映射到/dev/sdc上。 但是如果有多个target, 那么这里就出了问题。 因为initiator的连接是随机的。 可能A先连接,那A就会映射到/dev/sdc上。 如果B先连接,B就会映射到/dev/sdc上。 这就是问题的所在。),所以我们使用udev动态管理工具让这个名字固定。
   udev使用一组可配置的规则通过符号链接指向实际设备,匹配一些设备事件(例如,客户端登录到iSCSI目标)后可以调用一段客户化脚本:
   映身的iscsi target名字位于:
   [root@hua multipath]# cat /sys/class/iscsi_host/host6/device/session1/iscsi_session/session1/targetname
     iqn.2005-10.com.xivstorage:010099

   cat /etc/udev/rules.d/55-openiscsi.rules
    KERNEL=="sd*", BUS=="scsi", PROGRAM="/etc/udev/scripts/iscsidev.sh %b",SYMLINK+="iscsi/%c"

   cat /etc/udev/scripts/iscsidev.sh
    #!/bin/sh
    # FILE: /etc/udev/scripts/iscsidev.sh
    BUS=${1}
    HOST=${BUS%%:*}
    [ -e /sys/class/iscsi_host ] || exit 1
    file="/sys/class/iscsi_host/host${HOST}/device/session*/iscsi_session*/targetname"
    target_name=$(cat ${file})
    # This is not an open-scsi drive
    if [ -z "${target_name}" ]; then
     exit 1
    fi
    echo "${target_name##*.}"
5) 登录成功之后
        用fdisk -l 命令查看硬盘,
    fdisk /dev/sdb  #格式化
    mkfs.ext4 /dev/sdb #创建分区
    mount
    df -h
    umount
    vi /etc/fstab
6)多路径轮询,SAN设备在连入系统后,表示为一个或多个target ID,它的逻辑分配单元即为LUN-Logical Unit Number(逻辑单元号)。Multipath除了上面提到的,实现LUN设备的持久化,它还有另一个功能,支持多路径轮询(提高 I/O负载能力)。 即可以通过多个网卡去访问Target 设备。 这样就提高了I/O的能力。 在生产环境中较多使用multipath实现LUN的持久化和多路径访问。1个iSCSI Initiator透过多个Session连入同1个iSCSI Target设备,以便利用多网卡或iSCSI HBA启用负载平衡与故障失效切换机制,也可称作Multiple Sessions per Initiator。
    http://blog.csdn.net/tianlesoftware/article/details/5979061
    iscsiadm -m node -T iqn.2006-01.com.san -p 192.168.6.1 -u
    iscsiadm -m iface -I iface0 –op=new
    iscsiadm -m iface -I iface1 –op=new
    iscsiadm -m iface -I iface0 --op=update -n iface.net_ifacename -v eth0
    iscsiadm -m iface -I iface1 --op=update -n iface.net_ifacename -v eth1
    iscsiadm -m iface
    iscsiadm -m discovery -t st -p 192.168.6.1  -I iface0 -I iface1
    iscsiadm -m node -l
    iscsiadm -m node
    iscsiadm -m node -o delete -T iqn.2006-01.com.san -p 192.168.6.1:3260
    netstat -anp |grep 3260
7) Qemu中关于存储的设置
  vim device.xml
    <?xml version="1.0"?>
     <disk type="block">
      <driver name="qemu" type="raw"/>
      <source dev="/dev/disk/by-path/ip-9.151.153.240:3260-iscsi-iqn.2005-10.com.xivstorage:010099-lun-122"/>
      <target dev="vdc" bus="virtio"/>
    </disk>

采用普通的驱动,即硬盘和网卡都采用默认配置情况下,硬盘是 ide 模式,而网卡工作在 模拟的rtl 8139 网卡下,速度为100M 全双工。采用 virtio 驱动后,网卡工作在 1000M 的模式下,硬盘工作是SCSI模式下。

<disk type='file' device='disk'>
<driver name='qemu' type='raw' cache='none'/>
    <source file='/var/lib/libvirt/images/kvm3.img'/>
    <target dev='hda' bus='ide'/>
</disk> 


2016-11-03

1, http://pastebin.ubuntu.com/23419613/

2, http://pastebin.ubuntu.com/23419637/

Two NICs in both iscsi target and iscsi initiate (tun2001  wlp3s0)
sudo iscsiadm -m discovery --op=new --op=del --type sendtargets --portal 192.168.99.122
sudo iscsiadm -m discovery --op=new --op=del --type sendtargets --portal 10.9.0.1
sudo iscsiadm -m node list    #sudo iscsiadm -m node --op=delete
#sudo iscsiadm --mode node --logoutall=all
sudo iscsiadm -m node -l   
sudo iscsiadm -m session list #sudo iscsiadm -m session -u

sudo apt-get install multipath-tools
sudo multipath -ll
sudo /etc/init.d/multipath-tools restart
cat /etc/multipath.conf
defaults {
    udev_dir /dev
    polling_interval 10
    selector "round-robin 0"
    path_grouping_policy multibus
    getuid_callout "/lib/udev/scsi_id --whitelisted --device=/dev/%n"
    # prio "alua"
    # prio_args "timeout=1000 preferredsds=foo"
    features "1 queue_if_no_path"
    path_checker directio
    rr_min_io 100
    flush_on_last_del yes
    max_fds    8192
    # rr_weight priorities
    failback immediate
    no_path_retry fail
    queue_without_daemon no
    user_friendly_names no
    # mode 0644
    # uid 0
    # gid disk
    # checker_timeout 60
    # fast_io_fail_tmo 5
    # dev_loss_tmo 600
}
blacklist {
    devnode "^(ram|raw|loop|fd|md|dm-|sr|scd|st)[0-9]*"
    devnode "^hd[a-z]"
}
multipaths {
    multipath {
        wwid 36001405c076cd27d4013d4283daf31d8
        alias mpathaa
    }
    multipath {
        wwid 3600140565a7dfc0d5311d4a3ad9939dd
        alias mpathab
    }
}



附录:安装iscsi
  sudo yum install scsi-target-utils iscsi-initiator-utils
  sudo service iscsi start
  sudo systemctl status tgtd.service
  但是照上述方式安装的scsi-target-utils启动不了,/var/log/message里报:
             Feb 24 15:05:26 hua systemd[1]: PID file /var/run/tgtd.pid not readable (yet?) after start.
Feb 24 15:05:27 hua tgtd: work_timer_start(146) use timer_fd based scheduler
Feb 24 15:05:27 hua tgtd: bs_init(312) use signalfd notification
Feb 24 15:05:28 hua dbus-daemon[1042]: ** Message: No devices in use, exit
解决办法:
sudo chkconfig network on
sudo chkconfig NetworkManager off
sudo service  NetworkManager stop
sudo service  NetworkManager disable


  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

quqi99

你的鼓励就是我创造的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值