云贝教育 |【技术文章】基于kylin v10的iSICI技术详解

本文为云贝教育 刘老师 原创,请尊重知识产权,转发请注明出处,不接受任何抄袭、演绎和未经注明出处的转载。

引言

iSCSI(Internet Small Computer System Interface)是一种基于IP网络的存储协议,允许通过TCP/IP网络进行存储设备的访问。iSCSI 技术使存储设备可以像普通的网络设备一样通过标准的以太网连接进行通信,从而实现了存储资源的网络化和远程访问。本文将详细介绍iSCSI的基本概念、配置方法以及在Linux系统中的应用场景。

一、iSCSI 概述

iSCSI 协议将传统的SCSI命令封装在TCP/IP协议中,使得SCSI设备可以通过IP网络进行通信。通过iSCSI技术,可以将远程的存储设备(称为Target)呈现给本地系统(称为Initiator),从而使本地系统能够像访问本地磁盘一样访问远程存储。

二、iSCSI 的基本组件

  1. iSCSI Initiator:发起iSCSI连接的一方,通常是需要访问存储资源的客户端系统。
  2. iSCSI Target:提供存储资源的一方,通常是存储服务器或存储阵列。
  3. LUN(Logical Unit Number):iSCSI Target上的逻辑单元号,每个LUN代表一个存储设备。
  4. IQN(iSCSI Qualified Name):用于唯一标识iSCSI Initiator和Target的名称,格式为iqn.yyyy-mm.naming-authority:unique-string。

三、iSCSI 的工作流程

  1. 发现目标:Initiator通过广播或多播发现iSCSI Target,或者直接通过已知的IP地址连接Target。
  2. 登录阶段:Initiator与Target建立会话,进行认证(如果启用)。
  3. 认证阶段:双方进行认证,验证彼此的身份。
  4. 全双工阶段:双方进行正常的SCSI命令交互。
  5. 会话终止:当不再需要访问存储时,Initiator可以终止会话。

四、Linux 系统中的 iSCSI 配置

4.1. 安装 iSCSI Initiator

在Linux系统中,通常需要安装iscsi-initiator-utils或open-iscsi包来支持iSCSI功能。

yum install open-iscsi

4.2. 发现 iSCSI Target

使用iscsiadm命令发现iSCSI Target。

iscsiadm -m discovery -t st -p target_ip_address

4.3. 登录 iSCSI Target

登录发现的iSCSI Target:

iscsiadm -m node -T target_iqn -p target_ip_address -l

4.4. 配置自动登录:

将iSCSI Target添加到/etc/iscsi/iscsi.conf或/etc/iscsi/initiatorname.iscsi中,以实现自动登录

InitiatorName=iqn.2003-01.org.linux-iscsi:initiatorname

并在/etc/iscsi/iscsid.conf中设置自动启动:

node.startup = automatic

4.5. 格式化和挂载 LUN

一旦登录成功,iSCSI LUN将作为一个新的磁盘设备出现在Linux系统中。可以对其进行格式化并挂载:

mkfs.ext4 /dev/sdb
mkdir /mnt/iscsi
mount /dev/sdb /mnt/iscsi

4.6. 验证挂载状态

使用df -h命令验证LUN是否成功挂载

df -h

五、配置实战

主机名称操作系统IP地址
iSCSI服务端kylin v10192.168.2.136
iSCSI客户端kylin v10192.168.2.137

5.1 服务端配置

1) 安装iSCSI服务端程序

# dnf install -y targetcli

2)确认服务端未使用的存储

# lsblk 
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda               8:0    0   20G  0 disk 
└─vg_01-lv01    253:3    0   25G  0 lvm  /data
sdb               8:16   0   20G  0 disk 
└─vg_01-lv01    253:3    0   25G  0 lvm  /data
sdc               8:32   0   20G  0 disk 
sr0              11:0    1    4G  0 rom  /run/media/root/Kylin-Server-10
nvme0n1         259:0    0  100G  0 disk 
├─nvme0n1p1     259:1    0    1G  0 part /boot
└─nvme0n1p2     259:2    0   99G  0 part 
  ├─klas-root   253:0    0 65.1G  0 lvm  /
  ├─klas-swap   253:1    0    2G  0 lvm  [SWAP]
  └─klas-backup 253:2    0 31.8G  0 lvm 

我们选择sdc磁盘

3)配置iSCSI服务端共享资源

# targetcli
targetcli shell version 2.1.54
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]
  o- vhost ...................................................................................... [Targets: 0]
  o- xen-pvscsi ................................................................................. [Targets: 0]
