Linux下搭建iSCSI共享存储-(Linux-IO Target)
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中,按照以下步骤操作:
- 创建一个后端存储块设备(可以是物理磁盘或一个文件映像):
/> /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性能,建议使用物理磁盘作为存储。
- 创建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名称,根据自己的需要进行自定义。
- 将创建的后端存储与目标关联:
通过如下命令创建一个LUN:
/> /iscsi/iqn.2023-09.com.example:mytarget/tpg1/luns create /backstores/block/mydisk
Created LUN 0.
- 配置网络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
- 查看当前配置信息以及退出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.
登录成功后,发起端的系统会检测到一个新的磁盘设备,可以通过lsblk
或fdisk -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