• 配置 iSCSI 服务并实现客户端自动挂载块设备



    前言

    最近需要基于共享存储去配置 LVM 镜像,由于没有 FCSAN 环境,就想通过部署 iSCSI 服务来提供共享存储。下面是本次实验环境的基本信息:

    OS VersionRed Hat Enterprise Linux Server release 7.9 (Maipo)

    No.HostnameIPRole
    1iscsi-server172.16.206.30Server
    2iscsi-client1172.16.206.31Client
    3iscsi-client2172.16.206.32Client

    另外,为了配置更加方便,所有节点的系统防火墙以及 SELinux 模块都被博主禁用了;如果大家的环境里面有安全方面的要求,还需要自己放行相应的端口。


    1. iSCSI 简介

    iSCSI(Internet Small Computer System Interface),即 Internet 小型计算机系统接口。iSCSI 是一个基于 TCP/IP 的协议,用于通过 IP 网络仿真 SCSI 高性能本地存储总线,从而为远程块存储设备提供数据传输和管理。下图为块 I/O 网络堆栈组件:

    在这里插入图片描述


    2. iSCSI Server 端配置

    2.1. 添加磁盘

    博主使用的是 SmartX 超融合平台的虚拟机,默认会将系统盘的盘符识别成 vda 而不是我们常见的 sda 标识。在 Server 节点上,除了 vda 系统盘,博主还额外添加了4块 50GB 的磁盘,本次实验就是将这4块磁盘共享给两台 Client 节点当做块设备使用。

    [root@iscsi-server ~]# lsblk
    NAME          MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
    vda           252:0    0  100G  0 disk 
    ├─vda1        252:1    0    2M  0 part 
    ├─vda2        252:2    0  500M  0 part /boot
    └─vda3        252:3    0 99.5G  0 part 
      ├─rhel-root 253:0    0 83.5G  0 lvm  /
      └─rhel-swap 253:1    0   16G  0 lvm  [SWAP]
    vdb           252:16   0   50G  0 disk 
    vdc           252:32   0   50G  0 disk 
    vdd           252:48   0   50G  0 disk 
    vde           252:64   0   50G  0 disk 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    2.2. 安装 targetcli 软件包

    targetcli 既是命令行实用程序,也是一个交互式 shell;我们可以通过配置本地 yum 源直接安装该工具包。

    [root@iscsi-server ~]# yum -y install targetd targetcli
    
    • 1

    2.3. 创建块设备

    直接运行 targetcli 命令进入交互模式,Server 端所有配置都在交互模式下进行。

    [root@iscsi-server ~]# targetcli
    targetcli shell version 2.1.51
    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 
    /backstores/block> create block01 /dev/vdb
    Created block storage object block01 using /dev/vdb.
    /backstores/block> create block02 /dev/vdc
    Created block storage object block02 using /dev/vdc.
    /backstores/block> create block03 /dev/vdd
    Created block storage object block03 using /dev/vdd.
    /backstores/block> create block04 /dev/vde
    Created block storage object block04 using /dev/vde.
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    2.4. 创建 Target

    关于为 Target 创建 IQN,有以下几点需要进行说明:

    • 在为 Target 创建 IQN 时会在此 IQN 下面创建一个默认的 TPG。
    • IQN 即 iSCSI 限定名称,一个全球唯一名称,用于以强制命名格式来识别启动器(initiator)和目标(target)。
      • 通用格式:iqn.YYYY-MM.com.reversed.domain[:optional_string];
      • iqn:表示此名称将使用域作为其标识符;
      • YYYY-MM:拥有域名的第一个月;
      • com.reversed.domain:此 iSCSI 名称的创建组织的逆向域名;
      • optional_string:以冒号为前缀的可选字符串。
    • 管理员如果不指定要创建的 IQN,系统会自动生成一个 IQN。
    • 建议管理员根据需要指定一个具有一定意义的 IQN。
    /backstores/block> cd /iscsi 
    /iscsi> create iqn.2023-09.com.example.lab:remotedisk
    Created target iqn.2023-09.com.example.lab:remotedisk.
    Created TPG 1.
    Global pref auto_add_default_portal=true
    Created default portal listening on all IPs (0.0.0.0), port 3260.
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    2.5. 创建 LUN

    /iscsi> ls
    o- iscsi .............................................................................................................. [Targets: 1]
      o- iqn.2023-09.com.example.lab:remotedisk .............................................................................. [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 iqn.2023-09.com.example.lab:remotedisk/tpg1/luns 
    /iscsi/iqn.20...isk/tpg1/luns> create /backstores/block/block01
    Created LUN 0.
    /iscsi/iqn.20...isk/tpg1/luns> create /backstores/block/block02
    Created LUN 1.
    /iscsi/iqn.20...isk/tpg1/luns> create /backstores/block/block03
    Created LUN 2.
    /iscsi/iqn.20...isk/tpg1/luns> create /backstores/block/block04
    Created LUN 3.
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    2.6. 创建 ACL

    下面创建的 ACL 表示将 Target 配置为仅接受以 iqn.2023-09.com.example.lab:client 作为其启动器 IQN 的客户端的连接。

    /iscsi/iqn.20...isk/tpg1/luns> cd ../acls 
    /iscsi/iqn.20...isk/tpg1/acls> create iqn.2023-09.com.example.lab:client
    Created Node ACL for iqn.2023-09.com.example.lab:client
    Created mapped LUN 3.
    Created mapped LUN 2.
    Created mapped LUN 1.
    Created mapped LUN 0.
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    2.7. 配置门户创建监听

    管理员需要创建一个门户配置以指定监听 IP 地址和端口;如果未指定 IP 则默认使用 0.0.0.0 地址;如果未指定端口号则默认使用 3260 端口。

    /iscsi/iqn.20...isk/tpg1/acls> cd ../portals/
    /iscsi/iqn.20.../tpg1/portals> ls
    o- portals ............................................................................................................ [Portals: 1]
      o- 0.0.0.0:3260 ............................................................................................................. [OK]
    /iscsi/iqn.20.../tpg1/portals> delete 0.0.0.0 3260
    Deleted network portal 0.0.0.0:3260
    /iscsi/iqn.20.../tpg1/portals> create 172.16.206.30
    Using default IP port 3260
    Created network portal 172.16.206.30:3260.
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    2.8. 查看全部配置信息并保存退出

    /iscsi/iqn.20.../tpg1/portals> cd /
    /> ls
    o- / ......................................................................................................................... [...]
      o- backstores .............................................................................................................. [...]
      | o- block .................................................................................................. [Storage Objects: 4]
      | | o- block01 ......................................................................... [/dev/vdb (50.0GiB) write-thru activated]
      | | | o- alua ................................................................................................... [ALUA Groups: 1]
      | | |   o- default_tg_pt_gp ....................................................................... [ALUA state: Active/optimized]
      | | o- block02 ......................................................................... [/dev/vdc (50.0GiB) write-thru activated]
      | | | o- alua ................................................................................................... [ALUA Groups: 1]
      | | |   o- default_tg_pt_gp ....................................................................... [ALUA state: Active/optimized]
      | | o- block03 ......................................................................... [/dev/vdd (50.0GiB) write-thru activated]
      | | | o- alua ................................................................................................... [ALUA Groups: 1]
      | | |   o- default_tg_pt_gp ....................................................................... [ALUA state: Active/optimized]
      | | o- block04 ......................................................................... [/dev/vde (50.0GiB) write-thru activated]
      | |   o- alua ................................................................................................... [ALUA Groups: 1]
      | |     o- default_tg_pt_gp ....................................................................... [ALUA state: Active/optimized]
      | o- fileio ................................................................................................. [Storage Objects: 0]
      | o- pscsi .................................................................................................. [Storage Objects: 0]
      | o- ramdisk ................................................................................................ [Storage Objects: 0]
      o- iscsi ............................................................................................................ [Targets: 1]
      | o- iqn.2023-09.com.example.lab:remotedisk ............................................................................ [TPGs: 1]
      |   o- tpg1 ............................................................................................... [no-gen-acls, no-auth]
      |     o- acls .......................................................................................................... [ACLs: 1]
      |     | o- iqn.2023-09.com.example.lab:client ................................................................... [Mapped LUNs: 4]
      |     |   o- mapped_lun0 ............................................................................... [lun0 block/block01 (rw)]
      |     |   o- mapped_lun1 ............................................................................... [lun1 block/block02 (rw)]
      |     |   o- mapped_lun2 ............................................................................... [lun2 block/block03 (rw)]
      |     |   o- mapped_lun3 ............................................................................... [lun3 block/block04 (rw)]
      |     o- luns .......................................................................................................... [LUNs: 4]
      |     | o- lun0 .................................................................... [block/block01 (/dev/vdb) (default_tg_pt_gp)]
      |     | o- lun1 .................................................................... [block/block02 (/dev/vdc) (default_tg_pt_gp)]
      |     | o- lun2 .................................................................... [block/block03 (/dev/vdd) (default_tg_pt_gp)]
      |     | o- lun3 .................................................................... [block/block04 (/dev/vde) (default_tg_pt_gp)]
      |     o- portals .................................................................................................... [Portals: 1]
      |       o- 172.16.206.30:3260 ............................................................................................... [OK]
      o- loopback ......................................................................................................... [Targets: 0]
      /> exit
    Global pref auto_save_on_exit=true
    Configuration saved to /etc/target/saveconfig.json
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40

    2.9. 启用 Target 服务

    [root@iscsi-server ~]# systemctl start target.service 
    [root@iscsi-server ~]# systemctl enable target.service
    
    • 1
    • 2

    3. iSCSI Client 端配置

    两台 Client 节点的配置方法一样,下面仅以 iscsi-client1 节点进行配置示例。

    3.1. 安装 iscsi-initiator-utils 软件包

    • 先检查系统是否已安装该软件包(博主的环境在安装系统时已经自动安装过了)。
    [root@iscsi-client1 ~]# rpm -qa |grep -i iscsi-initiator
    iscsi-initiator-utils-iscsiuio-6.2.0.874-19.el7.x86_64
    iscsi-initiator-utils-6.2.0.874-19.el7.x86_64
    
    • 1
    • 2
    • 3
    • 如果未安装此软件包,可以配置本地 yum 源直接进行安装即可。
    [root@iscsi-client1 ~]# yum -y install iscsi-initiator-utils
    
    • 1

    3.2. 重置 IQN

    作为 iSCSI 节点,客户端需要一个唯一的 IQN;默认的 /etc/iscsi/initiatorname.iscsi 文件包含一个使用红帽的域生成的 IQN,管理员通常会将 IQN 重置为自己的域以及相应的客户端系统字符串。

    [root@iscsi-client1 ~]# vim /etc/iscsi/initiatorname.iscsi 
    [root@iscsi-client1 ~]# cat /etc/iscsi/initiatorname.iscsi 
    InitiatorName=iqn.2023-09.com.example.lab:client
    [root@iscsi-client1 ~]# systemctl restart iscsi
    [root@iscsi-client1 ~]# systemctl restart iscsid
    
    • 1
    • 2
    • 3
    • 4
    • 5

    3.3. 发现目标

    [root@iscsi-client1 ~]# iscsiadm -m discovery -t st -p 172.16.206.30
    172.16.206.30:3260,1 iqn.2023-09.com.example.lab:remotedisk
    
    • 1
    • 2

    3.4. 登录

    [root@iscsi-client1 ~]# iscsiadm -m node -T iqn.2023-09.com.example.lab:remotedisk -p 172.16.206.30:3260 -l
    Logging in to [iface: default, target: iqn.2023-09.com.example.lab:remotedisk, portal: 172.16.206.30,3260] (multiple)
    Login to [iface: default, target: iqn.2023-09.com.example.lab:remotedisk, portal: 172.16.206.30,3260] successful.
    
    • 1
    • 2
    • 3

    3.5. 查看已挂载的块设备信息

    [root@iscsi-client1 ~]# lsblk
    NAME          MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
    sda             8:0    0   50G  0 disk 
    sdb             8:16   0   50G  0 disk 
    sdc             8:32   0   50G  0 disk 
    sdd             8:48   0   50G  0 disk 
    vda           252:0    0  100G  0 disk 
    ├─vda1        252:1    0    2M  0 part 
    ├─vda2        252:2    0  500M  0 part /boot
    └─vda3        252:3    0 99.5G  0 part 
      ├─rhel-root 253:0    0 83.5G  0 lvm  /
      └─rhel-swap 253:1    0   16G  0 lvm  [SWAP]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    3.6. 查看 iSCSI 会话信息

    使用 -P N(0 ≤ N ≤ 3) 选项可以获取有关 Target 的信息,N 的值越大,获取到的信息越详细。

    [root@iscsi-client1 ~]# iscsiadm -m session -P 3
    iSCSI Transport Class version 2.0-870
    version 6.2.0.874-19
    Target: iqn.2023-09.com.example.lab:remotedisk (non-flash)
    	Current Portal: 172.16.206.30:3260,1
    	Persistent Portal: 172.16.206.30:3260,1
    		**********
    		Interface:
    		**********
    		Iface Name: default
    		Iface Transport: tcp
    		Iface Initiatorname: iqn.2023-09.com.example.lab:client
    		Iface IPaddress: 172.16.206.31
    		Iface HWaddress: 
    		Iface Netdev: 
    		SID: 1
    		iSCSI Connection State: LOGGED IN
    		iSCSI Session State: LOGGED_IN
    		Internal iscsid Session State: NO CHANGE
    		*********
    		Timeouts:
    		*********
    		Recovery Timeout: 120
    		Target Reset Timeout: 30
    		LUN Reset Timeout: 30
    		Abort Timeout: 15
    		*****
    		CHAP:
    		*****
    		username: 
    		password: ********
    		username_in: 
    		password_in: ********
    		************************
    		Negotiated iSCSI params:
    		************************
    		HeaderDigest: None
    		DataDigest: None
    		MaxRecvDataSegmentLength: 262144
    		MaxXmitDataSegmentLength: 262144
    		FirstBurstLength: 65536
    		MaxBurstLength: 262144
    		ImmediateData: Yes
    		InitialR2T: Yes
    		MaxOutstandingR2T: 1
    		************************
    		Attached SCSI devices:
    		************************
    		Host Number: 2	State: running
    		scsi2 Channel 00 Id 0 Lun: 0
    			Attached scsi disk sda		State: running
    		scsi2 Channel 00 Id 0 Lun: 1
    			Attached scsi disk sdd		State: running
    		scsi2 Channel 00 Id 0 Lun: 2
    			Attached scsi disk sdc		State: running
    		scsi2 Channel 00 Id 0 Lun: 3
    			Attached scsi disk sdb		State: running
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57

    总结

    关于 iSCSI 有两个配置文件以及一个数据目录值得关注,分别是:

    • 配置文件
      • /etc/iscsi/initiatorname.iscsi
      • /etc/iscsi/iscsid.conf
    • 数据目录
      • /var/lib/iscsi/

    其中 /etc/iscsi/initiatorname.iscsi 配置文件的作用在前面已经说过了,而 /etc/iscsi/iscsid.conf 配置文件可以用来定义 iSCSI 超时以及队列深度等参数,修改这些文件需要重启 iscsi 和 iscsid 服务。

    当在 Client 节点上发现了目标后,会将目标节点的信息和配置存储在 /var/lib/iscsi/nodes/ 目录中;当我们在登录出现报错时,往往需要清理掉这些目录下的残留信息,下面博主以 iscsi-client2 节点为例。

    博主在配置 iscsi-client2 节点时写错了 /etc/iscsi/initiatorname.iscsi 配置文件,导致在登录时出现如下报错:

    [root@iscsi-client2 iscsi]# iscsiadm -m node -T iqn.2023-09.com.example.lab:remotedisk -p 172.16.206.30:3260 -l
    Logging in to [iface: default, target: iqn.2023-09.com.example.lab:remotedisk, portal: 172.16.206.30,3260] (multiple)
    iscsiadm: Could not login to [iface: default, target: iqn.2023-09.com.example.lab:remotedisk, portal: 172.16.206.30,3260].
    iscsiadm: initiator reported error (24 - iSCSI login failed due to authorization failure)
    iscsiadm: Could not log into all portals
    
    • 1
    • 2
    • 3
    • 4
    • 5

    最后的解决方法如下所示

    • 将 /etc/iscsi/initiatorname.iscsi 配置文件修改正确。
    • 删除残留信息。
    [root@iscsi-client2 ~]# rm -rf /var/lib/iscsi/nodes/*
    [root@iscsi-client2 ~]# rm -rf /var/lib/iscsi/send_targets/*
    
    • 1
    • 2
    • 重启服务。
    [root@iscsi-client2 ~]# systemctl restart iscsi
    [root@iscsi-client2 ~]# systemctl restart iscsid
    
    • 1
    • 2
    • 重新发现。
    [root@iscsi-client2 ~]# iscsiadm -m discovery -t st -p 172.16.206.30
    172.16.206.30:3260,1 iqn.2023-09.com.example.lab:remotedisk
    [root@iscsi-client2 ~]# iscsiadm -m node -T iqn.2023-09.com.example.lab:remotedisk -p 172.16.206.30:3260 -l
    Logging in to [iface: default, target: iqn.2023-09.com.example.lab:remotedisk, portal: 172.16.206.30,3260] (multiple)
    Login to [iface: default, target: iqn.2023-09.com.example.lab:remotedisk, portal: 172.16.206.30,3260] successful.
    
    • 1
    • 2
    • 3
    • 4
    • 5

  • 相关阅读:
    Vscode | Python | launch.json配置gevent多进程断点失效问题处理
    【工程光学】几何光学基本定律&成像概念
    软件测试
    DevExpress Office文件API打印 PDF 文档
    【jmeter】
    【STM32CubeMX】STM32H743配置IAP升级
    Java实现模拟键盘和鼠标操作
    解码 xsync 的 map 实现
    使用Spring Boot限制在一分钟内某个IP只能访问10次
    Tomcat运行流程、Servlet运行原理以及常用API
  • 原文地址:https://blog.csdn.net/hffwj/article/details/133092648