/> 

/backstores/block是iSCSI服务端配置共享设备的位置,将sdc加入到配置共享设备的“资源池”中,并将该文件重新命名为disk0

/backstores/block> create kyshare1 /dev/sdc
Created block storage object kyshare1 using /dev/sdc.
/backstores/block> ls
o- block ................................................................................ [Storage Objects: 1]
  o- kyshare1 .................................................... [/dev/sdc (20.0GiB) write-thru deactivated]
    o- alua ................................................................................. [ALUA Groups: 1]
      o- default_tg_pt_gp ..................................................... [ALUA state: Active/optimized]

4) 创建iSISI Target名称

进入/iscsi目录进行配置 

/> cd iscsi 
/iscsi> pwd
/iscsi
/iscsi> ls
o- iscsi ........................................................................................ [Targets: 0]
/iscsi> create iqn.2024-09.yunbee.com.kylinserver
Created target iqn.2024-09.yunbee.com.kylinserver.
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.2024-09.yunbee.com.kylinserver ............................................................ [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> 

5)配置kyshared1存储对象逻辑单元号LUN

/iscsi> cd iqn.2024-09.yunbee.com.kylinserver/tpg1/luns 
/iscsi/iqn.20...ver/tpg1/luns> ls
o- luns ............................................................................................ [LUNs: 0]
/iscsi/iqn.20...ver/tpg1/luns> create /backstores/block/kyshare1 
Created LUN 0.
/iscsi/iqn.20...ver/tpg1/luns> ls
o- luns ............................................................................................ [LUNs: 1]
  o- lun0 ..................................................... [block/kyshare1 (/dev/sdc) (default_tg_pt_gp)]
/iscsi/iqn.20...ver/tpg1/luns>  

6)配置访问控制列表

/iscsi/iqn.20...ver/tpg1/acls> cd /iscsi/iqn.2024-09.yunbee.com.kylinserver/tpg1/acls
/iscsi/iqn.20...ver/tpg1/acls> ls
o- acls ............................................................................................ [ACLs: 0]
/iscsi/iqn.20...ver/tpg1/acls> create iqn.2024-09.yunbee.com.kylinserver:client
Created Node ACL for iqn.2024-09.yunbee.com.kylinserver:client
Created mapped LUN 0.
/iscsi/iqn.20...ver/tpg1/acls> ls
o- acls ............................................................................................ [ACLs: 1]
  o- iqn.2024-09.yunbee.com.kylinserver:client .............................................. [Mapped LUNs: 1]
    o- mapped_lun0 ................................................................ [lun0 block/kyshare1 (rw)]
/iscsi/iqn.20...ver/tpg1/acls> 

iSCSI协议是通过客户端名称进行验证的。也就是说,用户在访问存储共享资源时不需要输入密码,只要iSCSI客户端的名称与服务端中设置的访问控制列表中某一名称条目一致即可。

7)设置iSCSI服务端的监听IP地址和端口号

/iscsi/iqn.20...ver/tpg1/acls> cd /iscsi/iqn.2024-09.yunbee.com.kylinserver/tpg1/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 192.168.2.136 3260
Using default IP port 3260
Created network portal 192.168.2.136:3260.
/iscsi/iqn.20.../tpg1/portals> ls
o- portals ...................................................................................... [Portals: 1]
  o- 192.168.2.136:3260 ................................................................................. [OK]
/iscsi/iqn.20.../tpg1/portals> 

8)退出保存

/iscsi/iqn.20.../tpg1/portals> exit
Global pref auto_save_on_exit=true
Configuration saved to /etc/target/saveconfig.json

5.2 客户端配置

1)安装iSCSI客户端服务程序initiator

# dnf install iscsi-initiator-utils

2)配置iSCSI客户端中的initiator名称文件

# vim /etc/iscsi/initiatorname.iscsi 
InitiatorName=iqn.2024-09.yunbee.com.kylinserver:client
--重启服务
# systemctl restart iscsid

3)扫描发现远程iSCSI服务端

# iscsiadm -m discovery -t st -p 192.168.2.136
192.168.2.136:3260,1 iqn.2024-09.yunbee.com.kylinserver

4)登录iSCSI服务端

# iscsiadm -m node -T iqn.2024-09.yunbee.com.kylinserver -p 192.168.2.136 --login
Logging in to [iface: default, target: iqn.2024-09.yunbee.com.kylinserver, portal: 192.168.2.136,3260]
Login to [iface: default, target: iqn.2024-09.yunbee.com.kylinserver, portal: 192.168.2.136,3260] successful.

