ISCSI多路径配置(二)

江枫思渺然 提交于 2019-11-28 08:23:51

搭建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存储+多路径就可以了。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!