86201746 2019-06-20
iSCSI(Internet Small Computer System Interface,发音为/аɪskʌzi/),Internet小型计算机系统接口,又称为IP-SAN,是一种基于因特网及SCSI-3协议下的存储技术,由IETF提出,并于2003年2月11日成为正式的标准。与传统的SCSI技术比较起来,iSCSI技术有以下三个革命性的变化:
把原来只用于本机的SCSI协义通过TCP/IP网络发送,使连接距离可作无限的地域延伸;
连接的服务器数量无限(原来的SCSI-3的上限是15);
由于是服务器架构,因此也可以实现在线扩容以至动态部署。
+--------------------+ | +-------------------+ | [ iSCSI Target ] | 192.168.233.101 | 192.168.233.102 |[ iSCSI Initiator ]| | node01 +-----------------+-----------------+ node02 | | 192.168.233.132 | | | +--------------------+ +-------------------+
两台主机node01和node02, 都是Vmware出来的虚拟机,安装CentOS 7
最小系统;
node01准备用来配置iSCSI target
,为了配置多路径,配有两块网卡eth0
和eth1
,ip分别是192.168.233.101
和192.168.233.132
;
node02用来配置iSCSI initiator
,只有一块网卡eth0
,ip为192.168.233.102
;
node01和node02都带有/dev/sdb
和/dev/sdc
两块硬盘,接下来的配置,将会把node01的/dev/sdb
作为iSCSI块设备共享给node02。
关闭selinux
setenforce 0 sed -i '/^SELINUX=.*/ s//SELINUX=disabled/' /etc/selinux/config
关闭防火墙
systemctl stop firewalld.service systemctl disable firewalld.service
安装epel
扩展包
yum install -y epel-release
yum --enablerepo=epel -y install scsi-target-utils
vi /etc/tgt/target.conf
添加如下配置
<target iqn.2016-06.airborne007.com:target00> # 把/dev/sdb作为块设备共享出去 backing-store /dev/sdb # 可选,iSCSI Initiator限制 initiator-address 192.168.233.102 # 可选,认证配置,username和password配置成你自己的信息 incominguser username password </target>
systemctl enable tgtd.service systemctl start tgtd.service
tgtadm --mode target --op show
结果如下:
Target 1: iqn.2016-06.airborne007.com:target00 System information: Driver: iSCSI State: ready I_T nexus information: LUN information: LUN: 0 Type: controller SCSI ID: IET 00010000 SCSI SN: beaf10 Size: 0 MB, Block size: 1 Online: Yes Removable media: No Prevent removal: No Readonly: No SWP: No Thin-provisioning: No Backing store type: null Backing store path: None Backing store flags: LUN: 1 Type: disk SCSI ID: IET 00010001 SCSI SN: beaf11 Size: 32212 MB, Block size: 512 Online: Yes Removable media: No Prevent removal: No Readonly: No SWP: No Thin-provisioning: No Backing store type: rdwr Backing store path: /dev/sdb Backing store flags: Account information: admin ACL information: 192.168.233.102
yum -y install iSCSI-initiator-utils
# vi /etc/iSCSI/initiatorname.iSCSI InitiatorName=iqn.2016-06.airborne007.com:target00
# vi /etc/iSCSI/iSCSId.conf # 以下配置,如果你target没有配置ACL限制,可以直接跳过,使用默认配置即可 # 57行:取消注释 node.session.auth.authmethod = CHAP # 61,62行:取消注释,用户名和密码设置成前面在target里面设置好的 node.session.auth.username = username node.session.auth.password = password
# iSCSIadm -m discovery -t sendtargets -p 192.168.244.101 192.168.233.101:3260,1 iqn.2016-06.airborne007.com:target00
# iSCSIadm -m discovery -t sendtargets -p 192.168.233.132 192.168.233.132:3260,1 iqn.2016-06.airborne007.com:target00
# iSCSIadm -m node -o show # BEGIN RECORD 6.2.0.873-33 node.name = iqn.2016-06.airborne007.com:target00 node.tpgt = 1 node.startup = automatic node.leading_login = No ... node.conn[0].iSCSI.IFMarker = No node.conn[0].iSCSI.OFMarker = No # END RECORD # BEGIN RECORD 6.2.0.873-33 node.name = iqn.2016-06.airborne007.com:target00 node.tpgt = 1 node.startup = automatic node.leading_login = No ... node.conn[0].iSCSI.IFMarker = No node.conn[0].iSCSI.OFMarker = No # END RECORD
# iSCSIadm -m node --login iSCSIadm -m node --login Logging in to [iface: default, target: iqn.2016-06.airborne007.com:target00, portal: 192.168.233.101,3260] (multiple) Logging in to [iface: default, target: iqn.2016-06.airborne007.com:target00, portal: 192.168.233.132,3260] (multiple) Login to [iface: default, target: iqn.2016-06.airborne007.com:target00, portal: 192.168.233.101,3260] successful. Login to [iface: default, target: iqn.2016-06.airborne007.com:target00, portal: 192.168.233.132,3260] successful.
# iSCSIadm -m session -o show tcp: [1] 192.168.233.101:3260,1 iqn.2016-06.airborne007.com:target00 (non-flash) tcp: [2] 192.168.233.132:3260,1 iqn.2016-06.airborne007.com:target00 (non-flash)
# cat /proc/partitions major minor #blocks name 11 0 617472 sr0 8 0 20971520 sda 8 1 512000 sda1 8 2 20458496 sda2 8 16 31457280 sdb 8 32 31457280 sdc 253 0 18317312 dm-0 253 1 2097152 dm-1 8 48 31457280 sdd 8 64 31457280 sde
可以看到,sdd
和sde
就是通过iSCSI挂载得到的磁盘,此时通过fdisk -l
命令,你可以发现这两块磁盘和node01的/dev/sdb
完全一样,为了正常使用这块磁盘,我们还需要配置磁盘多路径。
普通的电脑主机都是一个硬盘挂接到一个总线上,这里是一对一的关系。而到了有光纤组成的SAN环境,或者由iSCSI组成的IPSAN环境,由于主机和存储通过了光纤交换机或者多块网卡及IP来连接,这样的话,就构成了多对多的关系。也就是说,主机到存储可以有多条路径可以选择。主机到存储之间的IO由多条路径可以选择。每个主机到所对应的存储可以经过几条不同的路径,如果是同时使用的话,I/O流量如何分配?其中一条路径坏掉了,如何处理?还有在操作系统的角度来看,每条路径,操作系统会认为是一个实际存在的物理盘,但实际上只是通向同一个物理盘的不同路径而已,这样是在使用的时候,就给用户带来了困惑。多路径软件就是为了解决上面的问题应运而生的。
多路径的主要功能就是和存储设备一起配合实现如下功能:
故障的切换和恢复
IO流量的负载均衡
磁盘的虚拟化
为了主机可以使用 iSCSI 多路径访问存储设备,我们需要在主机上安装多路径设备映射器 (DM-Multipath)。多路径设备映射器可以实现主机节点和后端存储之间的多个 I/O 路径配置为一个单一逻辑设备,从而可以提供链路冗余和提高性能。主机通过访问包含多个 I/O 路径的逻辑设备,就可以有效提高后端存储系统的可靠性。
yum install device-mapper-multipath
systemctl enable multipathd.service
需要multipath正常工作只需要如下配置即可,如果想要了解详细的配置,请参考Multipath
# vi /etc/multipath.conf blacklist { devnode "^sda" } defaults { user_friendly_names yes path_grouping_policy multibus failback immediate no_path_retry fail }
systemctl start multipathd.service
# multipath -ll mpatha (360000000000000000e00000000010001) dm-2 IET ,VIRTUAL-DISK size=30G features='0' hwhandler='0' wp=rw `-+- policy='service-time 0' prio=1 status=active |- 3:0:0:1 sdd 8:48 active ready running `- 4:0:0:1 sde 8:64 active ready running
此时,执行lsblk
命令就可以看到多路径磁盘mpatha
了:
# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 20G 0 disk ├─sda1 8:1 0 500M 0 part /boot └─sda2 8:2 0 19.5G 0 part ├─centos-root 253:0 0 17.5G 0 lvm / └─centos-swap 253:1 0 2G 0 lvm [SWAP] sdb 8:16 0 30G 0 disk sdc 8:32 0 30G 0 disk sdd 8:48 0 30G 0 disk └─mpatha 253:2 0 30G 0 mpath sde 8:64 0 30G 0 disk └─mpatha 253:2 0 30G 0 mpath sr0 11:0 1 603M 0 rom
接下来,就可以对mpatha
做分区、格式化和创建逻辑卷等各种磁盘操作了,此处不表。