ISCSI共享存储搭建

参考:

https://www.jianshu.com/p/32ef947d3f61
https://blog.csdn.net/beeworkshop/article/details/114523270
https://www.cnblogs.com/pengdonglin137/p/17115545.html (主要参考)

环境:服务客户端均为Ubuntu 20.04.3 LTS

节点概览

服务端 客户端
10.0.0.10 10.0.0.11

一. 配置iSCSI服务器端(iSCSI Target)

1.安装软件包

1
2
3
4
5
6
7
8
9
10
# 测试软件源是否可达
apt-get update -y
# 更新所有软件包(可选)
apt-get upgrade -y
# 安装服务端软件
apt install tgt -y
# 查看软件安装后状态
systemctl start tgt
systemctl enable tgt
systemctl status tgt

image-20231008111510644

2. 配置

  • 配置iSCSI目标 首先,您需要在iSCSI服务器上创建LUN(逻辑单元号)设备。LUN是作为物理SCSI设备一部分的后端存储设备。映射到iSCSI Target的所有LUN实际上都已附加到客户端的操作系统。因此,启动器可以在iSCSI LUN上建立和管理文件系统。

iSCSI有两种命名格式:

  • 一种是iqn
  • 一种是EUI
  • EUI使用较少, 因为EUI命令不如iqn直观。

iqn的基本格式是:

1
2
3
4
5
6
# iqn基本格式
iqn.<YYYY-MM>.<reversed domain name>:<extra-name>
# 例如可以这样命名
iqn.2015-08.example.com:disk0ics
# 本文档中命名为
iqn.2021-03.bee.com:lun1

新建iscsi.conf文件定义LUN可以参考 /usr/share/doc/tgt/examples/targets.conf.example

image-20231008112101824

NOTE: 永久共享磁盘backing-store /dev/sdb写入配置文件实现永久共享时出现问题使用tgtadm --mode target --op show查看时共享磁盘未出现 此错误未解决 替代方案为使用命令行的方式指定磁盘sudo tgtadm --lld iscsi --mode logicalunit --op new --tid 1 --lun 1 -b /dev/sdb 但此种重启便失效

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# iscsi配置文件
vim /etc/tgt/conf.d/iscsi.conf 或 vim /etc/tgt/targets.conf
# ----------------分割线---------------------
# 定义LUN(逻辑单元号)的名称。
<target iqn.2021-03.bee.com:lun1>
# 定义了iSCSI Target服务器上存储设备的位置和名称(可以是物理磁盘或者LVM)
# 注意:使用的存储对象必须是新建的,而不能是在用的。
backing-store /dev/sdb # 此配置共享磁盘操作过程中未生效需要使用命令共享一个磁盘
# 定义iSCSI启动器的IP地址——ACL(即客户端地址)
initiator-address 10.0.0.11
# initiator-address 192.168.91.0/24
# 定义传入的用户名/密码 iscsi-user password
incominguser test01 123456 (本次未使用此配置)
# 定义目标将提供给启动器的用户名/密码 iscsi-target secretpass
outgoinguser test02 654321 (本次未使用此配置)
</target>
# -------------------------------------

上方配置通过命令实现如下(重启失效)

①. 创建target

1
2
3
4
5
6
7
8
9
# 创建target
# 参数
--lld iscsi 固定参数驱动iscsi
--mode target 模式target
--op new 操作new新创建
--tid 1 target id
--targetname ...target名称
# 执行创建
$ sudo tgtadm --lld iscsi --mode target --op new --tid 1 --targetname iqn.2021-03.bee.com:lun1

效果

image-20231008140836882

②. 绑定initiator name(允许访问的地址)

1
2
3
4
# 绑定initiator name(允许访问的地址)
sudo tgtadm --lld iscsi --mode target --op bind --tid 1 -I ALL
// 或
sudo tgtadm --lld iscsi --mode target --op bind --tid 1 -I 10.0.0.11

效果

image-20231008141008919