5)检查客户端的存储

多了一块sdd磁盘

[root@db2 ~]# lsblk 
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda               8:0    0   20G  0 disk 
└─vg_01-lv01    253:3    0   25G  0 lvm  /data
sdb               8:16   0   20G  0 disk 
└─vg_01-lv01    253:3    0   25G  0 lvm  /data
sdc               8:32   0   20G  0 disk 
├─sdc1            8:33   0    1G  0 part 
├─sdc2            8:34   0    1G  0 part 
├─sdc3            8:35   0    1G  0 part 
├─sdc4            8:36   0    1G  0 part 
└─sdc5            8:37   0    1G  0 part 
sdd               8:48   0   20G  0 disk 
sr0              11:0    1    4G  0 rom  
nvme0n1         259:0    0  100G  0 disk 
├─nvme0n1p1     259:1    0    1G  0 part /boot
└─nvme0n1p2     259:2    0   99G  0 part 
  ├─klas-root   253:0    0 65.1G  0 lvm  /
  ├─klas-swap   253:1    0    2G  0 lvm  [SWAP]
  └─klas-backup 253:2    0 31.8G  0 lvm  

6)格式化挂载

# file /dev/sdd
/dev/sdd: block special (8/48)
# mkfs.xfs -f /dev/sdd 
meta-data=/dev/sdd               isize=512    agcount=4, agsize=1310720 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=1, sparse=1, rmapbt=0
         =                       reflink=1
data     =                       bsize=4096   blocks=5242880, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0, ftype=1
log      =internal log           bsize=4096   blocks=2560, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0


# mkdir /share1
# mount /dev/sdd /share1/
# df -Th
Filesystem             Type      Size  Used Avail Use% Mounted on
devtmpfs               devtmpfs  5.3G     0  5.3G   0% /dev
tmpfs                  tmpfs     5.3G     0  5.3G   0% /dev/shm
tmpfs                  tmpfs     5.3G   18M  5.3G   1% /run
tmpfs                  tmpfs     5.3G     0  5.3G   0% /sys/fs/cgroup
/dev/mapper/klas-root  xfs        66G  7.8G   58G  12% /
tmpfs                  tmpfs     5.3G  4.0K  5.3G   1% /tmp
/dev/nvme0n1p1         xfs      1014M  213M  802M  21% /boot
/dev/mapper/vg_01-lv01 ext4       25G   45M   24G   1% /data
tmpfs                  tmpfs     1.1G     0  1.1G   0% /run/user/992
tmpfs                  tmpfs     1.1G     0  1.1G   0% /run/user/0
tmpfs                  tmpfs     1.1G     0  1.1G   0% /run/user/993
192.168.2.136:/nfsfile nfs4       66G  8.9G   57G  14% /nfsfile
/dev/sdd               xfs        20G  176M   20G   1% /share1

六、iSCSI 的应用场景

  1. 存储虚拟化:通过iSCSI技术,可以将多台服务器的存储资源整合起来,形成一个大的存储池。
  2. 远程复制:可以在不同的地理位置之间复制数据,实现数据备份和灾难恢复。
  3. 云存储:在云计算环境中,iSCSI可以实现存储资源的动态分配和管理。
  4. 虚拟化环境:在虚拟化环境中,iSCSI可以为虚拟机提供统一的存储访问。

七、iSCSI 的优势与局限

优势

  1. 成本效益:使用现有的以太网基础设施,减少了专用存储网络的建设成本。
  2. 易于扩展:可以轻松地将存储资源扩展到整个网络,甚至跨越不同的地理位置。
  3. 标准化:基于标准的TCP/IP协议,与其他网络技术兼容性好。

局限

  1. 性能瓶颈:在高负载情况下,TCP/IP协议的开销可能会影响性能。
  2. 网络延迟:网络延迟会影响iSCSI的性能,特别是在远距离传输时。
  3. 安全性:虽然iSCSI支持多种认证机制,但网络传输的安全性仍然需要额外保障。

八、总结

iSCSI技术使得存储设备可以通过标准的IP网络进行访问,极大地提高了存储资源的利用率和灵活性。通过本文的介绍,您已经掌握了iSCSI的基本概念、配置方法以及在Linux系统中的应用场景。无论是构建存储虚拟化环境还是实现远程数据复制,iSCSI都是一个值得考虑的选择。通过合理的配置和管理,iSCSI可以为您的企业提供高效、可靠的存储解决方案。随着技术的不断发展,iSCSI将继续在存储领域发挥重要作用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值