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