③. 新增逻辑单元(即创建共享磁盘)

  • note 使用命令共享磁盘(backing-store /dev/sdb
  • tid可以理解为target的id, lun可以理解成表示逻辑单元, 一个target下可以有多个逻辑单元.
  • 此种重启服务端会失效systemctl restart tgt
1
2
# 使用命令共享磁盘
sudo tgtadm --lld iscsi --mode logicalunit --op new --tid 1 --lun 1 -b /dev/sdb

效果

image-20231008141441946

④. 删除逻辑单元命令(共享磁盘)

1
2
# 删除逻辑单元命令
sudo tgtadm --lld iscsi --op delete --mode logicalunit --tid 1 --lun 1

3.测试配置文件可用性

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
34
35
36
37
38
39
40
41
42
43
44
45
# 测试可用性
systemctl restart tgt
tgtadm --mode target --op show
// 返回
Target 1: iqn.2021-03.bee.com:lun1
System information:
Driver: iscsi
State: ready
I_T nexus information:
I_T nexus: 1
Initiator: iqn.2021-03.bee.com:lun1.init1 alias: zznn
Connection: 0
IP Address: 10.0.0.11
LUN information:
LUN: 0
Type: controller
SCSI ID: IET 00010000
SCSI SN: beaf10
Size: 0 MB, Block size: 1
Online: Yes
Removable media: No
Prevent removal: No
Readonly: No
SWP: No
Thin-provisioning: No
Backing store type: null
Backing store path: None
Backing store flags:
LUN: 1
Type: disk
SCSI ID: IET 00010001
SCSI SN: beaf11
Size: 5369 MB, Block size: 512
Online: Yes
Removable media: No
Prevent removal: No
Readonly: No
SWP: No
Thin-provisioning: No
Backing store type: rdwr
Backing store path: /dev/sdb
Backing store flags:
Account information:
ACL information:
10.0.0.11

4.服务端开放3260端口

1
2
# 服务端开放3260端口
ufw allow 3260

二. 配置iSCSI客户端(iSCSI Initiator)

1. 安装软件

1
2
# 安装客户端软件
apt-get install open-iscsi -y

2. 配置

客户端发现服务端target(安装完open-iscsi之后就执行)

1
2
# 客户端发现服务端target
iscsiadm -m discovery -t st -p 10.0.0.10

image-20231008113526858

3. NOTE

  • 节点配置文件将存放于目录 /etc/iscsi/nodes/ 中,并且每个LUN都有一个对应的配置目录。
    比如:/etc/iscsi/nodes/iqn.2021-03.bee.com:iscsi.disk0/10.0.0.11,3260,1/default
  • 本机为:/etc/iscsi/nodes/iqn.2021-03.bee.com:lun1/10.0.0.10,3260,1/default
    在上述发现命令执行完毕后将在 /etc/iscsi/nodes/ 中自动生成指向iscsi targetIP的配置目录。
  • 如果要更新服务端target的配置需要将 /etc/iscsi/nodes/ 下的配置目录删除,然后再执行iscsiadm -m discovery … 发现命令,以生成新的配置。

image-20231008113809537

4. 添加iSCSI Target LUN名称

NOTE:

  • iqn.2021-03.bee.com:lun1 为服务端共享磁盘逻辑单元设定的名称
  • .init1此后缀可自定义
1
2
3
4
# 添加iSCSI Target LUN名称
# 注意InitiatorName只能有一个。主要用于标识Initiator,与target无关。
vim /etc/iscsi/initiatorname.iscsi
InitiatorName=iqn.2021-03.bee.com:lun1.init1

5.定义Initiator对应iscsi targetCHAP认证信息(可选)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 定义Initiator对应iscsi target的CHAP认证信息(可选)
vim /etc/iscsi/iscsid.conf
# ----------------------------
# 修改以下信息 (本次未使用此配置)
node.session.auth.authmethod = CHAP
node.session.auth.username = test01 # incominguser
node.session.auth.password = 123456 # incominguser
node.session.auth.username_in = test02 # outgoinguser
node.session.auth.password_in = 654321 # outgoinguser
node.startup = automatic # 开机自动登陆iscsi target(必选)

// 或通过命令修改
iscsiadm -m node -T iqn.2021-03.bee.com:lun1 -p 10.0.0.10:3260 --op update -n node.session.auth.authmethod -v CHAP
iscsiadm -m node -T iqn.2021-03.bee.com:lun1 -p 10.0.0.10:3260 --op update -n node.startup -v automatic

三. 测试结果

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# 这里会自动登陆iscsi target(更新配置时的出错考虑删除/etc/iscsi/nodes下的配置文件夹),完了使用iscsiadm -m node -o show 查看生成的配置。
systemctl restart open-iscsi iscsid

# 查看iSCSI Initiator工作状态
systemctl status open-iscsi
iscsiadm -m session -o show

# 发现iscsi target
iscsiadm -m discovery -t sendtargets -p 10.0.0.10
或者
iscsiadm -m node --login

# 登陆iscsi target
iscsiadm -m node -T iqn.2021-03.bee.com:lun1 -p 10.0.0.10 -l

# 登出iscsi target
iscsiadm -m node -T iqn.2021-03.bee.com:lun1 -p 10.0.0.10 -u

# 查看LUN设备
fdisk -l
cat /proc/partitions
lsblk
# 查看UUID
blkid

效果:

image-20231008122717770

image-20231008141853135

结语fighting!