Linux下搭建iSCSI共享存储-(Linux-IO Target)

相比昂贵的商业用的ipsan存储,软件实现的ipsan方案更加经济实惠,适用于一般的测试环境。Linux-IO Target是Linux内核中的一个软件,用于实现各种SCSI Target。它支持的SAN技术包括Fibre Channel、FCoE、iSCSI等,同时还能为本机生成模拟的SCSI设备,以及为虚拟机提供基于virtio的SCSI设备。Linux-IO Target在Linux内核中的版本为linux 2.6.38及以后的版本1。

下面以CentOS7为例,介绍如何基于Linux-IO Targe搭建iSCSI共享存储:

1. 环境准备

  • iSCSI目标端(Target):提供存储设备,类似于存储服务器。

本文使用一台centos7机器作为iSCSI目标端,分配一个200G磁盘用作iSCSI存储设备,盘符为/dev/vdb

  • iSCSI发起端(Initiator):需要访问存储设备的客户端。

可以是其他网络可达支持iscsi协议的客户端,如Windows、Linux等。

2. 安装iSCSI软件包

在目标端和发起端都需要安装相关的iSCSI软件包。

2.1 目标端(Target)上安装

CentOS 7/8可以使用targetcli来管理iSCSI。

sudo yum install targetcli -y

2.2发起端(Initiator)上安装

发起端(即客户端)需要安装iscsi-initiator-utils

sudo yum install iscsi-initiator-utils -y

3. 在目标端配置iSCSI存储

3.1 启动并启用targetcli

sudo systemctl start target
sudo systemctl enable target

3.2 使用targetcli配置iSCSI目标

进入targetcli命令行界面:

sudo targetcli

在targetcli中,按照以下步骤操作:

  1. 创建一个后端存储块设备(可以是物理磁盘或一个文件映像):
/> /backstores/block create name=mydisk dev=/dev/vdb
Created block storage object mydisk using /dev/vdb.

或者使用一个文件作为存储:

# 提前创建好对应目录: mkdir -p /var/lib/iscsi_disks
/> /backstores/fileio create name=mydisk file_or_dev=/var/lib/iscsi_disks/mydisk.img size=10G

注意:如果为追求IO性能,建议使用物理磁盘作为存储。

  1. 创建iSCSI目标端:
/> /iscsi create iqn.2023-09.com.example:mytarget
Created target iqn.2023-09.com.example:mytarget.
Created TPG 1.
Global pref auto_add_default_portal=true
Created default portal listening on all IPs (0.0.0.0), port 3260.

说明

iqn.2023-09.com.example:mytarget为iSCSI目标端iqn名称,根据自己的需要进行自定义。

  1. 将创建的后端存储与目标关联:

通过如下命令创建一个LUN:

/> /iscsi/iqn.2023-09.com.example:mytarget/tpg1/luns create /backstores/block/mydisk
Created LUN 0.
  1. 配置网络ACL以允许发起端连接:
/> /iscsi/iqn.2023-09.com.example:mytarget/tpg1/acls create iqn.1994-05.com.redhat:dd7e92f1d16e
Created Node ACL for iqn.1994-05.com.redhat:dd7e92f1d16e
Created mapped LUN 0

注意:

上述ACL中添加客户端的iqn,需要在客户端通过命令cat /etc/iscsi/initiatorname.iscsi查看。

如果是单个LUnch映射多个发起端,配置相应的发起端即可:

/> /iscsi/iqn.2023-09.com.example:mytarget/tpg1/acls create iqn.1994-05.com.redhat:d68f277777
  1. 查看当前配置信息以及退出targetcli:
