目录

iSCSI学习分享

概述

Open-iSCSI 是做网络分布式存储的常用的软件,搞清楚一些基础概念对安装和运维分布式网络存储是很有帮助的。

配置文件

1
2
3
4
5
6
7
8
# lsmod | grep iscsi -i
scsi_transport_iscsi    99909  1
yum install iscsi-initiator-utils
# 这个文件包含host的initiator IQN,在很多企业级存储上都要用到这个,否则无法访问存储上的资源。
# cat /etc/iscsi/initiatorname.iscsi 
InitiatorName=iqn.1994-05.com.redhat:88e28dc61d9
# 这个文件包含open-iscsi的配置,下面会提到一些个人经常遇到的一些设置
cat /etc/iscsi/iscsid.conf

iscsiadm

iscsiadm 使用基本分3个步骤: 发现(discovery),登录(login),扫描(rescan)。关于 iscsiadm 的使用问题,请通过 man iscsiadm 参考手册是最方便的。其中 -m 是经常会出现的选项。

1
2
3
 -m, --mode op
        specify the mode. op must be one of discovery, discoverydb, node, fw, host iface or session.
        If no other options are specified: for discovery, discoverydb and node, all of their respective records are displayed; for session, all active sessions and connections are displayed; for fw, all boot firmware values are displayed; for host, all iSCSI hosts are displayed; and for iface, all ifaces setup in /var/lib/iscsi/ifaces are displayed.
1
2
3
4
5
6
# iscsiadm -m session
tcp: [1] 10.244.4.5:3260,1 iqn.2019-10.io.longhorn:pvc-6aa192bc-1b55-44f2-83b7-0645463afbf4 (non-flash)
# iscsiadm -m discovery
10.244.4.5:3260 via sendtargets
# iscsiadm -m node
10.244.4.5:3260,1 iqn.2019-10.io.longhorn:pvc-6aa192bc-1b55-44f2-83b7-0645463afbf4

在使用 iscsiadm 的过程中有两个名词要注意下:

  1. target portal: 格式一般是IP:PORT,比如192.168.183.129:3260
  2. target IQN: 指服务器端的iqn-打头的一串字符iqn.2001-04.com.example:storage.lun2

Discovery

discovery 只要知道 storage 上的 target portal 就可以发现所有暴露的 portal 和 iqn。

1
2
3
4
5
iscsiadm -m discovery -t sendtargets -p 192.168.183.129
192.168.183.129:3260,1 iqn.2001-04.com.example:storage.lun2
192.168.183.129:3260,1 iqn.2001-04.com.example:storage.lun1
# raw use
iscsiadm -m discovery -t sendtargets -p 10.254.4.212

Login

在第一步中发现的 target 都会保存在本地的数据库中,可以用 iscsiadm -m node 看到。

如果你要登录第一步中所有的 portal,可以直接用下面的命令一键登录。

1
2
3
4
5
# iscsiadm -m node --login
Logging in to [iface: default, target: iqn.2001-04.com.example:storage.lun2, portal: 192.168.183.129,3260] (multiple)
Logging in to [iface: default, target: iqn.2001-04.com.example:storage.lun1, portal: 192.168.183.129,3260] (multiple)
Login to [iface: default, target: iqn.2001-04.com.example:storage.lun2, portal: 192.168.183.129,3260] successful.
Login to [iface: default, target: iqn.2001-04.com.example:storage.lun1, portal: 192.168.183.129,3260] successful.

登录特定的 target。

1
2
3
4
5
# iscsiadm -m node -T iqn.2001-04.com.example:storage.lun1 -p 192.168.183.129:3260 --login
Logging in to [iface: default, target: iqn.2001-04.com.example:storage.lun1, portal: 192.168.183.129,3260] (multiple)
Login to [iface: default, target: iqn.2001-04.com.example:storage.lun1, portal: 192.168.183.129,3260] successful.
# raw use测试
iscsiadm -m node -T iqn.2019-10.io.longhorn:pvc-f5de2608-ce4e-4cc6-8aca-dbdab19fdeba -p 10.254.4.212:3260 --login

查看登录的 session。

1
2
# iscsiadm -m session
tcp: [3] 192.168.183.129:3260,1 iqn.2001-04.com.example:storage.lun1 (non-flash)

注意,在默认配置下,登录的 session,节点重启是不会再次登录的,如果要想登录的 session 自动登录,一种方式是,前面提到的设置 node.start = automatic

设置 session 自动登录。

1
2
3
4
# iscsiadm -m node -T iqn.2001-04.com.example:storage.lun2 -p 192.168.183.129:3260 --op update -n node.startup -v automatic
# 查看session的设置
# iscsiadm -m node -T iqn.2001-04.com.example:storage.lun2 -p 192.168.183.129:3260 | grep node.startup
node.startup = automatic

