iscsi远程磁盘块设备挂载使用

373 阅读7分钟

研发环境,当服务器本地磁盘存储不足时,可通过挂载远程iscsi 设备作为块设备,为服务器做存储扩容

准备

假设环境已经安装好了iscs initiator 客户端工具 查看客户端配置: cat /etc/iscsi/initiatorname.iscsi

操作记录

1.查看当前环境的iscsi 连接信息:


iscsiadm -m node

返回:
10.253.167.1:3260,1 iqn.2023-08.com.xxx.iscsi.414.1009dfab2e90e56d

iscsiadm -m session

返回:
tcp: [1] 10.253.167.3:3260,1 iqn.2023-08.com.xxx.iscsi.414.1009dfab2e90e56d (non-flash)

当环境里面已经有iscsi 链接时,
/var/lib/iscsi/nodes/ 目录下会缓存记录连接信息,这样下次关机重启后能自动连接
/var/lib/iscsi/send_targets/ 目录会缓存已经发现的target 目标信息
/var/lib/iscsi/ifaces  

2. 重新发现连接目标:

iscsiadm -m discovery -t st  -p 10.253.167.3

-m discovery  //侦测target
-t sendtargets  //通过iscsi协议返回targets 信息
-p IP:port  //指定target的IP和port,不写port的话,默认为3260
(st是sendtargets的缩写, -p 后跟着server地址,端口不写默认3260)

会返回全部可用的target (一个target目标中,可能有多个lun):
10.253.167.3:3260,1 iqn.2023-08.com.xxx.iscsi.414.1009dfab2e90e56d


完成discovery之后, 执行 iscsiadm -m node
可以发现有新的记录生成, 对应的本地持久化文件咋/var/lib/iscsi/nodes下

3.指定target和iscsi server,执行target login/logout:

iscsiadm -m node -T iqn.2023-08.com.xsky:ceasphere-sds.iscsi.414.1009dfab2e90e56d -p 10.253.167.3:3260  -l     
(-T 跟着discovery 发现的目标target, -l 是--login 的缩写)

执行完login, 再执行iscsiadm -m session 发现已经有连接记录,此时环境里全部可用的关联到10.253.167.3特定target会做一次登录。


iscsiadm -m node -T iqn.2023-08.com.xsky:ceasphere-sds.iscsi.414.1009dfab2e90e56d -p 10.253.167.3:3260  -u
(-T 跟着discovery 发现的目标target, -u 是--logout 的缩写)
logout后,iscsiadm -m session 可以发现对应的服务器连接session已经不存在了

4.不指定target,仅指定iscsi server node 做login /logout

login: 
iscsiadm -m node  -p 10.253.167.3:3260  -l  

执行完login, 再执行iscsiadm -m session 发现已经有连接记录,此时环境里全部可用的关联到10.253.167.3的全部target都会做一次登录

logout:
iscsiadm -m node  -p 10.253.167.3:3260  -u

执行了logout后, iscsiadm -m session发现连接session都没有了,
但是iscsiadm -m node还是可以看到缓存的连接配置信息,如果彻底清空,就清空/var/lib/iscsi/nodes/目录下的文件

当iscsiadm -m node 发现无记录后,需要重新第 discover 发现target 

5.不指定node,target, 对全部缓存node,作login / logout:

iscsiadm -m node  -l 
iscsiadm -m node  -L all


iscsiadm -m node -u
iscsiadm -m node  -U all


也可以是使用 -U all  / -L all
The correct command is iscsiadm -m node --loginall=all. This command logs in to all available iSCSI targets. The -m node option specifies that we are performing operations on iSCSI nodes. The --loginall=all option specifies that we want to log in to all available targets.

The iscsiadm -m node -U command logs out of all available iSCSI targets. The -m node option specifies that we are performing operations on iSCSI nodes. The -U option specifies that we want to log out of all targets.


6.查看iscsi 磁盘挂载情况


ll /dev/disk/by-path/
total 0
lrwxrwxrwx. 1 root root  9 Aug 30 05:09 ip-10.253.167.3:3260-iscsi-iqn.2023-08.com.xsky:ceasphere-sds.iscsi.414.1009dfab2e90e56d-lun-0 -> ../../sde
lrwxrwxrwx. 1 root root  9 Aug 30 05:09 ip-10.253.167.3:3260-iscsi-iqn.2023-08.com.xsky:ceasphere-sds.iscsi.414.1009dfab2e90e56d-lun-1 -> ../../sdf
lrwxrwxrwx. 1 root root  9 Aug 30 05:09 ip-10.253.167.3:3260-iscsi-iqn.2023-08.com.xsky:ceasphere-sds.iscsi.414.1009dfab2e90e56d-lun-2 -> ../../sdg