/> ls /
o- / ......................................................................................................................... [...]
  o- backstores .............................................................................................................. [...]
  | o- block .................................................................................................. [Storage Objects: 1]
  | | o- mydisk ......................................................................... [/dev/vdb (200.0GiB) write-thru activated]
  | |   o- alua ................................................................................................... [ALUA Groups: 1]
  | |     o- default_tg_pt_gp ....................................................................... [ALUA state: Active/optimized]
  | o- fileio ................................................................................................. [Storage Objects: 1]
  | | o- mydisk ................................................. [/var/lib/iscsi_disks/mydisk.img (10.0GiB) write-back deactivated]
  | |   o- alua ................................................................................................... [ALUA Groups: 1]
  | |     o- default_tg_pt_gp ....................................................................... [ALUA state: Active/optimized]
  | o- pscsi .................................................................................................. [Storage Objects: 0]
  | o- ramdisk ................................................................................................ [Storage Objects: 0]
  o- iscsi ............................................................................................................ [Targets: 1]
  | o- iqn.2023-09.com.example:mytarget .................................................................................. [TPGs: 1]
  |   o- tpg1 ............................................................................................... [no-gen-acls, no-auth]
  |     o- acls .......................................................................................................... [ACLs: 2]
  |     | o- iqn.1994-05.com.redhat:d68f277777 .................................................................... [Mapped LUNs: 1]
  |     | | o- mapped_lun0 ................................................................................ [lun0 block/mydisk (rw)]
  |     | o- iqn.1994-05.com.redhat:dd7e92f1d16e .................................................................. [Mapped LUNs: 1]
  |     |   o- mapped_lun0 ................................................................................ [lun0 block/mydisk (rw)]
  |     o- luns .......................................................................................................... [LUNs: 1]
  |     | o- lun0 ..................................................................... [block/mydisk (/dev/vdb) (default_tg_pt_gp)]
  |     o- portals .................................................................................................... [Portals: 1]
  |       o- 0.0.0.0:3260 ..................................................................................................... [OK]
  o- loopback ......................................................................................................... [Targets: 0]

/> exit
Global pref auto_save_on_exit=true
Last 10 configs saved in /etc/target/backup/.
Configuration saved to /etc/target/saveconfig.json

3.3 配置防火墙规则

在目标端(Target)上,需要确保允许iSCSI端口3260的流量:

sudo firewall-cmd --add-port=3260/tcp --permanent
sudo firewall-cmd --reload

4. 配置发起端(Initiator)

4.1 发现iSCSI target端

在发起端,首先使用以下命令发现目标端上的iSCSI目标:

sudo iscsiadm -m discovery -t st -p <目标端IP地址>

输出类似于:

<目标端IP地址>:3260,1 iqn.2023-09.com.example:mytarget

4.2 登录到目标端

sudo iscsiadm -m node --targetname iqn.2023-09.com.example:mytarget --portal <目标端IP地址> --login

输出类似于:

Logging in to [iface: default, target: iqn.2023-09.com.example:mytarget, portal: <目标端IP地址>,3260] (multiple)
Login to [iface: default, target: iqn.2023-09.com.example:mytarget, portal: <目标端IP地址>,3260] successful.

登录成功后,发起端的系统会检测到一个新的磁盘设备,可以通过lsblkfdisk -l查看。

5. 自动登录并挂载iSCSI存储

5.1 配置开机自动登录

sudo iscsiadm -m node --targetname iqn.2023-09.com.example:mytarget --portal <目标端IP地址> --op update -n node.startup -v automatic

5.2 挂载iSCSI存储

创建文件系统并挂载新磁盘,例如:

sudo mkfs.ext4 /dev/sdX
sudo mkdir /mnt/iscsi_disk
sudo mount /dev/sdX /mnt/iscsi_disk

说明

如果是多个发起端挂载同一个LUN,需要配置共享集群文件系统,而ext4等linux常用的文件系统用于单机环境。

6. 测试

在发起端上,您可以向挂载的iSCSI存储中写入数据,并通过目标端验证存储是否正常工作。

7. 退出iSCSI会话

如果需要断开连接,可以使用以下命令:

sudo iscsiadm -m node --targetname iqn.2023-09.com.example:mytarget --portal <目标端IP地址> --logout
Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