前言
传统存储分类:
1,DAS技术(直连存储)
将存储设备通过scsi接口或光线通道直接连接到计算机上
不能实现数据与其他主机的共享
占用服务器操作系统资源,如cpu,io等
数据量越大,性能越差

2,NAS技术(文件系统存储)
Network-Attached Storage
常见应用:samba,nfs
网络存储,提供文件系统的共享
提示:磁盘(块设备)->分区(块设备)->格式化(xfs,ext4,ntfs)(文件系统)
一种专用的数据存储服务器,以数据为中心,将存储设备与服务器彻底分离,集中管理数据,从而释放带宽,提高性能,降低总成本,保护投资
用户通过tcp/ip协议访问数据--采用标准的nfs/http/cifs等

3,SAN技术(块存储)
Storage Area Network
常见应用:iscsi
网络存储,块存储ethernet(以太网,双绞线连接),fc(光线)
通过光线交换机,光线路由器,光线集线器等设备将磁盘阵列,磁带等存储设备与相关服务器连接起来,形成高速专用网络

一 实验环境
proxy:
ip:192.168.2.5 192.168.4.5

web1:
ip:192.168.2.10 192.168.4.10

二 单路径ISCSI搭建
服务端:
1,安装软件
[root@proxy ~]# yum -y install targetcli
[root@proxy ~]# yum info targetcli

2,非交互分区
[root@proxy rules.d]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sr0 11:0 1 1024M 0 rom
vda 252:0 0 20G 0 disk
├─vda1 252:1 0 1G 0 part /boot
└─vda2 252:2 0 19G 0 part
├─rhel-root 253:0 0 17G 0 lvm /
└─rhel-swap 253:1 0 2G 0 lvm [SWAP]
vdb 252:16 0 20G 0 disk
[root@proxy ~]# parted /dev/vdb mklabel gpt
[root@proxy ~]# parted /dev/vdb mkpart primary 1 100%

3,使用targetcli定义后端存储
[root@proxy ~]# targetcli
/> ls                   #查看配置信息
/> backstores/block create store /dev/vdb1 #使用targetcli定义后端存储
备注:store为任意名称
/> /iscsi create iqn.2018-01.cn.tedu:server1  #创建iqn对象
/>iscsi/iqn.2018-01.cn.tedu:server1/tpg1/luns create /backstores/block/store
#绑定存储,#注意:block后面的store必须与前面步骤2定义后端存储create创建的名称一致。
/> iscsi/iqn.2018-01.cn.tedu:server1/tpg1/acls create iqn.2018-01.cn.tedu:client1      #授权客户机访问
/> iscsi/iqn.2018-01.cn.tedu:server1/tpg1/portals/ create 0.0.0.0 #默认本机任意ip
/> saveconfig
/> exit      #存储绑定服务监听的地址,并保存配置
[root@proxy ~]# systemctl start target #开启iscsi
[root@proxy ~]# systemctl enable target     #设置开机自启
[root@proxy ~]# ss -utlnp | grep :3260      #查看是否启动成功
[root@proxy ~]# systemctl stop firewalld      #关闭防火墙
[root@proxy ~]# setenforce 0           #设置selinux为宽松模式

客户端:
1,客户端安装软件
[root@web1 ~]# yum -y install iscsi-initiator-utils

2,设置本机的iqn名称
[root@web1 ~]# vim /etc/iscsi/initiatorname.iscsi
InitiatorName=iqn.2018-01.cn.tedu:client
注意:必须跟服务器上配置的ACL一致!
[root@web1 ~]# systemctl restart iscsid iscsid是守护进程
[root@web1 ~]# systemctl enable iscsid
3,发现远程target存储
提示:参考man iscsiadm! /example搜索
[root@web1 ~]# iscsiadm --mode discoverydb --type sendtargets --portal 192.168.2.5 --discover #发现磁盘
[root@web1 ~]# iscsiadm --mode node --targetname iqn.2018-01.cn.tedu:server1 --portal 192.168.2.5:3260 --login  #连接磁盘,可不操作(重启iscsi即可)

