一、ISCSI多路径应用

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

如上图,如果SAN服务器与客户端交换机只有一条线路相连,那么如果交换机或者线路出现故障,那么整个通讯中断,

如图二,SAN服务器与我们的客户端有两条以上的线路相连,当然或许是一台交换机,也或许是两台交换机用冗余,那么其中一台交换机或者一条线路中断,我们的整个通讯依然正常,这就是多路径的作用!也就是实用多路径,避免了单点故障带给我们的损失!

通过VMware模拟多路径,使用下面的拓扑:

实验环境:  xuegod63,xuegod64配置双网卡 。

服务端:xuegod63.cn   IP:192.168.1.63 ens32   ; IP:192.168.2.63 ens35 , vmnet4

客户端:xuegod64.cn   IP:192.168.1.64 ens32   ; IP:192.168.2.64 ens35 , vmnet4

 

将xuegod63配置成ip san,将xuegod63上的sdb1分区,通过ip san 共享出去。(查看搭建iscsi存储系统这节内容)

服务器端: target     xuegod63

客户端:   initiator    xuegod64

配置网络环境:

服务端xuegod63 添加一块网卡:

生成ens35配置文件,配置IP ,192.168.2.63

[root@xuegod63 ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens35
TYPE="Ethernet"
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="none"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="yes"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="ens35"
DEVICE="ens35"
NBOOT="yes"
IPADDR="192.168.2.63"
PREFIX="24"
IPV6_PRIVACY="no"
[root@xuegod63 Desktop]# systemctl restart network 或 ifdown ens35;ifup ens35 [root@xuegod63 ~]# ifconfig #查看网络
ens32: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.1.63 netmask 255.255.248.0 broadcast 192.168.7.255
inet6 fe80::5002:d1:8a0:7840 prefixlen 64 scopeid 0x20<link>
ether 00:50:56:30:c6:51 txqueuelen 1000 (Ethernet)
RX packets 7516 bytes 539083 (526.4 KiB)
RX errors 0 dropped 4 overruns 0 frame 0
TX packets 303 bytes 36655 (35.7 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 ens35: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.2.63 netmask 255.255.255.0 broadcast 192.168.2.255
inet6 fe80::6f57:c34c:3709:2e72 prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:89:00:c2 txqueuelen 1000 (Ethernet)
RX packets 9 bytes 779 (779.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 19 bytes 1370 (1.3 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

  

客户端xuegod64 也添加一块网卡

生成ens35配置文件,IP ,192.168.2.64

[root@xuegod64 ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens35
TYPE="Ethernet"
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="none"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="yes"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="ens35"
DEVICE="ens35"
NBOOT="yes"
IPADDR="192.168.2.64"
PREFIX="24"
IPV6_PRIVACY="no"
[root@xuegod64 ~]# systemctl restart network

安装服务端target并配置(请参照搭建iscsi存储系统内容)

[root@xuegod63 ~]# yum -y install targetcli

增加双IP

[root@xuegod63 ~]# targetcli
/> iscsi/iqn.2018-04.cn.xuegod:server/tpg1/portals/ create 192.168.1.63 3260
/> iscsi/iqn.2018-04.cn.xuegod:server/tpg1/portals/ create 192.168.2.63 3260

配置客户端: xuegod64

安装包
[root@xuegod64 ~]# yum install -y iscsi-initiator-utils
启动iscsi服务
[root@xuegod64 ~]# systemctl start iscsi
设置开机启动服务
[root@xuegod64 ~]# systemctl enable iscsi
[root@xuegod64 ~]# systemctl enable iscsid 配置ISCSIInitiator名称 注:此处InitiatorName必须与服务端配置的ACL允许ISCSI客户机连接的名称一致。 [root@xuegod64 ~]# vim /etc/iscsi/initiatorname.iscsi
InitiatorName=iqn.2018-04.cn.server:xugod64 重启服务
[root@xuegod64 ~]# systemctl restart iscsid
发现(查找)ISCSI设备
[root@xuegod64 ~]# iscsiadm -m discovery -t st -p 192.168.2.63
连接ISCSI设备
[root@xuegod64 ~]# iscsiadm -m node --login
查看系统磁盘信息
[root@xuegod64 ~]# ls /dev/sd*
….. /dev/sdb /dev/sdc
格式化挂载(已格式化忽略)
[root@xuegod64 ~]# mkfs.xfs /dev/sdb 测试挂载写数据
[root@xuegod64 ~]# mount /dev/sdb /opt
[root@xuegod64 ~]# echo aabbcc >/opt/a.txt 挂载另一路径设备
root@xuegod64 ~]# mkdir /test
[root@xuegod64 ~]# mount /dev/sdc /test 挂载报错了吧? [root@xuegod64 ~]#blkid /dev/sdc /dev/sdb #对比一下,发现UUID一样的, 相同id不能重复挂载
解决方法:
[root@xuegod64 ~]#mount -t xfs -o nouuid /dev/sdc /test #跳过UUID挂载 [root@xuegod64 ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda2 9.7G 3.7G 5.5G 41% /
tmpfs 569M 0 569M 0% /dev/shm
/dev/sda1 194M 28M 157M 15% /boot
/dev/sr0 3.4G 3.4G 0 100% /mnt
/dev/sdc 5.0G 138M 4.6G 3% /test
/dev/sdb 5.0G 138M 4.6G 3% /opt 在xuegod63服务端查看链接状态
[root@xuegod63 ~]# netstat -antup | grep 3260 查看连接结构:
[root@xuegod64 ~]#yum –y install tree
[root@xuegod64 ~]# tree /var/lib/iscsi/
/var/lib/iscsi/
├── ifaces
├── isns
├── nodes
│ └── iqn.2015-01.cn.xuegod.www:target_san1
│ ├── 192.168.1.63,3260,1
│ │ └── default
│ └── 192.168.2.63,3260,1
│ └── default
├── send_targets
│ ├── 192.168.1.63,3260
│ │ ├── iqn.2015-01.cn.xuegod.www:target_san1,192.168.1.63,3260,1,default -> /var/lib/iscsi/nodes/iqn.2015-01.cn.xuegod.www:target_san1/192.168.1.63,3260,1
│ │ └── st_config
│ └── 192.168.2.63,3260
│ ├── iqn.2015-01.cn.xuegod.www:target_san1,192.168.2.63,3260,1,default -> /var/lib/iscsi/nodes/iqn.2015-01.cn.xuegod.www:target_san1/192.168.2.63,3260,1
│ └── st_config

二、实战: 在存储客户端xuegod64上配置多路径

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

1.DM-Multipath概览:

(1)数据冗余

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

(2)提高性能

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

2. 软件安装

安装多路经软件
[root@xuegod64 ~]# yum install device-mapper-multipath -y 使用默认配置文件启动
[root@xuegod64 ~]# cp /usr/share/doc/device-mapper-multipath-0.4.9/multipath.conf /etc/
[root@xuegod64 ~]# systemctl restart multipathd
[root@xuegod64 ~]# multipath -ll #没有输出消息。 表示出错了。 解决:把正在使用中的sdb和sdbc卸载了
[root@xuegod64 ~]# umount /opt
[root@xuegod64 ~]# umount /test [root@xuegod64 ~]# /etc/init.d/iscsi restart
[root@xuegod64 ~]# systemctl restart multipathd
[root@xuegod64 ~]# multipath –ll

36001405f4ddd118ad384b69b30433220(远程存储设备id)dm-2 LTO-ORG(厂商) ,sun1(产品ID)  size=5.0G features='0' hwhandler='0' wp=rw

|-+- policy='service-time 0' prio=1 status=active   #默认使用active的链路

| `- 34:0:0:1 sdb 8:16 active ready running

`-+- policy='service-time 0' prio=1 status=enabled  #有效的链路,但不是活动链路

`- 35:0:0:1 sdc 8:32 active ready running

#默认配置并不会实现负载均衡,只会实现高可用的效果。

# (36001405f4ddd118ad384b69b30433220)  远程存储设备的产品信息,由于sdb和sdc对应的都是远端同一个存储,所以产品信息是一样的,最后被多路经驱动发现,所以为他们生成了一个设备文件/dev/mapper/mpatha

[root@xuegod64 ~]# ll  /dev/mapper/mpatha*
lrwxrwxrwx 1 root root 7 1月 13 09:02 /dev/mapper/mpatha -> ../dm-2san 

三、实战2:修改配置文件,启动高可用负载均衡模式,并自定义多路经设备文件的名字

[root@xuegod64 ~]# vim /etc/multipath.conf

注销掉下面三行内容

请在此模版下写内容:

在74行以下插入以下内容:3600140510a3f0e98a0c4ec1a9a34f762
multipaths {
multipath {
wwid " 36001405f4ddd118ad384b69b30433220" #填写硬盘产品关键信息
alias webdata #映射后的别名,可以随便取
path_grouping_policy multibus #路径组策略
path_selector "round-robin 0"
failback manual
rr_weight priorities
no_path_retry 5
}
}

重启服务multipathd,测试负载均衡:

[root@xuegod64 ~]# systemctl restart multipathd
[root@xuegod64 ~]# systemctl restart iscsi #需要重新识别一下存储
再次查看:
[root@xuegod64 ~]# multipath -ll
webdata (36001405f4ddd118ad384b69b30433220) dm-2 xuegod ,target1
size=5.0G features='1 queue_if_no_path' hwhandler='0' wp=rw
`-+- policy='round-robin 0' prio=1 status=active
|- 34:0:0:1 sdb 8:16 active ready running
`- 35:0:0:1 sdc 8:32 active ready running
注:之前相当于主备,现在相当于负载均衡 。 测试:
[root@xuegod64 ~]# ls /dev/mapper/webdata*
webdata # webdata对应硬盘中的对应硬盘sdb
[root@xuegod64 ~]# mount /dev/mapper/webdata /opt
[root@xuegod64 ~]# cp /etc/hosts /opt
[root@xuegod64 ~]# ls /opt
lost+found passwd hosts

四、故障模拟

断开一条链路。测试链路高可用,关闭其中一个网卡,多路经驱动需要约1分钟的时间,去识别链路故障

[root@xuegod63 ~]# ifdown ens32

查看链路状态:
[root@xuegod64 ~]# multipath -ll #多路经驱动需要约1分钟的时间,去识别链路故障
|- 12:0:0:1 sdb 8:16 active faulty running # 链接运行不正常 faulty故障
|- 13:0:0:1 sdc 8:32 active ready running #会卡在这个地方,大约一分钟后,检测故障结束
[root@xuegod64 ~]# multipath -ll
|- 12:0:0:1 sdb 8:16 failed faulty running #1分钟后,显示链路连接失败。
|- 13:0:0:1 sdc 8:32 active ready running 测试写入数据:
[root@xuegod64 ~]# cp -r /boot/grub/ /opt/
[root@xuegod64 ~]# ls /mnt/
grub lost+found passwd hosts 注:数据可以正常写入,说明,高可用成功。 打开链路,过一段时间再看:
[root@xuegod63 ~]# ifup ens32
[root@xuegod64 ~]# multipath -ll
|- 8:0:0:1 sdb 8:16 active ready running
|- 9:0:0:1 sdc 8:32 active ready running #链路运行正常

五、实战:在应用服务器上使用udev规则为target创建固定名字的软链接

udev概述: udev 是Linux kernel 2.6系列的设备管理器。它主要的功能是管理/dev目录底下的设备节点。udev会根据用户添加/删除硬件的行为,自处理/dev目录下所有设备文件。

主配置文件:/etc/udev/udev.conf

设备文件名字规则目录:

[root@xuegod64 ~]# ls /lib/udev/rules.d/10-dm.rules

命名规律: 开头为数字, 结尾是 .rules

运行机制和注意事项:

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

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

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

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

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

 

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

详细参数说明

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}: 环境变量。在一条规则中,可以设定最多五条环境变量的 匹配键。
  10. PROGRAM:调用外部命令。
  11. 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. “:=”:对一个键赋值,并拒绝之后所有对该键的改动。目的是防止后面的规则文件对该键赋值。

# KERNEL是匹配键,NAME和MODE是赋值键。

仅当操作符是“==”或者“!=”时,其为匹配键;若为其他操作符时,都是赋值键。

相关文章:http://www.361way.com/udev-disk-order/3954.html

 

实战:在应用服务器xuegod64上使用udev规则为每个target创建固定名字的软链接

对iscsi多路径共享的设备设备,让内核识别成:my_disk

在进行udev绑定的时候,可以是一个未分区的磁盘,也可以是磁盘的一个分区。

查看共享设备磁盘的UUID:

[root@xuegod62 rules.d]# /usr/lib/udev/scsi_id -g -u /dev/sdb
36001405f4ddd118ad384b69b30433220 或执行:/lib/udev/scsi_id --whitelisted --replace-whitespace /dev/sdb [root@xuegod62 rules.d]# vim /etc/udev/rules.d/10-sda.rules #写入以下内容 KERNEL=="sdb",SUBSYSTEM=="block",PROGRAM="/usr/lib/udev/scsi_id -g -u /dev/sdb", RESULT=="36001405f4ddd118ad384b69b30433220", SYMLINK+="my-disk1", MODE="0660"

  

注意不能有空格

参数:

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

# PROGRAM:调用外部命令;

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

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

# MODE:为设备设定权限

通知内核磁盘信息的变化

 [root@xuegod62]# /sbin/partprobe  /dev/sdb 或者 systemctl restart systemd-udev-trigger

# /sbin/partprobe  /dev/sd* 通常使用该命令让新的规则文件立即生效

# udev 的日志一般没有标准输出,所有的udev 相关信息都按照配置文件(udev.conf)的参数设置,由/var/log/messages记录。

 

查看:

[root@xuegod64 rules.d]# ll /dev/my_disk

lrwxrwxrwx 1 root root 4 1月  24 14:19 /dev/my-disk1 -> sdb

[root@xuegod64 rules.d]# mount  /dev/my_disk  /opt/

#如果无法挂载使用,请卸载multipath重启系统后再测试。

iscsi序列二、iscsi多路径配置方式的更多相关文章

  1. SpringBoot学习(二)-->Spring的Java配置方式

    二.Spring的Java配置方式 Java配置是Spring4.x推荐的配置方式,可以完全替代xml配置. 1.@Configuration 和 @Bean Spring的Java配置方式是通过 @ ...

  2. Spring Cloud Gateway实战之二:更多路由配置方式

    欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...

  3. NetCore2.2使用Nlog自定义日志写入路径配置方式

    在一些特定场景的业务需求下,日志需要写入到不同的路径下提供日志分析.第一种:默认Nlog可以通过日志级别来区分路径,——优点是不需要额外配置,开箱即用——缺点是不够灵活,如果超过级别数量,则不满足需求 ...

  4. ISCSI多路径配置(二)

    搭建iscsi存储系统(一) (1).配置ISCSI多路径实现磁盘挂载高可用 如果存储服务器到交换机只有一条线路的时候,那么一条线路出现故障,整个就没法使用了,所以多线路可以解决这个问题,避免单点故障 ...

  5. Linux下搭建iSCSI共享存储的方法 Linux-IO Target 方式CentOS7-1810下实现

    iSCSI(internet SCSI)技术由IBM公司研究开发,是一个供硬件设备使用的.可以在IP协议的上层运行的SCSI指令集,这种指令集合可以实现在IP网络上运行SCSI协议,使其能够在诸如高速 ...

  6. Linux下搭建iSCSI共享存储的方法 Linux-IO Target 方式 Debian9.5下实现

    iSCSI(internet SCSI)技术由IBM公司研究开发,是一个供硬件设备使用的.可以在IP协议的上层运行的SCSI指令集,这种指令集合可以实现在IP网络上运行SCSI协议,使其能够在诸如高速 ...

  7. iscsi序列一、搭建iscsi存储系统

    一.NAS和SAN服务器概述 SAS: 容量小, 300G, 600G, 900G, 价格贵. SATA:容量大,500G, 750G, 1T, 2T, 3T, 4T   不支持热插拔,价格低. 假S ...

  8. iscsi介绍及iscsi target配置

    iSCSI 主要是透过 TCP/IP 的技术,将储存设备端透过 iSCSI target (iSCSI 目标) 功能,做成可以提供磁盘的服务器端,再透过 iSCSI initiator (iSCSI ...

  9. ASP.NET Core 2.2 : 二十二. 多样性的配置方式

    大多数应用都离不开配置,本章将介绍ASP.NET Core中常见的几种配置方式及系统内部实现的机制. 说到配置,第一印象可能就是“.config”类型的xml文件或者“.ini”类型的ini文件,在A ...

随机推荐

  1. scala学习(4)---Array定长数组操作

    ScalaArrayNote: https://www.jianshu.com/p/d906f00c05bf

  2. 学习kafka笔记

    一:概念 Kafka是一个分布式的消息队列,相当于我们生活中的快递柜,快递点,快递员将快递放到快递柜中,收件人去取,把快递(消息)的入柜(入队)和处理进行解耦,使得双方以自己合适的时间和频率处理快递, ...

  3. django国际化的简单设置

    设置国际化的具体步骤: 一.国际化 1)效果:针对不同的国家的人可以配置不同的语言(一般是英文和中文,  English  Chinese) 2)目的:增加项目的用户量 3)难度:不难 比较费劲的就是 ...

  4. (转)为什么收到三个重复的ACK意味着发生拥塞?

    三次重复的ACK,可能是丢包引起的,丢包可能是网络拥塞造成的,也可能是信号失真造成的. 三次重复的ACK,也有可能是乱序引起的,而乱序和网络拥塞没有直接关系. 如果就写这两行,感觉什么都没写,接下来的 ...

  5. python+Appium自动化:H5元素定位

    问题思考 在混合开发的App中,经常会有内嵌的H5页面.那么这些H5页面元素该如何进行定位操作呢? 解决思路 针对这种场景直接使用前面所讲的方法来进行定位是行不通的,因为前面的都是基于Andriod原 ...

  6. 微信小程序审核不通过的解决方法

    前言 近来,微信小程序一直活跃在开发者的眼球中.很多开发者都投身微信小程序的开发中,而这些开发者,总是需要面对最后一道难题:如何以一种优雅的姿势来通过微信官方的审核.本文基于几天前提交审核的一次总结, ...

  7. c语言第一次作业1

    第一次作业 一 你对软件工程或者计算机科学与技术专业的了解是什么? 软件工程是一门研究用工程化方法构建和维护有效的,实用的和高质量的软件的学科,涉及程序语言设计,数据库,软件开发工具,系统平台,设计模 ...

  8. sql server 安装

    第一次安装sql server是2016版本,因为[win7-64版系统配置比较低],所以不成功. 第二次安装2012版,在[数据库引擎配置]的时候,选择的是[添加当前用户],以及后续需要添加用户的时 ...

  9. curl查看http请求消息的时长

    1. -X 指定请求方式GET请求curl -X GET http://www.jackyops.com/search?data=123  # -X GET是可选的 POST请求curl -X POS ...

  10. 【Android-自定义控件】 漂亮的Toast

    修改Toast属性,美化Toast //创建一个Toast Toast toast=new Toast(getApplicationContext()); //创建Toast中的文字 TextView ...