这里实验的target下包含3个lun,所以login后, by-path目录下多了3个块设备软连接,分别链接到/dev/sde, /dev/sdf, /dev/sdg , 在未做多路径的情况下,可以直接使用这些块设备

同时可以通过/sys/block目录查看更多块关联信息:
ll  /sys/block/sde
lrwxrwxrwx. 1 root root 0 Aug 30 05:09 /sys/block/sde -> ../devices/platform/host33/session16/target33:0:0/33:0:0:0/block/sde

realpath  /sys/block/sde
/sys/devices/platform/host33/session16/target33:0:0/33:0:0:0/block/sde


假设开启了多路径multipath服务,可以通过
ll /dev/dm-xx/slaves 查看实际关联的块设备

7.挂载的块设备扩容

先执行lscsi 查看到块设备的id 信息,这里假设对/dev/sde做扩容:
lsscsi
[0:0:0:0]    disk    VMware   Virtual disk     2.0   /dev/sda
[0:0:3:0]    disk    VMware   Virtual disk     2.0   /dev/sdb
[1:0:0:0]    disk    ATA      VMware Virtual I 0001  /dev/sdd
[1:0:1:0]    disk    ATA      VMware Virtual I 0001  /dev/sdc
[3:0:0:0]    cd/dvd  NECVMWar VMware SATA CD00 1.00  /dev/sr0
[33:0:0:0]   disk    CECLOUD  CeaStor          1.0   /dev/sde
[33:0:0:1]   disk    CECLOUD  CeaStor          1.0   /dev/sdf
[33:0:0:2]   disk    CECLOUD  CeaStor          1.0   /dev/sdg

出发块设备rescan:
echo "---" > /sys/class/scsi_device/33\:0\:0\:0/device/rescan


8.为iscsi 数据连接指定网卡

设想一个场景,一个节点上有两个网卡,一个用于管理网,一个用于业务网(防止业务网的流量过大影响管理服务,所以进行流量隔离)

假设我们想让挂载的iscsi指定使用业务网网卡去执行数据读写传输,可以借助iscsi 的iface能力来做。

8.1 查看当前session使用的iface 信息

iscsiadm -m session -P 1

8.2 iface操作

创建一个iface 对象 iscsi_ens34
iscsiadm -m iface -I iscsi_ens34 --op=new

iface 对象关联到实际网卡ens34:
iscsiadm -m iface -I iscsi_ens34 --op=update -n iface.net_ifacename -v ens34

此时执行: iscsiadm  -m iface 发现多了一条记录,对应本地持久化在如下目录/var/lib/iscsi/ifaces/:
ll /var/lib/iscsi/ifaces/
-rw-------. 1 root root 468 Aug 30 03:27 iscsi_ens34

指定网卡进行discovery:
iscsiadm  -m discovery -t st -p 10.253.167.1 -I iscsi_ens34
完成后,会缓存对应的信息:
/var/lib/iscsi/nodes/iqn.2023-08.com.xsky:ceasphere-sds.iscsi.414.1009dfab2e90e56d/10.253.167.1,3260,1/iscsi_ens34

注意:
  1. 假设此时再次换网卡执行:
  iscsiadm  -m discovery -t st -p 10.253.167.1 -I default

  /var/lib/iscsi/nodes/iqn.2023-08.com.xsky:ceasphere-sds.iscsi.414.1009dfab2e90e56d/10.253.167.1,3260,1/iscsi_ens34 目录会被删除
  接着多出一条 /var/lib/iscsi/nodes/iqn.2023-08.com.xsky:ceasphere-sds.iscsi.414.1009dfab2e90e56d/10.253.167.1,3260,1/default
 仅当iscsi_ens34 之前有login过时,则原目录不会被删除,即缓存了两个网卡到目标的连接路线
 
 2. 如果每次都保持多个网口出口,可以指定多个-I:
 
 iscsiadm  -m discovery -t st -p 10.253.167.1 -I default -I iscsi_ens34

