Linux下ISCSI服务器搭建与客户端使用

简介

iSCSI技术在工作形式上分为服务端(target)与客户端(initiator)。
iSCSI服务端即用于存放硬盘存储资源的服务器,作为底层存储(比如ceph,本地磁盘阵列)的客户端将服务器的存储资源提供给远端的iSCSI客户端使用。
iSCSI客户端则是用户使用的软件,用于访问远程服务端的存储资源。

  1. iscsi server被成为target server,模拟scsi设备,后端存储设备可以使用文件/LVM/磁盘/RAID等不同类型的设备;
  2. iscsi client被成为initiator客户端:发起I/O请求的设备,需要提供iscsi服务,比如PC机安装iscsi-initiator-utils软件实现,或者通过网卡自带的PXE启动。esp+ip+scsi
  3. iscsi再传输数据的时候考虑了安全性,可以通过IPSEC 对流量加密,并且iscsi提供CHAP认证机制以及ACL访问控制,但是在访问iscsi-target的时候需要IQN(iscsi完全名称,区分唯一的initiator和target设备),格式iqn.年月.域名后缀(反着写):[target服务器的名称或IP地址]
  4. iscsi默认使用TCP端口3260提供服务

ISCSI服务端配置

1. 新增一块磁盘(磁盘分区)

新增一块磁盘,或者磁盘分区。本文直接给测试虚机添加了一个虚拟磁盘vdb

[root@iscsi-server ~]# lsblk
NAME   MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
vda    253:0    0  10G  0 disk 
└─vda1 253:1    0  10G  0 part /
vdb    253:16   0  10G  0 disk

2. 配置服务端

2.1 安装管理工具

注:
实现target服务端管理功能的工具有很多,比如targetcli, tgtadm,ietadm等等。本文使用targetcli做演示,因为它最新最简单^_^

[root@iscsi-server ~]# yum -y install targetd targetcli
[root@iscsi-server ~]# systemctl restart targetd
[root@iscsi-server ~]# systemctl enable targetd 
Created symlink from /etc/systemd/system/multi-user.target.wants/targetd.service to /usr/lib/systemd/system/targetd.service.

2.2 格式化磁盘

2.3 配置服务端资源

Targetcli简介:
targetcli是用于管理iSCSI服务端存储资源的专用配置命令,它能够提供类似于fdisk命令的交互式配置功能,将iSCSI共享资源的配置内容抽象成“目录”的形式,我们只需将各类配置信息填入到相应的“目录”中即可。这里的难点主要在于认识每个“参数目录”的作用。当把配置参数正确地填写到“目录”中后,iSCSI服务端也可以提供共享资源服务了。
在执行targetcli命令后就能看到交互式的配置界面了。在该界面中可以使用很多Linux命令,比如利用ls查看目录参数的结构,使用cd切换到不同的目录中。

/backstores/block是iSCSI服务端配置共享设备的位置。
我们需要把磁盘(磁盘分区)加入到配置共享设备的“资源池”中,并将该文件重新命名为testBlock1,这样用户就不会知道是由服务器中的哪块硬盘来提供共享存储资源,而只会看到一个名为testBlock1的存储设备。

[root@iscsi-server ~]# targetcli
Warning: Could not load preferences file /root/.targetcli/prefs.bin.
targetcli shell version 2.1.53
Copyright 2011-2013 by Datera, Inc and others.
For help on commands, type 'help'.

/> 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]
/>
/>
/> cd /backstores/block #创建一个名为testBlock1的存储块
/backstores/block> create testBlock1 dev=/dev/vdb
Created block storage object testBlock1 using /dev/vdb.

2.3 创建iSCSI target

