RH358访问基于块的网络存储–提供iSCSI存储
本章节介绍如何提供iSCSI存储。做为对基于块的网络存储的了解,还是需要进行学习。
RH358专栏地址:https://blog.csdn.net/qq_41765918/category_11532281.html
文章目录
1. 描述 iSCSI
iSCSI是基于TCP/IP的协议,用于在基于IP的网络上发送SCSl命令。它允许您将基于块的存储设备通过网络从服务器连接到客户端,这些设备的作用类似于普通硬盘驱动器或固态驱动器。作为存储区域网络(SAN)协议,iSCSI可以帮助您整合本地或远程数据中心中的存储设备。
由于共享网络上的带宽拥塞会导致性能下降,所以应该在电缆上实现独立于标准LAN流量的iSCSI。通常,iSCSI与专用的万兆以太网或更好的网络配对,以最大限度地提高性能。
SAN通信通常不加密,以最大限度地提高性能。从物理服务器到存储的电缆通常封闭在数据中心中,理想情况下不直接连接到LAN网络。为了广域网的安全,iSCSI管理员可以使用IPsec,一种保护IP网络流量的协议套件。
iSCSI关键术语的定义
iSCSl协议工作在 C/S 配置中。客户端系统配置启动器软件发送SCSI命令到远程服务器存储目标。在客户端系统上,iSCSI目标显示为本地SCSI磁盘,就像连接SCSI电缆或光纤通道交换结构的设备一样。
当使用iSCSI时,会提及一些术语,包括:
Initiator
一个iSCSl客户端,通常作为软件可用。还可以购买iSCSI主机总线适配器(hba)形式的硬件启动器。启动器必须有唯一的名称(参见IQN)。
Target
iSCSI服务器上的iSCSI存储资源。目标必须有唯一的名称(参见IQN)。每个目标提供一个或多个块设备,或逻辑单元。在大多数情况下,目标只提供一个设备。单个服务器可以提供多个targets。
IQN (iSCSI Qualified Name)
用于识别initiators和targets的唯一全球名称。IQN的格式如下:
iqn.YYYY-MM.com.reversed.domain:name_string
**YYYY-MM:**年和月。(例如,2020-06 表示 2020 年 6月。)
com.reversed.domain:域名反写。例如:www.example.com 写为 com.example.www
name_string:命名空间中的唯一字符串 (YYYYMM.com.reversed.domain,用于识别管理的特定目标,有时可省略)
Portal
每个 target 具有一个或多个 portal,即 initiator 可用来访问目标的 IP:Port 对
LUN(逻辑单元号)
表示由目标提供的块设备。每个 target提供一个或多个 LUN
ACL(访问控制列表)
验证 initiator 的 IQN 确定其能否访问 target
TPG(目标门户组)
TPG 是 target 的完整配置,包括Portal、LUN 和 ACL。几乎所有 target 都使用一个 TPG,但高级配置有时可能会定义多个 TPG
2. 准备系统以提供 iSCSI Target
-
在 iSCSI 服务器上,targetcli 命令既提供命令行,也提供一个交互式 shell,可用来创建、删除和配置 iSCSI target
-
targetcli 命令将 target 整理为层级树,为在该树中进行导航,工具使用了熟悉的 Linux 命令,如 cd、ls 和 pwd
-
它的shell还支持tab补全。
# 在iSCSl服务器上,首先安装targetcli。
[root@host ~]# yum install targetcli
# 启用target服务以在引导期间激活目标。
[root@host ~]# systemctl enable --now target
# 如果使用默认的防火墙配置,请打开iscsi-target服务以允许启动器访问目标器。这允许客户端访问端口3260/TCP。
[root@host ~]# firewall-cmd --permanent --add-service=iscsi-target
[root@host ~]# firewall-cmd --reload
3. 配置iSCSI target
当不带任何选项运行targetcli时,命令将进入交互模式。在下面的示例中,ls命令显示当前布局。
[root@host ~]# targetcli
targetcli shell version 2.1.fb49
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]
/>
下面的过程演示如何创建新target。
l 创建后端存储(或backstore)对象。有几种后备存储器类型:
block:服务器中的块设备,如磁盘、磁盘分区或逻辑卷
fileio:本地文件系统中的普通文件。targetcli 使用该文件作为磁盘镜像(不推荐)
pscsi:物理 SCSI 设备,透传到连接到服务器的物理 SCSI 设备
ramdisk:内存中的磁盘设备,存储不会持久
要使用targetcli声明后端存储,请使用create命令。该命令的行为取决于在配置树中的当前位置。
例如,要为/dev/vdb存储设备创建基于块的后端存储,运行targetcli,切换到目录/backstores/block/,然后运行create命令。
/> cd /backstores/block
/backstores/block> create myblock1 /dev/vdb
Created block storage object myblock1 using /dev/vdb.
# 作为替代方法,您还可以在命令前面加上伪目录的路径。
/> /backstores/block create myblock1 /dev/vdb
Created block storage object myblock1 using /dev/vdb.
在这个位置中,create命令接受两个参数: 后端存储的名称和块设备的路径。
- 为目标创建IQN。在/iscsi伪目录中,create命令创建一个IQN,使用选择的IQN名称作为其第一个参数
/> cd /iscsi
/iscsi> create iqn.2014-06.com.example:disk1
Created target iqn.2014-06.com.example:disk1.
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.2014-06.com.example:disk1 ............................... [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]
注意:ls 命令在树中显示新的 IQN。targetcli 将该 IQN 的所有参数都分组到 /iscsi/iqn.2014-06.com.example:disk1 伪目录下。此外,create 会创建⼀个默认门户,该门户侦听所有网卡上的3260 端口
- 创建LUN作为存储存储。这将为该门户上的特定存储设备设置SCSl地址。
在新目标IQN的伪目录下,在其目标门户组(通常为tpg1)的伪目录中,更改为lun伪目录。create命令将创建一个LUN,并以备份存储的路径作为参数来使用该LUN。
/> cd /iscsi/iqn.2014-06.com.example:disk1/tpg1/luns
/iscsi/iqn.20...sk1/tpg1/luns> create /backstores/block/myblock1
Created LUN 0.
- 创建acl,允许客户端启动器访问目标器。更改目标TPG中的acl伪目录,并运行create命令。
在 RHEL 上,initiator 的 IQN 存储在/etc/iscsi/initiatorname.iscsi 中
/> cd /iscsi/iqn.2014-06.com.example:disk1/tpg1/acls
/iscsi/iqn.20...sk1/tpg1/acls> create iqn.1994-05.com.redhat:b3d05c75ec7
Created Node ACL for iqn.1994-05.com.redhat:b3d05c75ec7
Created mapped LUN 0.
- 默认门户侦听iSCSl服务器上的所有网络接口。如果希望门户只侦听特定接口,请删除默认门户,然后创建一个新的门户。delete和create命令都以接口和端口的IP地址作为参数。
/> cd /iscsi/iqn.2014-06.com.example:disk1/tpg1/portals/
/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.0.10 3260
Using default IP port 3260
Created network portal 192.168.0.10:3260.
- 保存配置。退出targetcli shell时,将保存在/etc/target/saveconfig.json文件中。
/> exit
Global pref auto_save_on_exit=true
Configuration saved to /etc/target/saveconfig.json
[root@host ~]#
当systemd在引导时启动target服务时,它使用该文件来配置目标。
4. 命令行模式下管理target
可以使用targetcli命令通过命令行模式执行一系列子命令。下面以targetcli创建后端存储对象、IQN、LUN、ACL和portal为例进行说明。此方法对于脚本目标配置很有用。
[root@host ~]# targetcli /backstores/block create myblock1 /dev/vdb
Created block storage object myblock1 using /dev/vdb.
[root@host ~]# targetcli /iscsi create iqn.2014-06.com.example:disk1
Created target iqn.2014-06.com.example:disk1.
Created TPG 1.
Global pref auto_add_default_portal=true
Created default portal listening on all IPs (0.0.0.0), port 3260.
[root@host ~]# targetcli /iscsi/iqn.2014-06.com.example:disk1/tpg1/luns \
> create /backstores/block/myblock1
Created LUN 0.
[root@host ~]# targetcli /iscsi/iqn.2014-06.com.example:disk1/tpg1/acls \
> create iqn.1994-05.com.redhat:b3d05c75ec7
Created Node ACL for iqn.1994-05.com.redhat:b3d05c75ec7
Created mapped LUN 0.
[root@host ~]# targetcli /iscsi/iqn.2014-06.com.example:disk1/tpg1/portals \
> delete 0.0.0.0 3260
Deleted network portal 0.0.0.0:3260
[root@host ~]# targetcli /iscsi/iqn.2014-06.com.example:disk1/tpg1/portals \
> create 192.168.0.10 3260
Using default IP port 3260
Created network portal 172.25.250.10:3260.
[root@host ~]# targetcli saveconfig
Configuration saved to /etc/target/saveconfig.json
**警告:**targetcli的交互式使用不同,命令行模式不会自动将配置保存在/etc/target/saveconfig中。您必须显式地运行saveconfig子命令来保存配置。
5. 课本练习
[student@workstation ~]$ lab iscsi-target start
这个命令确保serverd上有第二块磁盘可用。将使用iSCSI将该磁盘从serverd提供给客户端
1. 识别服务器上的第二个磁盘。
[root@serverd ~]# lsblk --fs
NAME FSTYPE LABEL UUID MOUNTPOINT
vda
└─vda1 xfs f7614c41-2835-4125-bb13-50772dc2f30c /
vdb
# 注意,vdb磁盘没有分区,也没有文件系统。
2. 将服务器准备为iSCSI目标服务器。
为此,安装目标配置实用程序,启动目标服务,然后打开防火墙端口
[root@serverd ~]# yum -y install targetcli
[root@serverd ~]# systemctl enable --now target
[root@serverd ~]# firewall-cmd --permanent --add-service=iscsi-target
success
[root@serverd ~]# firewall-cmd --reload
success
3. 使用targetcli命令将/dev/vdb块设备声明为名为serverd.disk1的后端存储。
[root@serverd ~]# targetcli
Warning: Could not load preferences file /root/.targetcli/prefs.bin.
targetcli shell version 2.1.fb49
Copyright 2011-2013 by Datera, Inc and others.
For help on commands, type 'help'.
/> cd /backstores/block
/backstores/block> create serverd.disk1 /dev/vdb
Created block storage object serverd.disk1 using /dev/vdb.
4. 为目标创建一个唯一的IQN。
/backstores/block> cd /iscsi
/iscsi> create iqn.2014-06.com.example:serverd
Created target iqn.2014-06.com.example:serverd.
Created TPG 1.
Global pref auto_add_default_portal=true
Created default portal listening on all IPs (0.0.0.0), port 3260.
5. 创建目标器提供的LUN。使用serverd.Disk1用于后端存储。
/iscsi> cd /iscsi/iqn.2014-06.com.example:serverd/tpg1/luns
/iscsi/iqn.20...erd/tpg1/luns> create /backstores/block/serverd.disk1
Created LUN 0.
6. 在服务器上创建允许启动器使用的ACL。
/iscsi/iqn.20...erd/tpg1/luns> cd ../acls
/iscsi/iqn.20...erd/tpg1/acls> create iqn.2014-06.com.example:servera
Created Node ACL for iqn.2014-06.com.example:servera
Created mapped LUN 0.
7. 删除默认门户,然后创建一个门户,该门户只监听主网络接口172.25.250.13上的端口3260。
/iscsi/iqn.20...erd/tpg1/acls> cd ../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 172.25.250.13 3260
Using default IP port 3260
Created network portal 172.25.250.13:3260.
/iscsi/iqn.20.../tpg1/portals> ls
o- portals ..................................................... [Portals: 1]
o- 172.25.250.13:3260 ................................................ [OK]
8. 列出验证工作的目标配置。
/iscsi/iqn.20.../tpg1/portals> ls /
/iscsi/iqn.20.../tpg1/portals> exit
Global pref auto_save_on_exit=true
Configuration saved to /etc/target/saveconfig.json
完成实验
[student@workstation ~]$ lab iscsi-target finish
总结
- 介绍iSCSI。
- 介绍如何部署和配置iSCSI target。
- 介绍如何在命令行模式下管理target。
- 若喜欢金鱼哥的文章,顺手点个赞。也可点个关注,因为后续会不断上干货。