淘先锋技术网

首页 1 2 3 4 5 6 7

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

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

iscsi target:就是存储设备端(iscsi 服务端),存放磁盘设备。目的在于提供其他主机使用的磁盘。iscsi服务端需要使用的软件为targetcli。

iscsi initiator:就是能够使用target的客户端,通常是服务器。也就是说,想要连接到iscsi target的服务器,也必须要安装iscsi initiator的相关功能后才能使用iscsi target提供的磁盘。iscsi客户端需要的软件为iscsi-initiator-utils。

说明:服务端和客户端均为rhel7.2的操作系统。搭建此服务需要提前掌握的知识有:安装软件,给磁盘分区。

服务端:

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

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

[root@localhost ~]#dd if=/dev/zero of=/iscsi bs=1M count=500

(2)创建一个新分区(此处创建的分区为/dev/sda5)

(3)准备一个空磁盘(此处空磁盘文件名为/dev/sdb)

2、安装软件

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

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

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

[root@localhost ~]# targetcli

/> ls /

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

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

  | o- block .............................. [Storage Objects: 0]

  | o- fileio ............................. [Storage Objects: 0]

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

  | 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名称(yyyy代表年份,mm代表月份)。

/> 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.412f7ddb650b/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...50b/tpg1/luns> cd /iscsi/iqn.2003-01.org.linux-iscsi.localhost.x8664:sn.412f7ddb650b/tpg1/portals/

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

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

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

在该7.2版本中自动创建了portal,如果需要自定义IP和端口,需要在创建target之前关闭自动创建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 targe

则客户端可直接进行访问:

[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查看会发现多了几块磁盘

iscsi客户端访问iscsi服务端情况二:

若服务端的权限设置如下:

/iscsi/iqn.20...7ddb650b/tpg1> set attribute generate_node_acls=0使用自定义的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.1994-05.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参数,表示当系统联网后再进行挂载操作,以免系统开机时间过长或开机失败。