4,客户端挂载iSCSI共享
[root@web1 ~]# systemctl restart iscsi #iscsi用于自动login远程存储
[root@web1 ~]# systemctl enable iscsi
[root@web1 ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 20G 0 disk            #此处是发先的网络共享磁盘
sr0 11:0 1 1024M 0 rom
vda 252:0 0 20G 0 disk
├─vda1 252:1 0 1G 0 part /boot
└─vda2 252:2 0 19G 0 part
├─rhel-root 253:0 0 17G 0 lvm /
└─rhel-swap 253:1 0 2G 0 lvm [SWAP]
vda 252:0 0 20G 0 disk

5,分区、格式化、挂载
[root@web1 ~]# parted /dev/sda mklabel gpt        #设置分区为gpt模式
[root@web1 ~]# parted /dev/sda mkpart primary 1 10G    #分10G
[root@web1 ~]# mkfs.xfs /dev/sda1             #格式化分区为xfs格式
[root@web1 ~]# mount /dev/sda1 /mnt           #挂载使用
[root@web1 ~]# umount /mnt               #卸载

注意:不上传,不写入数据,不能多台主机同时挂载同一个iscsi服务
   要是只是(仅仅)共享数据,可以多台主机同时挂载同一个iscsi服务

三 部署Multipath多路径环境
通过Multipath,实现以下目标:
  在共享存储服务器上配置iSCSI,为应用服务器共享存储空间
  应用服务器上配置iSCSI,发现远程共享存储
  应用服务器上配置Multipath,将相同的共享存储映射为同一个名称

服务器:
服务端与步骤二搭建的一样

客户端:
1,前面的步骤,步骤二已经完成了,这里只需要发现存储服务器的共享磁盘
因为有两条链路都可以连接到共享存储,所以需要在两条链路上都发现它。
注意:两次发现使用的IP地址不同!
[root@web1 ~]# iscsiadm --mode discoverydb --type sendtargets --portal 192.168.2.5 --discover
192.168.4.5:3260,1 iqn.2018-01.cn.tedu:client1   #前面用的是192.168.2.5,此处用的是192.168.4.5

2,登陆共享存储
[root@web1 ~]# systemctl restart iscsi
[root@web1 ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 20G 0 disk
├─sda1 8:1 0 20G 0 part
sdb 8:0 0 20G 0 disk
├─sdb1 8:1 0 20G 0 part
vda 252:0 0 20G 0 disk
├─vda1 252:1 0 1G 0 part /boot
提示:登陆的是同一个服务器的同一个iSCSI,但客户端看到的是两个独立的设备,sda和sdb。其实,这两个设备是同一个设备。

3,配置Multipath多路径
1)安装多路径软件包
[root@web1 ~]# yum list | grep multipath     #列出相关软件包,非必须操作
device-mapper-multipath.x86_64 0.4.9-111.el7 Server
device-mapper-multipath-libs.i686 0.4.9-111.el7 Server
device-mapper-multipath-libs.x86_64 0.4.9-111.el7 Server
[root@web1 ~]# yum install -y device-mapper-multipath  #安装软件包

2)生成配置文件
[root@web1 ~]# cd /usr/share/doc/device-mapper-multipath-0.4.9/
[root@web1 ~]# ls multipath.conf
[root@web1 ~]# cp multipath.conf /etc/multipath.conf     #拷贝配置文件到/etc目录下才生效

3)获取×××id
登陆共享存储后,系统多了两块硬盘,这两块硬盘实际上是同一个存储设备。应用服务器使用哪个都可以,但是如果使用sdb时,sdb对应的链路出现故障,它不会自动切换到sda。
为了能够实现系统自动选择使用哪条链路,需要将这两块磁盘绑定为一个名称。
通过磁盘的×××id来判定哪些磁盘是相同的。
[root@web1 ~]# /usr/lib/udev/scsi_id --whitelisted --device=/dev/sdb        #磁盘路径看情况来写
36001405e80f94c806f94df18360c4454                     #记住这个id

4)修改配置文件
[root@web1 ~]# vim /etc/multipath.conf
defaults {
user_friendly_names yes
find_multipaths yes
}
然后在文件的最后加入多路径声明,如果哪个存储设备的×××id和第(3)步获取的×××id一样,那么,为其取一个别名,叫mpatha。
multipaths {
multipath {
×××id "360014059e8ba68638854e9093f3ba3a0"     #打开相应注释,写入id
alias mpatha                      #写入别名
}
}

4)启用Multipath多路径
[root@web1 ~]# systemctl start multipathd
[root@web1 ~]# systemctl enable multipathd

5)检查多路径设备文件
如果多路长设置成功,那么将在/dev/mapper下面生成名为mpatha的设备文件:
[root@web1 ~]# ls /dev/mapper/
control mpatha mpatha1
[root@web1 ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 20G 0 disk
└─mpatha 253:2 0 20G 0 mpath
└─mpatha1 253:3 0 9.3G 0 part  #由于在前面我分区10G并格式化文件系统了,所以出现mpatha1
sdb 8:16 0 20G 0 disk
└─mpatha 253:2 0 20G 0 mpath
└─mpatha1 253:3 0 9.3G 0 part #由于在前面我分区10G并格式化文件系统了,所以出现mpatha1
sr0 11:0 1 1024M 0 rom
vda 252:0 0 20G 0 disk
├─vda1 252:1 0 1G 0 part /boot
└─vda2 252:2 0 19G 0 part
├─rhel-root 253:0 0 17G 0 lvm /
└─rhel-swap 253:1 0 2G 0 lvm [SWAP]

4,验证多路径
1)查看多路径,sda和sdb都是running状态
[root@web1 ~]# multipath -rr
reload: mpatha (360014059e8ba68638854e9093f3ba3a0) undef LIO-ORG ,store
size=9.3G features='0' hwhandler='0' wp=undef
|-+- policy='service-time 0' prio=1 status=undef
| - 2:0:0:0 sda 8:0 active ready running<br/>|-+- policy='service-time 0' prio=1 status=undef
| `- 3:0:0:0 sdb 8:16 active ready running

2)关闭某个链路后,再次查看效果,此时会发现sdb为运行失败状态
[root@web1 ~]# nmcli connection down eth1
[root@web1 ~]# multipath -rr
reject: mpatha (360014059e8ba68638854e9093f3ba3a0) undef LIO-ORG ,store
size=9.3G features='0' hwhandler='0' wp=undef
|-+- policy='service-time 0' prio=0 status=undef
| `- 2:0:0:0 sda 8:0 active undef running

四 注意事项

提示:首先保证sda,sdb没有进行任何挂载,否则多路经multipath操作最后将挂载不上