返回多个连接:
10.253.167.1:3260,1 iqn.2023-08.com.xsky:ceasphere-sds.iscsi.414.1009dfab2e90e56d
10.253.167.1:3260,1 iqn.2023-08.com.xsky:ceasphere-sds.iscsi.414.1009dfab2e90e56d



指定iface,使用特定网卡login: 
iscsiadm -m node -T iqn.2023-08.com.xsky:ceasphere-sds.iscsi.414.1009dfab2e90e56d -p 10.253.167.3:3260 -I iscsi_ens34  -l     

返回结果,可以看到提示是使用对应的iface进行登录:
Logging in to [iface: iscsi_ens34, target: iqn.2023-08.com.xsky:ceasphere-sds.iscsi.414.1009dfab2e90e56d, portal: 10.253.167.3,3260]
Login to [iface: iscsi_ens34, target: iqn.2023-08.com.xsky:ceasphere-sds.iscsi.414.1009dfab2e90e56d, portal: 10.253.167.3,3260] successful.

image.png

9.重新扫描以及删除不可用node

参考:access.redhat.com/documentati…

image.png image.png

fio测试记录:

顺序读:
 fio -filename=/dev/dm-1 -name=test1 -ioengine=libaio -direct=1 -blocksize=4k -runtime=120 -rw=read -iodepth=32 -numjobs=1 -size=10G


 read: IOPS=103k, BW=403MiB/s (423MB/s)(1024MiB/2541msec)
 read: IOPS=103k, BW=402MiB/s (422MB/s)(10.0GiB/25448msec)

fio -filename=/dev/sdd -name=test1 -ioengine=libaio -direct=1 -blocksize=4k -runtime=120 -rw=read -iodepth=32 -numjobs=1 -size=10G

 read: IOPS=110k, BW=430MiB/s (451MB/s)(10.0GiB/23831msec)  sdd

随机读:
 fio -filename=/dev/dm-1 -name=test1 -ioengine=libaio -direct=1 -blocksize=4k -runtime=120 -rw=randread -iodepth=32 -numjobs=1 -size=10G
 read: IOPS=105k, BW=411MiB/s (431MB/s)(1024MiB/2492msec)
 read: IOPS=104k, BW=407MiB/s (427MB/s)(10.0GiB/25134msec)

  fio -filename=/dev/sdd -name=test1 -ioengine=libaio -direct=1 -blocksize=4k -runtime=120 -rw=randread -iodepth=32 -numjobs=1 -size=10G
  read: IOPS=111k, BW=433MiB/s (454MB/s)(10.0GiB/23635msec)

顺序写:

 fio -filename=/dev/dm-1 -name=test1 -ioengine=libaio -direct=1 -blocksize=4k -runtime=120 -rw=write -iodepth=32 -numjobs=1 -size=10G
 write: IOPS=57.6k, BW=225MiB/s (236MB/s)(1024MiB/4550msec); 0 zone resets
 write: IOPS=58.5k, BW=228MiB/s (239MB/s)(10.0GiB/44838msec); 0 zone resets

  fio -filename=/dev/sdd -name=test1 -ioengine=libaio -direct=1 -blocksize=4k -runtime=120 -rw=write -iodepth=32 -numjobs=1 -size=10G
    write: IOPS=55.3k, BW=216MiB/s (227MB/s)(10.0GiB/47401msec); 0 zone resets


随机写:
 fio -filename=/dev/dm-1 -name=test1 -ioengine=libaio -direct=1 -blocksize=4k -runtime=120 -rw=randwrite -iodepth=32 -numjobs=1 -size=10G
 write: IOPS=74.3k, BW=290MiB/s (304MB/s)(1024MiB/3530msec); 0 zone resets
 write: IOPS=64.5k, BW=252MiB/s (264MB/s)(10.0GiB/40667msec); 0 zone resets



 fio -filename=/dev/sdd -name=test1 -ioengine=libaio -direct=1 -blocksize=4k -runtime=120 -rw=randwrite -iodepth=32 -numjobs=1 -size=10G
   write: IOPS=63.0k, BW=246MiB/s (258MB/s)(10.0GiB/41579msec); 0 zone resets

参考链接:

iscsiadm命令说明:linux.die.net/man/8/iscsi…

redhat官网文档: access.redhat.com/documentati…

阿里云博客: developer.aliyun.com/article/435…