/> cd iscsi 
/iscsi> ls
o- iscsi .............................................................................................................. [Targets: 0]
/iscsi> create wwn=iqn.2018-10.com.example:server #创建服务端target iqn
Created target iqn.2018-10.com.example:server.
Created TPG 1.
Global pref auto_add_default_portal=true
Created default portal listening on all IPs (0.0.0.0), port 3260.
/iscsi> ls
o- iscsi .............................................................................................................. [Targets: 1]
  o- iqn.2018-10.com.example:server ...................................................................................... [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>
/iscsi> cd iqn.2018-10.com.example:server/tpg1/luns #创建lun
/iscsi/iqn.20...ver/tpg1/luns> create storage_object=/backstores/block/testBlock1 lun=0
Created LUN 0.

2.4 设置服务端对外的Portals

iSCSI协议客户端访问服务端时,需要通过发现、登陆服务端对外提供的portals。在创建target的时候就会默认使用3260端口自动创建一个portal

通常使用默认的3260的portal就足够了,本文因为是测试所以再新建一个玩一玩。

/> cd iscsi/iqn.2018-10.com.example:server/tpg1/portals/
/iscsi/iqn.20.../tpg1/portals> ls #可以看到默认已经有一个使用3260端口的portal
o- portals ............................................................................................................ [Portals: 1]
  o- 0.0.0.0:3260 ............................................................................................................. [OK]
/iscsi/iqn.20.../tpg1/portals> create ip_address=0.0.0.0 ip_port=3261 #再新建一个3261端口的portal提供为外部访问
Binding to INADDR_ANY (0.0.0.0)
Created network portal 0.0.0.0:3261.
/iscsi/iqn.20.../tpg1/portals> ls
o- portals ............................................................................................................ [Portals: 2]
  o- 0.0.0.0:3260 ............................................................................................................. [OK]
  o- 0.0.0.0:3261 ............................................................................................................. [OK]

2.5 配置访问控制列表(ACL)

iSCSI协议是通过客户端名称进行验证的,也就是说,用户在访问存储共享资源时不需要输入密码,只要iSCSI客户端的名称与服务端中设置的访问控制列表中某一名称条目一致即可,因此需要在iSCSI服务端的配置文件中写入一串能够验证用户信息的名称。acls参数目录用于存放能够访问iSCSI服务端共享存储资源的客户端名称。

因为仅仅通过客户端名称,即客户端设置的InitiatorName进行验证,可能导致当多个客户端用同相同名称时,多个客户端均可访问到同一存储资源。
所以,在实际场景中往往有以下两条使用限制条件:

  • 客户端的InitiatorName要唯一,保证资源访问的安全。
  • 若有需要多个客户端同时访问同一存储资源的场景,为需要访问的客户端都添加访问权限即可。
/> 
/> cd /iscsi/iqn.2018-10.com.example:server/tpg1/acls
/iscsi/iqn.20...ver/tpg1/acls> create wwn=iqn.2018-10.com.example:client1 #为名称是iqn.2018-10.com.example:client1的客户端添加访问权限
Created Node ACL for iqn.2018-10.com.example:client1
Created mapped LUN 0.
/iscsi/iqn.20...ver/tpg1/acls> create wwn=iqn.2003-01.org.linux-iscsi.bolin-iscsi-server.x8664:sn.ffc93e13edbe:client #为第二个客户端添加访问权限
Created Node ACL for iqn.2003-01.org.linux-iscsi.bolin-iscsi-server.x8664:sn.ffc93e13edbe:client
Created mapped LUN 0.

2.6 保存配置

targetcli,输入exit退出命令时就可以自动保存配置到文件

/> exit
Global pref auto_save_on_exit=true
Configuration saved to /etc/target/saveconfig.json

想要查看配置,可以直接读取json文件

[root@iscsi-server ~]# cat /etc/target/saveconfig.json 

配置客户端

1. Linux客户端

1.1 安装服务程序iscsi-initiator-utils

在RHEL 7系统中,已经默认安装了iSCSI客户端服务程序initiator。如果您的系统没有安装的话,可以使用Yum软件仓库手动安装。

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

1.2 添加客户端名称

iSCSI协议是通过客户端的名称来进行验证,而该名称也是iSCSI客户端的唯一标识,而且必须与服务端配置文件中访问控制列表中的信息一致,否则客户端在尝试访问存储共享设备时,系统会弹出验证失败的保存信息。

在配置文件中添加客户端名称iqn.2018-10.com.example:client1:

[root@iscsi-client ~]# cat /etc/iscsi/initiatorname.iscsi 
InitiatorName=iqn.2018-10.com.example:client1
[root@iscsi-client ~]# systemctl restart iscsid
[root@iscsi-client ~]# systemctl enable iscsid
Created symlink from /etc/systemd/system/multi-user.target.wants/iscsid.service to /usr/lib/systemd/system/iscsid.service.

1.3 访问挂载存储块设备

iscsiadm是用于管理、查询、插入、更新或删除iSCSI数据库配置文件的命令行工具,用户需要先使用这个工具扫描发现远程iSCSI服务端,然后查看找到的服务端上有哪些可用的共享存储资源。

[root@iscsi-client-bolin ~]# man iscsiadm | grep \\-mode
       -m, --mode op
            iscsiadm --mode discoverydb --type sendtargets --portal 192.168.1.10 --discover
            iscsiadm --mode node --targetname iqn.2001-05.com.doe:test --portal 192.168.1.1:3260 --login
            iscsiadm --mode node --targetname iqn.2001-05.com.doe:test --portal 192.168.1.1:3260 --logout
            iscsiadm --mode node
            iscsiadm --mode node --targetname iqn.2001-05.com.doe:test --portal 192.168.1.1:3260
  • 通过客户端暴露的ip地址及端口号,discover服务端target iqn
[root@iscsi-client ~]# iscsiadm --mode discoverydb --type sendtargets --portal 192.168.60.85:3261  --discover
192.168.60.85:3261,1 iqn.2018-10.com.example:server
  • 登陆iqn, 登陆成功后自动扫描出target服务端允许本客户端访问的所有lun
[root@iscsi-client ~]# iscsiadm --mode node --targetname iqn.2018-10.com.example:server --portal 192.168.60.85:3261 --login
Logging in to [iface: default, target: iqn.2018-10.com.example:server, portal: 192.168.60.85,3261] (multiple)
Login to [iface: default, target: iqn.2018-10.com.example:server, portal: 192.168.60.85,3261] successful.

此时,客户端可以看到除了系统盘外已经多出来了一块磁盘

[root@iscsi-client ~]# lsscsi -i
[8:0:0:0]    disk    LIO-ORG  testBlock1       4.0   /dev/sda   360014050a542edca1a14a8e955839726
[root@iscsi-client ~]# lsblk
vda      253:0    0  10G  0 disk  
└─vda1   253:1    0  10G  0 part  /
sda       65:32   0  10G  0 disk 

这块磁盘的使用完全和本地磁盘一致,格式化、mkfs制作文件系统、mount等等。

2. Window客户端

运行iSCSI发起程序。
控制面板->系统安全->管理工具->iSCSI发起程序

  • 发现服务端iqn
    在这里插入图片描述
  • 设置客户端名称
    在这里插入图片描述
  • 登陆iqn
    在这里插入图片描述
  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值