zoukankan      html  css  js  c++  java
  • ISCSI多路径配置(二)

    搭建iscsi存储系统(一)

    (1).配置ISCSI多路径实现磁盘挂载高可用

      如果存储服务器到交换机只有一条线路的时候,那么一条线路出现故障,整个就没法使用了,所以多线路可以解决这个问题,避免单点故障。

     1)实验环境

    youxi1  192.168.5.101,1.1.5.129  服务端

    youxi2  192.168.5.102,1.1.5.130  客户端

     2)搭建target服务器

    [root@youxi1 ~]# yum -y install targetcli
    [root@youxi1 ~]# targetcli  //进入交互配置
    Warning: Could not load preferences file /root/.targetcli/prefs.bin.
    targetcli shell version 2.1.fb46
    Copyright 2011-2013 by Datera, Inc and others.
    For help on commands, type 'help'.
    
    /> /backstores/block create test1 /dev/sdb  //使用/dev/sdb创建自定义存储对象test1
    Created block storage object test1 using /dev/sdb.
    /> /iscsi create iqn.2019-08.com.youxi1:server  //创建ISCSI target
    Created target iqn.2019-08.com.youxi1:server.
    Created TPG 1.
    Global pref auto_add_default_portal=true
    Created default portal listening on all IPs (0.0.0.0), port 3260.
    /> /iscsi/iqn.2019-08.com.youxi1:server/tpg1/acls create iqn.2019-08.com.youxi1:username  //创建ACL规则列表名
    Created Node ACL for iqn.2019-08.com.youxi1:username
    /> /iscsi/iqn.2019-08.com.youxi1:server/tpg1/luns create /backstores/block/test1  //指定存储对象为target的逻辑单元,逻辑单元号为LUN0
    Created LUN 0.
    Created LUN 0->0 mapping in node ACL iqn.2019-08.com.youxi1:username
    /> /iscsi/iqn.2019-08.com.youxi1:server/tpg1/portals/ delete 0.0.0.0 3260  //删除原有监听IP和端口
    Deleted network portal 0.0.0.0:3260
    /> /iscsi/iqn.2019-08.com.youxi1:server/tpg1/portals/ create 192.168.5.101 3260  //重新指定监听IP和端口
    Using default IP port 3260
    Created network portal 192.168.5.101:3260.
    /> /iscsi/iqn.2019-08.com.youxi1:server/tpg1/portals/ create 1.1.5.129 3260     
    Using default IP port 3260
    Created network portal 1.1.5.129:3260.
    /> saveconfig  //保存
    Configuration saved to /etc/target/saveconfig.json
    /> exit  //退出
    Global pref auto_save_on_exit=true
    Last 10 configs saved in /etc/target/backup/.
    Configuration saved to /etc/target/saveconfig.json
    [root@youxi1 ~]# systemctl start target && systemctl enable target  //启动并开机自启
    Created symlink from /etc/systemd/system/multi-user.target.wants/target.service to /usr/lib/systemd/system/target.service.
    [root@youxi1 ~]# yum -y install net-tools
    [root@youxi1 ~]# ss -antup | grep 3260
    tcp    LISTEN     0      256    192.168.5.101:3260                  *:*                  
    tcp    LISTEN     0      256    1.1.5.129:3260                  *:*  
    [root@youxi1 ~]# firewall-cmd --permanent --zone=public --add-port=3260/tcp  //防火墙添加端口号
    success
    [root@youxi1 ~]# firewall-cmd --reload
    success

     3)搭建客户端youxi2

    [root@youxi2 ~]# yum -y install iscsi-initiator-utils  //安装客户端
    [root@youxi2 ~]# vim /etc/iscsi/initiatorname.iscsi  //配置ACL规则列表名称
    InitiatorName=iqn.2019-08.com.youxi1:username
    [root@youxi2 ~]# systemctl start iscsid && systemctl enable iscsid  //启动并设置开机自启
    Created symlink from /etc/systemd/system/multi-user.target.wants/iscsid.service to /usr/lib/systemd/system/iscsid.service.
    [root@youxi2 ~]# iscsiadm -m discovery -t st -p 192.168.5.101  //查找ISCSI设备
    1.1.5.129:3260,1 iqn.2019-08.com.youxi1:server
    192.168.5.101:3260,1 iqn.2019-08.com.youxi1:server
    [root@youxi2 ~]# iscsiadm -m node --login  //登录/连接ISCSI设备
    Logging in to [iface: default, target: iqn.2019-08.com.youxi1:server, portal: 1.1.5.129,3260] (multiple)
    Logging in to [iface: default, target: iqn.2019-08.com.youxi1:server, portal: 192.168.5.101,3260] (multiple)
    Login to [iface: default, target: iqn.2019-08.com.youxi1:server, portal: 1.1.5.129,3260] successful.
    Login to [iface: default, target: iqn.2019-08.com.youxi1:server, portal: 192.168.5.101,3260] successful.
    [root@youxi2 ~]# ls /dev/sd*  //可以看到出现了sdb和sdc,这两个是同一个硬盘
    /dev/sda /dev/sda1 /dev/sda2 /dev/sdb /dev/sdc
    [root@youxi2 ~]# mkfs.xfs /dev/sdb -f  //格式化,只有第一次才需要,如果者服务器端或其他客户端已经格式化,无需操作
    meta-data=/dev/sdb               isize=512    agcount=4, agsize=1310720 blks
             =                       sectsz=512   attr=2, projid32bit=1
             =                       crc=1        finobt=0, sparse=0
    data     =                       bsize=4096   blocks=5242880, imaxpct=25
             =                       sunit=0      swidth=0 blks
    naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
    log      =internal log           bsize=4096   blocks=2560, version=2
             =                       sectsz=512   sunit=0 blks, lazy-count=1
    realtime =none                   extsz=4096   blocks=0, rtextents=0
    [root@youxi2 ~]# mkdir /share  //创建挂载目录
    [root@youxi2 ~]# mount /dev/sdb /share/  //挂载
    [root@youxi2 ~]# echo aabbcc > /share/a.txt
    [root@youxi2 ~]# mkdir /share2
    [root@youxi2 ~]# mount /dev/sdc /share2  //这是由于sdb和sdc是同一块盘,它们的UUID是相同的,不能重复挂载
    mount: 文件系统类型错误、选项错误、/dev/sdc 上有坏超级块、
           缺少代码页或助手程序,或其他错误
    
           有些情况下在 syslog 中可以找到一些有用信息- 请尝试
           dmesg | tail  这样的命令看看。
    [root@youxi2 ~]# blkid /dev/sdb /dev/sdc  //查看UUID
    /dev/sdb: UUID="580a45fc-0957-45ee-bcbd-13ce85e11e59" TYPE="xfs" 
    /dev/sdc: UUID="580a45fc-0957-45ee-bcbd-13ce85e11e59" TYPE="xfs"
    
    [root@youxi2 ~]# mount -t xfs -o nouuid /dev/sdc /share2  //跳过UUID进行挂载
    [root@youxi2 ~]# df -h
    文件系统              容量  已用  可用 已用% 挂载点
    /dev/mapper/vg1-root   17G  1.2G   16G    8% /
    devtmpfs              476M     0  476M    0% /dev
    tmpfs                 488M     0  488M    0% /dev/shm
    tmpfs                 488M  7.7M  480M    2% /run
    tmpfs                 488M     0  488M    0% /sys/fs/cgroup
    /dev/sda1            1014M  130M  885M   13% /boot
    tmpfs                  98M     0   98M    0% /run/user/0
    /dev/sdb               20G   33M   20G    1% /share
    /dev/sdc               20G   33M   20G    1% /share2
    

     4)查看连接结构

    [root@youxi2 ~]# yum -y install tree
    [root@youxi2 ~]# tree /var/lib/iscsi/
    /var/lib/iscsi/
    ├── ifaces
    ├── isns
    ├── nodes
    │   └── iqn.2019-08.com.youxi1:server
    │       ├── 1.1.5.129,3260,1
    │       │   └── default
    │       └── 192.168.5.101,3260,1
    │           └── default
    ├── send_targets
    │   └── 192.168.5.101,3260
    │       ├── iqn.2019-08.com.youxi1:server,1.1.5.129,3260,1,default -> /var/lib/iscsi/nodes/iqn.2019-08.com.youxi1:server/1.1.5.129,3260,1
    │       ├── iqn.2019-08.com.youxi1:server,192.168.5.101,3260,1,default -> /var/lib/iscsi/nodes/iqn.2019-08.com.youxi1:server/192.168.5.101,3260,1
    │       └── st_config
    ├── slp
    └── static
    
    12 directories, 3 files

     5)回到服务器端查看连接状态

    [root@youxi1 ~]# ss -antup | grep 3260                                     
    tcp    LISTEN     0      256    192.168.5.101:3260                  *:*                  
    tcp    LISTEN     0      256    1.1.5.129:3260                  *:*                  
    tcp    ESTAB      0      0      1.1.5.129:3260               1.1.5.130:55902              
    tcp    ESTAB      0      0      192.168.5.101:3260               192.168.5.102:40218

    (2).在存储客户端上配置多路径设备

      在以上基础下继续实验,将同一设备的多路径整合,只呈现出一个设备形式,通过使用。

     1)多路径软件Device Mapper Multipath

      多路径软件Device Mapper Multipath(DM-Multipath)可以将服务器节点和存储阵列之间的多条I/O链路配置为一个单独的设备。这些I/O链路是由不同的线缆、交换机、控制器组成的SAN物理链路。Multipath将这些链路聚合在一起,生成一个单独的新的设备。

      特点:

        数据冗余。DM-Multipath可以实现在active/passive(主动/被动)模式下的灾难转移。在active/passive模式下,只有一半的链路在工作,如果链路上的某一部分(线缆、交换机、控制器)出现故障,DM-Multipath就会切换到另一半链路上。

        提高性能。DM-Multipath也可以配置为active/active模式,从而I/O任务以round-robin的方式分布到所有的链路上去。通过配置,DM-Multipath还可以检测链路上的负载情况,动态地进行负载均衡。

     2)客户端安装多路径软件服务

    [root@youxi2 ~]# yum -y install device-mapper-multipath
    [root@youxi2 ~]# cp /usr/share/doc/device-mapper-multipath-0.4.9/multipath.conf /etc/
    [root@youxi2 ~]# systemctl start multipathd.service  //注意,一定要把配置文件拷贝到/etc/目录下,否则会报找不到配置文件
    [root@youxi2 ~]# multipath -ll  //没有输出信息表示出错
    [root@youxi2 ~]# umount /share  //卸载挂载点
    [root@youxi2 ~]# umount /share2
    [root@youxi2 ~]# systemctl restart iscsid  //重启iscsid服务
    [root@youxi2 ~]# systemctl restart multipathd.service  //重启multipathd服务
    [root@youxi2 ~]# multipath -ll  //再次查看
    //36001405179b62d3082e4604ae5326cd6远程存储设备id,dm-2 LIO-ORG厂商,test1产品ID(我们自己设置的)
    mpatha (36001405179b62d3082e4604ae5326cd6) dm-2 LIO-ORG ,test1           
    size=20G features='0' hwhandler='0' wp=rw
    |-+- policy='service-time 0' prio=1 status=active  //默认使用主动模式的链路
    | `- 33:0:0:0 sdb 8:16 active ready running
    `-+- policy='service-time 0' prio=1 status=enabled  //有效的链路,但不是活动链路
      `- 34:0:0:0 sdc 8:32 active ready running
    [root@youxi2 ~]# ll /dev/mapper/mpatha  //查看生成的设备文件
    lrwxrwxrwx 1 root root 7 8月 23 13:55 /dev/mapper/mpatha -> ../dm-2
    

      每个多路径设备都具备一个全局标识(WWID,World Wide Identifir)。36001405179b62d3082e4604ae5326cd6就是WWID,远程存储设备的产品信息。由于sdb和sdc是同一个远端存储设备,所以产品信息一致,被多路径驱动发现后会生成一个设备文件/dev/mapper/mpatha。

     3)启动高可用负载均衡模式

    [root@youxi2 ~]# vim /etc/multipath.conf
    //可以再第74行下面添加,也可以从第60行开始启用
    multipaths {
            multipath {
                    wwid                    36001405179b62d3082e4604ae5326cd6  //指定实际的WWID
                    alias                   Web  //映射后的别名,自定义
                    path_grouping_policy    multibus  //路径组策略
                    path_selector           "round-robin 0"  //轮询
                    failback                manual
                    rr_weight               priorities
                    no_path_retry           5
            }       
    }
    [root@youxi2 ~]# systemctl restart multipathd.service  //重启multipathd服务
    [root@youxi2 ~]# systemctl restart iscsid  //重启iscsi,重新识别
    [root@youxi2 ~]# multipath -ll  //再次查看
    Web (36001405179b62d3082e4604ae5326cd6) dm-2 LIO-ORG ,test1           
    size=20G features='1 queue_if_no_path' hwhandler='0' wp=rw
    `-+- policy='round-robin 0' prio=1 status=active  //可以看到采用轮询,并且两个都是running
      |- 33:0:0:0 sdb 8:16 active ready running
      `- 34:0:0:0 sdc 8:32 active ready running
    [root@youxi2 ~]# ll /dev/mapper/Web  //可以看到自定义的映射别名
    lrwxrwxrwx 1 root root 7 8月  23 15:35 /dev/mapper/Web -> ../dm-2
    [root@youxi2 ~]# mount /dev/mapper/Web /share  //挂载可用
    [root@youxi2 ~]# ls /share
    a.txt
    

     4)模拟故障

      关闭服务器端的ens33(192.168.5.101)网卡

    [root@youxi1 ~]# ifdown ens33
    

      过一段时间查看,并进行测试

    [root@youxi2 ~]# multipath -ll
    Web (36001405179b62d3082e4604ae5326cd6) dm-2 LIO-ORG ,test1           
    size=20G features='1 queue_if_no_path' hwhandler='0' wp=rw
    `-+- policy='round-robin 0' prio=1 status=active
      |- 33:0:0:0 sdb 8:16 active ready running
      `- 34:0:0:0 sdc 8:32 failed faulty running  //可以看到sdcfailed
    [root@youxi2 ~]# echo bbb > /share/b.txt
    [root@youxi2 ~]# ls /share
    a.txt b.txt
    

      打开服务器端的ens33(192.168.5.101)网卡,可以发现sdc又恢复了正常

    [root@youxi2 ~]# multipath -ll
    Web (36001405179b62d3082e4604ae5326cd6) dm-2 LIO-ORG ,test1           
    size=20G features='1 queue_if_no_path' hwhandler='0' wp=rw
    `-+- policy='round-robin 0' prio=1 status=active
      |- 33:0:0:0 sdb 8:16 active ready running
      `- 34:0:0:0 sdc 8:32 active ready running
    

    (3).使用udev规则为每个target创建固定名字的软链接(了解)

     1)udev

      udev是Linux kernel 2.6系列的设备管理器。它主要的功能是管理/dev目录底下的设备节点。udev会根据用户添加/删除硬件的行为,自处理/dev目录下所有设备文件。主要配置文件为/etc/udev/udev.conf。设备文件名字规则目录/lib/udev/rules.d/。

    [root@youxi2 ~]# ls /lib/udev/rules.d/  //命名规则开头数字,结尾.rules
    10-dm.rules                       70-touchpad.rules
    11-dm-lvm.rules                   70-uaccess.rules
    11-dm-mpath.rules                 71-biosdevname.rules
    13-dm-disk.rules                  71-seat.rules
    40-redhat.rules                   73-idrac.rules
    ......
    

      运行机制和注意事项:

        1、udev按照规则文件名的数字顺序来查询全部规则文件,然后为匹配规则的设备,创建其设备文件或文件链接。

        2、通常情况下,建议让自己想要的规则文件最先被解析。比如,创建一个名为 /etc/udev/rules.d/10-myrule.rules的文件,并把你的规则写入该文件,这样udev就会在解析系统默认的规则文件之前解析到你的文件。

        3、在规则文件里,除了以“#”开头的行(注释),所有的非空行都被视为一条规则,但是一条规则不能扩展到多行。

        4、规则都是由多个键值对(key-valuepairs)组成,并由逗号隔开键值对可以分为条件匹配键值对(以下简称“匹配键”)和赋值键值对(以下简称“赋值键”),一条规则可以有多条匹配键和多条赋值键。

        5、匹配键是匹配一个设备属性的条件,当一个设备的属性匹配了该规则里所有的匹配键,就认为这条规则生效,然后按照赋值键的内容,执行该规则的赋值。

    udev规则的匹配键:

      1. ACTION: 事件 (uevent) 的行为,例如:add( 添加设备 )、remove( 删除设备 )。

      2. KERNEL: 内核设备名称,例如:sda, cdrom。

      3. DEVPATH:设备的devpath 路径。

      4. SUBSYSTEM: 设备的子系统名称,例如:sda 的子系统为 block。

      5. BUS: 设备在 devpath 里的总线名称,例如:usb。

      6. DRIVER: 设备在 devpath 里的设备驱动名称,例如:ide-cdrom。

      7. ID: 设备在 devpath 里的识别号。

      8. SYSFS{filename}: 设备的 devpath 路径下,设备的属性文件“filename”里的内容。

      9. ENV{key}: 环境变量。在一条规则中,可以设定最多五条环境变量的 匹配键。

        1.PROGRAM:调用外部命令。

        2.RESULT: 外部命令 PROGRAM 的返回结果。

    udev重要的赋值键:

      1. NAME:在 /dev下产生的设备文件名。只有第一次对某个设备的 NAME 的赋值行为生效,之后匹配的规则再对该设备的 NAME 赋值行为将被忽略。如果没有任何规则对设备的 NAME 赋值,udev 将使用内核设备名称来产生设备文件。

      2. SYMLINK:为 /dev/下的设备文件产生符号链接。由于 udev 只能为某个设备产生一个设备文件,所以为了不覆盖系统默认的 udev 规则所产生的文件,推荐使用符号链接。

      3. OWNER, GROUP, MODE:为设备设定权限。

      4. ENV{key}:导入一个环境变量

    udev规则操作符:

      1. “==”:比较键、值,若等于,则该条件满足;

      2. “!=”: 比较键、值,若不等于,则该条件满足;

      3. “=”: 对一个键赋值;

      4. “+=”:为一个表示多个条目的键赋值。

      5.“:=”:对一个键赋值,并拒绝之后所有对该键的改动。目的是防止后面的规则文件对该键赋值。

      说明:如果有一个设备被内核实别为sdb1,则该条件生效,执行后面的赋值:在/dev下产生一个名为my_ disk的设备文件,并把设备文件的权限设为0666。

     2)在客户端上定义udev规则

      查看共享磁盘的UUID

    [root@youxi2 ~]# /usr/lib/udev/scsi_id -g -u /dev/sdb
    36001405179b62d3082e4604ae5326cd6
    

      添加一个新的udev规则

    [root@youxi2 ~]# vim /etc/udev/rules.d/10-sda.rules  //底下规则不能转行,这里转行是为了方便查看
    KERNEL=="sdb",SUBSYSTEM=="block",PROGRAM="/usr/lib/udev/scsi_id -g -u /dev/sdb",
    RESULT=="36001405179b62d3082e4604ae5326cd6",SYMLINK+="my-disk",MODE="0660"

      说明:

        KERNEL:匹配内核设备名称;

        SUBSYSTEM:匹配设备的子系统名称,例如:sda 的子系统为block。udevadm info -a -p  /sys/block;

        PROGRAM:调用外部命令;

        RESULT: 匹配外部命令PROGRAM的返回结果;

        SYMLINK:为/dev/下的设备文件产生符号链接。由于udev 只能为某个设备产生一个设备文件,所以为了不覆盖系统默认的udev 规则所产生的文件,推荐使用符号链接。

        MODE:设置设备的权限

      告知内核,磁盘信息发生了变化,既可以查看

    [root@youxi2 ~]# /sbin/partprobe /dev/sdb  //命令二选一即可
    [root@youxi2 ~]# systemctl restart systemd-udev-trigger
    [root@youxi2 ~]# ll /dev/my-disk  //查看my-disk
    lrwxrwxrwx 1 root root 3 8月 23 17:04 /dev/my-disk -> sdb
    

      使用方法

    [root@youxi2 ~]# umount /share
    [root@youxi2 ~]# mount /dev/my-disk /share  //这是因为多路径软件正在使用
    mount: /dev/sdb 已经挂载或 /share 忙
    [root@youxi2 ~]# systemctl stop multipathd && systemctl disable multipathd
    Removed symlink /etc/systemd/system/sysinit.target.wants/multipathd.service.
    [root@youxi2 ~]# init 6  //重启
    [root@youxi2 ~]# iscsiadm -m discovery -t st -p 192.168.5.101  //重新发现iscsi设备
    1.1.5.129:3260,1 iqn.2019-08.com.youxi1:server
    192.168.5.101:3260,1 iqn.2019-08.com.youxi1:server
    [root@youxi2 ~]# iscsiadm -m node --login  //重新登录iscsi设备
    Logging in to [iface: default, target: iqn.2019-08.com.youxi1:server, portal: 1.1.5.129,3260] (multiple)
    Logging in to [iface: default, target: iqn.2019-08.com.youxi1:server, portal: 192.168.5.101,3260] (multiple)
    Login to [iface: default, target: iqn.2019-08.com.youxi1:server, portal: 1.1.5.129,3260] successful.
    Login to [iface: default, target: iqn.2019-08.com.youxi1:server, portal: 192.168.5.101,3260] successful.
    [root@youxi2 ~]# mount /dev/my-disk /share
    [root@youxi2 ~]# ls /share
    a.txt b.txt
    

      说明:multipathd本身就可以给存储设备起一个名字了,有了multipathd就不需要udev来起名字了。所以两者是冲突的,只能同时使用一种方法给存储设备命名。所以一般情况,我们直接使用iscsi存储+多路径就可以了。

  • 相关阅读:
    最优二叉树(简易版本)
    平衡二叉树(AVL树)基础操作
    二叉树的基础操作
    双向链表(C语言)
    循环链表(C语言)
    单向链表(C语言)
    jQuery
    js事件
    JDBC-扩展
    JDBC
  • 原文地址:https://www.cnblogs.com/diantong/p/11389003.html
Copyright © 2011-2022 走看看