当我们的系统需要大量的磁盘容量,但是身边却没有足够的存储设备,此时,我们可以使用通过网络的scsi磁盘,即Internet scsi(iscsi)。iscsi主要是通过TCP/IP的技术,将存储设备端通过iscsi target功能,做成可以提供磁盘的服务器端,再通过iscsi initiator(iscsi初始化用户)功能,做成能够挂载使用iscsi target的客户端,这样就能够通过iscsi协议来进行磁盘的应用了。

iscsi架构主要将存储设备与使用的主机分为两个部分,分别是:

  1. iscsi target:就是存储设备端,存放磁盘设备。目的在于提供其他主机使用的磁盘。
  2. iscsi initiator:就是能够使用target的客户端,通常是服务器。也就是说,想要连接到iscsi target的服务器,也必须要安装iscsi initiator的相关功能后才能使用iscsi target提供的磁盘。

iscsi服务端需要使用的软件为:targetcli

iscsi客户端需要的软件为:iscsi-initiator-utils

实验:

服务端:

1、首先准备好iscsi共享的磁盘,iscsi可以通过(1)大型文件(2)单一分区(3)单一设备来进行共享。

(1)建立一个500M大小的文件

dd if=/dev/zero of=/iscsi bs=1M count=500

(2)创建一个新分区:这里是一个sda5分区

(3)准备一个空磁盘:这里添加了一个sdb磁盘

2、安装软件

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

3、配置iscsi服务端共享资源

targetcli是用于管理iscsi服务端存储资源的专用配置命令,它能够提供类似于fdisk命令的交互式配置功能,将iscsi共享资源的配置内容抽象成“目录”的形式,我们只需要将各类配置信息填入到相应的“目录”中即可。

[root@localhost ~]# targetcli

/> ls /

o- / ..................................................... [...]

  o- backstores .......................................... [...]可用于iscsi的服务存储类型有四种

  | o- block .............................. [Storage Objects: 0]块设备,磁盘驱动器,磁盘分区,逻辑卷,以及服务器上定义的任何b类型的设备文件

  | o- fileio ............................. [Storage Objects: 0]在服务器上生成的一个指定大小的文件

  | o- pscsi .............................. [Storage Objects: 0]物理scsi,通常不用

  | o- ramdisk ............................ [Storage Objects: 0]内存盘,其中存储的数据在服务器重启后将全部丢失

  o- iscsi ........................................ [Targets: 0]

  o- loopback ..................................... [Targets: 0]

3.1给三个可共享存储定义逻辑单元编号,如同一般外接式存储设备可以具有多个磁盘一样,target也能够拥有数个磁盘设备。每个在target上的磁盘我们将它定义为逻辑单元编号。

/>  cd /backstores/block

/backstores/block> create dev=/dev/sda5 name=lun0

Created block storage object lun0 using /dev/sda5.

/backstores/block> create dev=/dev/sdb name=lun1

Created block storage object lun1 using /dev/sdb.

/backstores/block> cd /backstores/fileio/

/backstores/fileio> create file_or_dev=/iscsi lun2

/backstores> ls /backstores/

o- backstores ............................................................... [...]

  o- block ................................................... [Storage Objects: 2]

  | o- lun0 ........................... [/dev/sda5 (1.0GiB) write-thru deactivated]

  | o- lun1 ............................ [/dev/sdb (5.0GiB) write-thru deactivated]

  o- fileio .................................................. [Storage Objects: 1]

  | o- lun2 ............................ [/iscsi (500.0MiB) write-back deactivated]

  o- pscsi ................................................... [Storage Objects: 0]

  o- ramdisk ................................................. [Storage Objects: 0]

3.2设置共享的iscsi target名称及配置共享资源

iscsi target名称可由系统自动生成,这是一串用于描述共享资源的唯一字符串。

iscsi有一套自己共享target名称的定义,基本上iscsi共享出来的target文件名都是以iqn开头,意思是“ISCSI Qualified Name(iscsi合格名称)”。iscsi的target名字示例如下:iqn.yyyy-mm.网络名的反转写法:这个共享的target名称。

/> cd /iscsi

/iscsi> create

/iscsi> ls /iscsi/

o- iscsi .......................................... [Targets: 1]

  o- iqn.2003-01.org.linux-iscsi.localhost.x8664:sn.412f7ddb650b  [TPGs: 1]

    o- tpg1 ............................. [no-gen-acls, no-auth]

      o- acls ........................................ [ACLs: 0]

      o- luns ........................................ [LUNs: 0]

      o- portals .................................. [Portals: 1]

        o- 0.0.0.0:3260 ................................... [OK]

/iscsi> cd /iscsi/iqn.2003-01.org.linux-iscsi.localhost.x8664:sn.574bf27f644b/tpg1/luns 

/iscsi/iqn.20...50b/tpg1/luns> create /backstores/block/lun0

/iscsi/iqn.20...50b/tpg1/luns> create /backstores/block/lun1

/iscsi/iqn.20...50b/tpg1/luns> create /backstores/fileio/lun2

/iscsi/iqn.20...50b/tpg1/luns> ls

