zoukankan      html  css  js  c++  java
  • multipath多路径实验01-构建iSCSI模拟环境

    multipath多路径实验01-构建iSCSI模拟环境

    前几天跟同事网上闲聊技术,吐槽之前自己没有配置过多路径的经历,虽然多路径的配置过程很简单,职责划分也应是主机或存储工程师来搞定,DBA只需要直接拿来用,但这样总感觉少了些踏实感。
    本着学习的心态,在虚拟环境下模拟,来做一个多路径的实验。
    本文主要描述使用iscsi模拟存储划出的1个LUN,最终由两条链路连接到主机,显示为两个磁盘的场景。为后续配置multipath提供前置环境。

    1.模拟主机环境

    首先虚拟一个linux服务器,用作搭建iSCSI服务器。然后客户端直接就使用我之前的一套RAC环境的第1个节点,在这里就相当于普普通通的一个iSCSI客户端。

    要求如下:
    客户端(192.168.56.150),需要新增配置两块网卡;
    服务端(192.168.56.99),需要新增配置两块网卡.

    这里实际使用Virtual Box给每台机器新增两个内部网络即可。

    客户端配置2块网卡:

    --复制现有网卡配置
    [root@jyrac1 network-scripts]# cat ifcfg-eth3
    DEVICE=eth3
    TYPE=Ethernet
    ONBOOT=yes
    BOOTPROTO=static
    IPADDR=10.10.10.11
    NETMASK=255.255.255.0
    [root@jyrac1 network-scripts]# cp ifcfg-eth3 ifcfg-eth4
    [root@jyrac1 network-scripts]# cp ifcfg-eth3 ifcfg-eth5
    
    --修改DEVICE名称和IPADDR信息,其他不变
    eth4 10.10.1.150
    eth5 10.10.2.150
    
    --启动新配置的两块网卡
    ifup eth4
    ifup eth5
    

    这里的eth4和eth5可以想象成是和存储连接的内部网络。

    服务端配置2块网卡:

    --复制现有网卡配置
    [root@Storage network-scripts]# cat ifcfg-eth2 
    DEVICE=eth2
    TYPE=Ethernet
    ONBOOT=yes
    BOOTPROTO=static
    IPADDR=192.168.56.99
    NETMASK=255.255.255.0
    [root@Storage network-scripts]# cp ifcfg-eth2 ifcfg-eth3
    [root@Storage network-scripts]# cp ifcfg-eth2 ifcfg-eth4
    
    --修改DEVICE名称和IPADDR信息,其他不变
    eth3 10.10.1.99
    eth4 10.10.2.99
    
    --启动新配置的两块网卡
    ifup eth3
    ifup eth4
    

    测试服务端和客户端的IP互通没问题。

    2.准备软件环境

    各自安装scsi相关的软件包。

    引用鸟哥的iSCSI搭建说明:

    scsi-target-utils:用來將 Linux 系統模擬成為 iSCSI target 的功能;
    iscsi-initiator-utils:掛載來自 target 的磁碟到 Linux 本機上。

    这样我们就知道服务端需要安装scsi-target-utils这个包,客户端需要安装iscsi-initiator-utils这个包。
    现在来直接yum安装对应软件,如果yum本地源配置有问题,可以参考之前文章:
    配置yum本地源:http://www.cnblogs.com/jyzhao/p/3938290.html

    --服务端
    yum安装scsi-target-utils

    yum install scsi-target-utils
    

    --客户端
    yum安装iscsi-initiator-utils

    yum install iscsi-initiator-utils
    

    3.模拟存储加盘

    --服务端操作

    填加一个50G的盘,实际就是用来模拟存储新增实际的一块盘。我这里选择固定大小存储50G。
    我这里新增加的盘显示为/dev/sdb,我将它创建成lvm,并先分出一个10g的lv,供后续使用。

    [root@Storage ~]# pvcreate /dev/sdb
      Physical volume "/dev/sdb" successfully created
    [root@Storage ~]# vgcreate vg_storage /dev/sdb
      Volume group "vg_storage" successfully created
    [root@Storage ~]# lvcreate -L 10g -n lv_lun1 vg_storage
      Logical volume "lv_lun1" created
    

    lvm的信息:

    [root@Storage ~]# pvs
      PV         VG           Fmt  Attr PSize  PFree 
      /dev/sda2  vg_linuxbase lvm2 a--  29.51g     0 
      /dev/sdb   vg_storage   lvm2 a--  50.00g 40.00g
    [root@Storage ~]# vgs
      VG           #PV #LV #SN Attr   VSize  VFree 
      vg_linuxbase   1   2   0 wz--n- 29.51g     0 
      vg_storage     1   1   0 wz--n- 50.00g 40.00g
    [root@Storage ~]# lvs
      LV      VG           Attr       LSize  Pool Origin Data%  Move Log Cpy%Sync Convert
      lv_root vg_linuxbase -wi-ao---- 27.54g                                             
      lv_swap vg_linuxbase -wi-ao----  1.97g                                             
      lv_lun1 vg_storage   -wi-a----- 10.00g         
    [root@Storage ~]# lvscan
      ACTIVE            '/dev/vg_storage/lv_lun1' [10.00 GiB] inherit
      ACTIVE            '/dev/vg_linuxbase/lv_root' [27.54 GiB] inherit
      ACTIVE            '/dev/vg_linuxbase/lv_swap' [1.97 GiB] inherit
    

    从上面LVM相关信息的输出可以看到,我这里新建的lv已经是正常状态,可以理解成为模拟存储上划分出的一个10g大小的LUN

    4.配置iSCSI服务端

    iSCSI服务端主要配置文件:/etc/tgt/targets.conf

    iSCSI 有一套自己分享 target 檔名的定義,基本上,藉由 iSCSI 分享出來的 target 檔名都是以 iqn 為開頭,意思是:『iSCSI Qualified Name (iSCSI 合格名稱)』的意思(註5)。那麼在 iqn 後面要接啥檔名呢?通常是這樣的:
    iqn.yyyy-mm.:identifier
    iqn.年年-月.單位網域名的反轉寫法 :這個分享的target名稱

    所以我这里按照规范设置的名称,添加好如下配置:

    <target iqn.2017-07.com.cnblogs.jyzhao:alfreddisk>
        backing-store /dev/vg_storage/lv_lun1 # Becomes LUN 1
    </target>
    

    配置完成后,就启动服务和设置开机自启动:

    [root@Storage ~]# service tgtd start
    Starting SCSI target daemon: [  OK  ]
    [root@Storage ~]# chkconfig tgtd on
    [root@Storage ~]# chkconfig --list|grep tgtd
    tgtd            0:off   1:off   2:on    3:on    4:on    5:on    6:off
    [root@Storage ~]# service tgtd status
    tgtd (pid 1763 1760) is running...
    

    然后查询下相关的信息,比如占用的端口、LUN信息(Type:disk):

    [root@Storage ~]# netstat -tlunp |grep tgt
    tcp        0      0 0.0.0.0:3260                0.0.0.0:*                   LISTEN      1760/tgtd           
    tcp        0      0 :::3260                     :::*                        LISTEN      1760/tgtd           
    
    [root@Storage ~]# tgt-admin --show
    Target 1: iqn.2017-07.com.cnblogs.jyzhao:alfreddisk
        System information:
            Driver: iscsi
            State: ready
        I_T nexus information:
        LUN information:
            LUN: 0
                Type: controller
                SCSI ID: IET     00010000
                SCSI SN: beaf10
                Size: 0 MB, Block size: 1
                Online: Yes
                Removable media: No
                Prevent removal: No
                Readonly: No
                Backing store type: null
                Backing store path: None
                Backing store flags: 
            LUN: 1
                Type: disk
                SCSI ID: IET     00010001
                SCSI SN: beaf11
                Size: 10737 MB, Block size: 512
                Online: Yes
                Removable media: No
                Prevent removal: No
                Readonly: No
                Backing store type: rdwr
                Backing store path: /dev/vg_storage/lv_lun1
                Backing store flags: 
        Account information:
        ACL information:
            ALL
    

    5.配置iSCSI客户端

    确认开机启动项设置开启:
    [root@jyrac1 ~]#  chkconfig --list|grep scsi
    iscsi           0:off   1:off   2:off   3:on    4:on    5:on    6:off
    iscsid          0:off   1:off   2:off   3:on    4:on    5:on    6:off
    

    使用iscsiadm命令扫描服务端的LUN

    iscsiadm -m discovery -t sendtargets -p 10.10.1.99

    --报错
    [root@jyrac1 ~]# iscsiadm -m discovery -t sendtargets -p 10.10.1.99
    [  OK  ] iscsid: [  OK  ]
    iscsiadm: cannot make connection to 10.10.1.99: No route to host
    iscsiadm: cannot make connection to 10.10.1.99: No route to host
    iscsiadm: cannot make connection to 10.10.1.99: No route to host
    iscsiadm: cannot make connection to 10.10.1.99: No route to host
    iscsiadm: cannot make connection to 10.10.1.99: No route to host
    iscsiadm: cannot make connection to 10.10.1.99: No route to host
    iscsiadm: connection login retries (reopen_max) 5 exceeded
    iscsiadm: Could not perform SendTargets discovery: encountered connection failure
    [root@jyrac1 ~]# 
    --ping可以通
    [root@jyrac1 ~]# ping 10.10.1.99
    PING 10.10.1.99 (10.10.1.99) 56(84) bytes of data.
    64 bytes from 10.10.1.99: icmp_seq=1 ttl=64 time=0.789 ms
    64 bytes from 10.10.1.99: icmp_seq=2 ttl=64 time=0.536 ms
    ^C
    --- 10.10.1.99 ping statistics ---
    2 packets transmitted, 2 received, 0% packet loss, time 1073ms
    rtt min/avg/max/mdev = 0.536/0.662/0.789/0.129 ms
    

    上面这个报错是因为scsi服务端的主机防火墙没有关闭,端口受到限制,关闭防火墙后,再尝试,就可以正常发现如下内容:

    [root@jyrac1 ~]# iscsiadm -m discovery -t sendtargets -p 10.10.1.99
    10.10.1.99:3260,1 iqn.2017-07.com.cnblogs.jyzhao:alfreddisk
    [root@jyrac1 ~]# iscsiadm -m discovery -t sendtargets -p 10.10.2.99
    10.10.2.99:3260,1 iqn.2017-07.com.cnblogs.jyzhao:alfreddisk
    

    查看/var/lib/iscsi/nodes/下的文件:

    [root@jyrac1 ~]# ll -R /var/lib/iscsi/nodes/
    /var/lib/iscsi/nodes/:
    total 4
    drw------- 4 root root 4096 Jul 18 12:13 iqn.2017-07.com.cnblogs.jyzhao:alfreddisk
    
    /var/lib/iscsi/nodes/iqn.2017-07.com.cnblogs.jyzhao:alfreddisk:
    total 8
    drw------- 2 root root 4096 Jul 18 12:12 10.10.1.99,3260,1
    drw------- 2 root root 4096 Jul 18 12:13 10.10.2.99,3260,1
    
    /var/lib/iscsi/nodes/iqn.2017-07.com.cnblogs.jyzhao:alfreddisk/10.10.1.99,3260,1:
    total 4
    -rw------- 1 root root 1822 Jul 18 12:12 default
    
    /var/lib/iscsi/nodes/iqn.2017-07.com.cnblogs.jyzhao:alfreddisk/10.10.2.99,3260,1:
    total 4
    -rw------- 1 root root 1822 Jul 18 12:13 default
    

    查看iscsiadm -m node

    [root@jyrac1 ~]# iscsiadm -m node
    10.10.2.99:3260,1 iqn.2017-07.com.cnblogs.jyzhao:alfreddisk
    10.10.1.99:3260,1 iqn.2017-07.com.cnblogs.jyzhao:alfreddisk
    

    iscsiadm -m node -T target名称 --login

    iscsiadm -m node -T iqn.2017-07.com.cnblogs.jyzhao:alfreddisk --login

    [root@jyrac1 ~]# iscsiadm -m node -T iqn.2017-07.com.cnblogs.jyzhao:alfreddisk --login
    Logging in to [iface: default, target: iqn.2017-07.com.cnblogs.jyzhao:alfreddisk, portal: 10.10.2.99,3260] (multiple)
    Logging in to [iface: default, target: iqn.2017-07.com.cnblogs.jyzhao:alfreddisk, portal: 10.10.1.99,3260] (multiple)
    Login to [iface: default, target: iqn.2017-07.com.cnblogs.jyzhao:alfreddisk, portal: 10.10.2.99,3260] successful.
    Login to [iface: default, target: iqn.2017-07.com.cnblogs.jyzhao:alfreddisk, portal: 10.10.1.99,3260] successful.
    

    最后查询 fdisk -l结果:

    省略之前无关内容...
    
    Disk /dev/sdi: 10.7 GB, 10737418240 bytes
    64 heads, 32 sectors/track, 10240 cylinders
    Units = cylinders of 2048 * 512 = 1048576 bytes
    Sector size (logical/physical): 512 bytes / 512 bytes
    I/O size (minimum/optimal): 512 bytes / 512 bytes
    Disk identifier: 0x00000000
    
    
    Disk /dev/sdj: 10.7 GB, 10737418240 bytes
    64 heads, 32 sectors/track, 10240 cylinders
    Units = cylinders of 2048 * 512 = 1048576 bytes
    Sector size (logical/physical): 512 bytes / 512 bytes
    I/O size (minimum/optimal): 512 bytes / 512 bytes
    Disk identifier: 0x00000000
    

    发现通过两条链路(10.10.1.*和10.10.2.*),已经正常识别到两个大小为10G的磁盘,而实际上这两个磁盘对应到存储上的一个底层LUN
    这其实就是多路径。后续我会再根据这个环境测试multipath(Linux自带的多路径软件)的使用。
    重启主机测试,这两个磁盘信息依然存在,说明iSCSI的配置没有问题。

    Reference

    - http://linux.vbird.org/linux_server/0460iscsi.php
  • 相关阅读:
    程序启动冲出UAC解决Win UAC问题的编程经验
    代码服务器端Tornado实现聊天室功能(websocket)
    选中菜单android中的显示跳转和隐式跳转
    提交优化Oracle Tuning Log File Sync 等待事件的几种策略
    对象类Effective Java:Ch3_Methods:Item11_谨慎重写clone()
    视频教程视频Java+PHP+.NET海量教程来了 500G教程
    应用性能Intel MIC适合什么样的应用程序
    资源页面dwr的ajax实现
    登录用户Eclipse中SVN访问用户的变更办法
    内存释放[置顶] Cocos2dx 内存管理心得
  • 原文地址:https://www.cnblogs.com/jyzhao/p/7200585.html
Copyright © 2011-2022 走看看