Rescan

一旦登录成功,所有分配给当前主机的LUN都可以看到了,但有时,新分配的LUN,LUN的信息发生变化后,主要不能立即看到,这样就需要rescan了 --rescan

扫描所有登录的target/session:

1
2
# iscsiadm -m session --rescan
Rescanning session [sid: 3, target: iqn.2001-04.com.example:storage.lun1, portal: 192.168.183.129,3260]

也可以这样,效果跟上面的 session 是一样的:

1
2
# iscsiadm -m node --rescan
Rescanning session [sid: 3, target: iqn.2001-04.com.example:storage.lun1, portal: 192.168.183.129,3260]

扫描单个 session:

1
2
3
4
# 可以通过session id
# iscsiadm -m session
tcp: [3] 192.168.183.129:3260,1 iqn.2001-04.com.example:storage.lun1 (non-flash)
tcp: [4] 192.168.183.129:3260,1 iqn.2001-04.com.example:storage.lun2 (non-flash)

上面的 [3], [4]都是session id,直接使用即可:

1
2
# iscsiadm -m session --sid 3 --rescan
Rescanning session [sid: 3, target: iqn.2001-04.com.example:storage.lun1, portal: 192.168.183.129,3260]

试了下,不可以通过 target 和 iqn 登录,不知道是 bug 还是参数问题:

1
2
3
4
# sudo iscsiadm -m node -T iqn.2001-04.com.example:storage.lun1 -p 192.168.183.129:3260 --rescan
Rescanning session [sid: 3, target: iqn.2001-04.com.example:storage.lun1, portal: 192.168.183.129,3260]
iscsiadm: invalid error code 65280
iscsiadm: Could not execute operation on all sessions: (null)

Disk

iSCSI 连接的 disk 可以通过查询路径 /dev/disk/by-path/ 下的链接:

1
2
3
4
5
6
7
8
9
# ls -l /dev/disk/by-path/
total 0
lrwxrwxrwx 1 root root  9 Jun  3 03:01 ip-192.168.183.129:3260-iscsi-iqn.2001-04.com.example:storage.lun1-lun-1 -> ../../sdc
lrwxrwxrwx 1 root root  9 Jun  3 03:08 ip-192.168.183.129:3260-iscsi-iqn.2001-04.com.example:storage.lun2-lun-2 -> ../../sdd
lrwxrwxrwx 1 root root  9 Jun  3 01:26 pci-0000:00:10.0-scsi-0:0:0:0 -> ../../sda
lrwxrwxrwx 1 root root 10 Jun  3 01:26 pci-0000:00:10.0-scsi-0:0:0:0-part1 -> ../../sda1
lrwxrwxrwx 1 root root 10 Jun  3 01:26 pci-0000:00:10.0-scsi-0:0:0:0-part2 -> ../../sda2
lrwxrwxrwx 1 root root 10 Jun  3 01:26 pci-0000:00:10.0-scsi-0:0:0:0-part5 -> ../../sda5
lrwxrwxrwx 1 root root  9 Jun  3 01:26 pci-0000:00:10.0-scsi-0:0:1:0 -> ../../sdb

可以看到,在我的测试中,连接的两个 target 分别暴露了一个 LUN 给 host,lun1 和 lun2,对应的 host 上的两个 device 是 /dev/sdc/dev/sdd

也可以通过 fdisk -l 查看disk:

 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
# fdisk -l
Disk /dev/sdb: 20 GiB, 21474836480 bytes, 41943040 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk /dev/sda: 40 GiB, 42949672960 bytes, 83886080 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0xcaf795e0

Device     Boot    Start      End  Sectors  Size Id Type
/dev/sda1  *        2048 80383999 80381952 38.3G 83 Linux
/dev/sda2       80386046 83884031  3497986  1.7G  5 Extended
/dev/sda5       80386048 83884031  3497984  1.7G 82 Linux swap / Solaris

Disk /dev/sdc: 1 GiB, 1073741824 bytes, 2097152 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk /dev/mapper/149455400000000003592265eae69d00a6e8560cd2833744e: 1 GiB, 1073741824 bytes, 2097152 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk /dev/sdd: 1 GiB, 1073741824 bytes, 2097152 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk /dev/mapper/149455400000000005277c9d1f32625c43968336de76fc205: 1 GiB, 1073741824 bytes, 2097152 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes

需要注意的是/dev/mapper/***是我安装了multipath-tools后生成的device

参考资料

  1. 记一次Longhorn组件重启导致pv无法正常挂载
  2. Longhorn企业级云原生容器分布式存储-备份与恢复
警告
本文最后更新于 2022年9月10日,文中内容可能已过时,请谨慎参考。