o- luns .............................................. [LUNs: 3]

  o- lun0 ............................. [block/lun0 (/dev/sda5)]

  o- lun1 .............................. [block/lun1 (/dev/sdb)]

  o- lun2 ............................... [fileio/lun2 (/iscsi)]

3.3设置iscsi服务端的监听ip地址和端口号,位于生产环境中的服务器可能有多块网卡,那么就可以在这儿指定由哪个网卡或IP地址对外提供共享存储资源。

/iscsi/iqn.20...44b/tpg1/luns> cd /iscsi/iqn.2003-01.org.linux-iscsi.localhost.x8664:sn.574bf27f644b/tpg1/portals

/iscsi/iqn.20.../tpg1/portals> ls

o- portals ........................................ [Portals: 1]

  o- 0.0.0.0:3260 ......................................... [OK]

在7.2版本中自动创建了portal,如果需要自定义IP和端口,需要在创建target之前(也就是"/iscsi> create"命令之前)关闭自动创建portal功能(/> set group=global auto_add_default_portal=false)。如果已经创建target,也可以将已经有的portal删除再添加新的。

至此,iscsi服务端的基本配置已完成,如果要让客户端成功访问,需要对防火墙进行一些配置:

(1)关闭防火墙。

(2)如果不关闭防火墙则需要添加监听的端口:

[root@localhost ~]#firewall-cmd --permanent --add-port=3260/tcp

[root@localhost ~]#firewall-cmd --reload

iscsi客户端访问iscsi服务端

情况一:

如果权限设置如下:

/> cd /iscsi/iqn.2003-01.org.linux-iscsi.localhost.x8664:sn.412f7ddb650b/tpg1/

/iscsi/iqn.20...7ddb650b/tpg1> set attribute authentication=0                                  //关闭账号密码验证访问控制

/iscsi/iqn.20...7ddb650b/tpg1> set attribute generate_node_acls=1                        //自动生成acl节点

/iscsi/iqn.20...7ddb650b/tpg1>exit

[root@localhost ~]# systemctl restart target

客户端:

[root@localhost ~]# yum install iscsi-initiator-utils

[root@localhost ~]#systemctl restart iscsi iscsid

iscsiadm是客户端的发现远端设备命令,用法如下:

iscsiadm -m discovery                           //扫描并发现可用的存储资源

-I                                                               //指定使用哪个网络接口,如果只有一块网卡则不用指定

-t sendtargets(缩写为st)                    //设置执行扫描操作的类型

-p                                                             //指定iscsi设备的ip:port,不写端口则为默认的3260

iscsiadm -m node                                  //自己作为节点与server端建立连接

-u                                                             //登出

-l                                                              //登录

-T                                                             //指定target的名字登录或者登出( -l/-u)

iscsiadm -m session                             //查看会话

[root@localhost ~]# iscsiadm -m discovery -t sendtargets -p 服务端IP地址                     //查看共享文件

[root@localhost ~]# iscsiadm -m node -l登录                                                                       //登录同步文件

[root@localhost ~]# lsblk或者lsscsi查看会发现多了几块磁盘                                               //客户端多出了3个磁盘      

情况二:

客户端需要成功给共享磁盘分区需要使用使用自定义acl实现访问控制

/iscsi/iqn.20...7ddb650b/tpg1> set attribute generate_node_acls=0                      //开启acl

使用自定义的acl实现访问控制,则需要设置访问权限控制列表aclacl参数目录用于存放能够访问iscsi服务端共享存储资源的客户端名称。在客户端访问时,只要iscsi客户端的名称与服务端设置的访问控制列表中的名称一致即可。

/> cd /iscsi/iqn.2003-01.org.linux-iscsi.localhost.x8664:sn.412f7ddb650b/tpg1/acls/

/iscsi/iqn.20...50b/tpg1/acls> create iqn.2019-12.com.redhat:client

/iscsi/iqn.20...50b/tpg1/acls>exit

[root@localhost ~]# systemctl restart target

客户端:

[root@localhost ~]# yum install iscsi-initiator-utils -y

[root@localhost ~]#vim /etc/iscsi/initiatorname.iscsi

InitiatorName=iqn.1994-05.com.redhat:client

[root@localhost ~]#systemctl restart iscsi iscsid

[root@localhost ~]# iscsiadm -m discovery -t sendtargets -p 服务端IP地址

[root@localhost ~]# iscsiadm -m node -l登录

[root@localhost ~]# lsblk或者lsscsi                                                //查看会发现多了几块磁盘

将共享过来的磁盘分区格式化之后挂载到本地:

编辑/etc/fstab文件时,注意使用UUID(因为磁盘的文件名不一定是固定的)。由于共享过来的是网络存储设备,而iSCSI协议是基于TCP/IP网络传输数据的,因此必须在/etc/fstab配置文件中添加上_netdev参数,表示当系统联网后再进行挂载操作,以免系统开机时间过长或开机失败。

 

 posted on 2019-12-20 12:25  嚴∞帅  阅读(114)  评论(0编辑  收藏  举报