一、iSCSI 简介
iSCSI 的全称是: Internet 小型计算机系统接口,是一个基于 TCP/IP 的协议,主要用于通过 IP 网络仿真 SCSI,从而为远程块存储设备提供数据传输和管理。说白了,就是通过网络由专门的服务器提供存储管理,以实现数据的远程储存,便于数据的集中管理,从而简化了数据复制、迁移和容灾。
但是出于性能的考虑,通过 iSCSI 进行的网络流量通常是未加密的,这就需要在应用服务器和存储服务器之前的布线和网络设备都是单独布线和单独使用,或者使用 VPN 进行网络数据传输。不要与其他网络进行混杂,以免造安全问题和成网络传输性能的损耗。
布线选择上,一般选用 10/40 Gb/s 以太网或者 8/10/16/20 Gb/s 光纤网络,以实现数据的高速传输。
二、常用的基本概念
| 名词 | 说明 |
|---|---|
| ACL | 访问权限控制列表,用来验证客户端启动器的访问,通常是客户端 iSCSI 启动器的 IQN 名称 |
| IQN | 用于标识单个 iSCSI 目标和启动器的唯一名称(全部小写) |
| WWN | 用于标识单个光纤通道端口和节点的唯一编号 |
| TARGET | iSCSI 服务器上的存储资源 |
| LUN | iSCSI 服务器上的块设备 |
| initiator(启动器) | 以软件或硬件实施的 iSCSI 客户端 |
| NODE | 单个 iSCSI 启动器或者目标 |
| TPG | 启动器或者目标上的单个 IP 连接地址 |
| Portal | 网络接口及端口 |
IQN 的格式为:
iqn.年份-月份.com|cn|net|org.域名:自定义标识,如:iqn.2018-05.com.test:desktop;其中的字母均应为小写,即使输入时包含大写,命令执行后,系统会自动转换成小写。
在 iSCSI 管理中,在根节点下有单独的 iscsi 项,其结构示例为:
o- iscsi ............................................... [Targets: 1] #iSCSI Target
| o- iqn.2018-05.com.example:server ..................... [TPGs: 1] #单个Target 显示为IQN
| o- tpg1 ................................ [no-gen-acls, no-auth] #TPG
| o- acls ........................................... [ACLs: 1] #ACL
| | o- iqn.2018-05.com.example.com:desktop ... [Mapped LUNs: 2] #启动器IQN
| | o- mapped_lun0 .................. [lun0 block/disk1 (rw)] #映射到启动器的Lun
| o- luns ........................................... [LUNs: 2] #LUN
| | o- lun0 ...... [block/disk1 (/dev/sdb1) (default_tg_pt_gp)] #已布署的Lun,其中的项目为 Backstore 中已添加的磁盘
| o- portals ..................................... [Portals: 1] #Portal
| o- 10.0.0.17:3260 .................................... [OK] #已布署的Portal
三、服务端的存储类型
可用于 iSCSI 的服务存储类型用四种:
| 类型 | 说明 |
|---|---|
| block | 块设备,磁盘驱动器、磁盘分区、逻辑卷、以及服务器上定义的任何 b 类型的设备文件 |
| fileio | 在服务器上生成的一个指定大小的文件,类似于虚拟机中的虚拟磁盘 |
| pscsi | 物理 SCSI,通常不使用 |
| ramdisk | 内存盘,其中存储的数据在服务器重启后将全部丢失 |
以上四种类型在 iSCSI 管理中都归到 backstores 项下,其结构示例为:
o- backstores ............................................................... [...]
| o- block ................................................... [Storage Objects: 2]
| | o- disk1 ........................... [/dev/sdb1 (0 bytes) write-thru activated]
| | | o- alua .................................................... [ALUA Groups: 1]
| | | o- default_tg_pt_gp ........................ [ALUA state: Active/optimized]
| o- fileio .................................................. [Storage Objects: 0]
| o- pscsi ................................................... [Storage Objects: 0]
| o- ramdisk ................................................. [Storage Objects: 0]
四、实验环境
- 准备二台虚拟机,系统安装
CentOS 7.5; - 二台虚拟机的网卡设置为
桥接; - 一台用做服务器: IP :
10.0.0.17, 修改/etc/hostname为Server,另外添加一个虚拟磁盘用来布署 iSCSI; - 一台用做客户端: 修改
/etc/hostname为Desktop。 - 安装后使用命令
yum -y update升级到最新; - 安装
epel数据源yum -y install epel-release
五、实验目标
- 在服务端( Server )上创建一个新的 iSCSI Target。此 Target 的 IQN 为:
iqn.2018-05.com.test:server - 服务端新创建的 Target 包含二个
1G的磁盘分区做为 LUN - 服务端新创建的 Target仅应由
initiatorname为iqn.2018-05.com.test:desktop的客户端使用 - 在客户端发现关登录在服务端已创建好的 Target
- 在客户端新磁盘上创建
ext4文件系统,并将其挂载到/iscsi1/iscsi2 - 在实验结束后在客户端上卸载服务端的 iSCSI Target
- 在服务端上删除相关设置
六、服务端安装
(一)、在第二块硬盘上创建二个新的 1G 的分区作为 Backstore
[root@Server ~]# fdisk /dev/sdb
完成结果如下:
命令(输入 m 获取帮助):p
磁盘 /dev/sdb:8589 MB, 8589934592 字节,16777216 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x6ab34c87
设备 Boot Start End Blocks Id System
/dev/sdb1 2048 2099199 1048576 83 Linux
/dev/sdb2 2099200 4196351 1048576 83 Linux
分区完成后,不需要进行格式化操作
强制更新磁盘分区:
[root@Server ~]# partprobe
(二)、安装 targetcli 软件包
[root@Server ~]# yum install -y targetcli
安装完成后设置target服务开机启动,并启动服务:
[root@Server ~]# systemctl enable target
[root@Server ~]# systemctl start target
(三)、创建新的 iSCSI Target,添加已创建的磁盘分区作为 Backstore, 并且仅限于 initiname 为 iqn.2018-05.com.test:desktop 的客户端使用
1、进入 targetcli 管理界面并列出现有项目:
[root@Server ~]# targetcli
Warning: Could not load preferences file /root/.targetcli/prefs.bin.
targetcli shell version 2.1.fb46
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]
2、添加已创建的二个磁盘分区到 Backstores 项下:
/> /backstores/block create disk1 /dev/sdb1
Created block storage object disk1 using /dev/sdb1.
/> /backstores/block create disk2 /dev/sdb2
Created block storage object disk2 using /dev/sdb2.
3、创建新的 Target:
/> /iscsi create iqn.2018-05.com.test:server
Created target iqn.2018-05.com.test:server.
Created TPG 1.
Global pref auto_add_default_portal=true
Created default portal listening on all IPs (0.0.0.0), port 3260.
4、在 TPG 项下,新建 ACL 设置 IQN 为iqn.2018-05.com.test:desktop的客户端使用:
/> /iscsi/iqn.2018-05.com.test:server/tpg1/acls create iqn.2018-05.com.test:desktop
Created Node ACL for iqn.2018-05.com.test:desktop
5、添加 Backstores 磁盘到 LUN 项下,系统将自动映射到 acls iqn.2018-05.com.test:desktop项下:
/> iscsi/iqn.2018-05.com.test:server/tpg1/luns create /backstores/block/disk1
Created LUN 0.
Created LUN 0->0 mapping in node ACL iqn.2018-05.com.test:desktop
/> iscsi/iqn.2018-05.com.test:server/tpg1/luns create /backstores/block/disk2
Created LUN 1.
Created LUN 1->1 mapping in node ACL iqn.2018-05.com.test:desktop
6、删除系统默认的 IP 和端口设置,添加本机 IP 和端口
必须先删除系统默认的
0.0.0.0:3260这个设置,否则无法添加新的 IP 和端口
/> iscsi/iqn.2018-05.com.test:server/tpg1/portals delete 0.0.0.0 3260
Deleted network portal 0.0.0.0:3260
/> iscsi/iqn.2018-05.com.test:server/tpg1/portals create 10.0.0.17 3260
Using default IP port 3260
Created network portal 10.0.0.17:3260.
7、列出已完成的配置,检查无误后保存并退出 targetcli :
/> ls
o- / .......................................................................... [...]
o- backstores ............................................................... [...]
| o- block ................................................... [Storage Objects: 2]
| | o- disk1 ........................... [/dev/sdb1 (0 bytes) write-thru activated]
| | | o- alua .................................................... [ALUA Groups: 1]
| | | o- default_tg_pt_gp ........................ [ALUA state: Active/optimized]
| | o- disk2 ........................... [/dev/sdb2 (0 bytes) write-thru activated]
| | o- alua .................................................... [ALUA Groups: 1]
| | o- default_tg_pt_gp ........................ [ALUA state: Active/optimized]
| o- fileio .................................................. [Storage Objects: 0]
| o- pscsi ................................................... [Storage Objects: 0]
| o- ramdisk ................................................. [Storage Objects: 0]
o- iscsi ............................................................. [Targets: 1]
| o- iqn.2018-05.com.test:server ........................................ [TPGs: 1]
| o- tpg1 ................................................ [no-gen-acls, no-auth]
| o- acls ........................................................... [ACLs: 1]
| | o- iqn.2018-05.com.test:desktop .......................... [Mapped LUNs: 2]
| | o- mapped_lun0 .................................. [lun0 block/disk1 (rw)]
| | o- mapped_lun1 .................................. [lun1 block/disk2 (rw)]
| o- luns ........................................................... [LUNs: 2]
| | o- lun0 ...................... [block/disk1 (/dev/sdb1) (default_tg_pt_gp)]
| | o- lun1 ...................... [block/disk2 (/dev/sdb2) (default_tg_pt_gp)]
| o- portals ..................................................... [Portals: 1]
| o- 10.0.0.17:3260 .................................................... [OK]
o- loopback .......................................................... [Targets: 0]
/> safeconfig
Command not found safeconfig
/> saveconfig
Configuration saved to /etc/target/saveconfig.json
/> exit
Global pref auto_save_on_exit=true
Last 10 configs saved in /etc/target/backup/.
Configuration saved to /etc/target/saveconfig.json
8、开启防火墙相应的端口,并重新加载配置
[root@Server ~]# firewall-cmd --permanent --add-port=3260/tcp
success
[root@Server ~]# firewall-cmd --reload
success
七、客户端安装
1、安装 iscsi-initiator-utils 软件包
[root@Desktop ~]# yum install -y iscsi-initiator-utils
2、编辑配置文件 /etc/iscsi/initiatorname.iscsi
[root@Desktop ~]# vim /etc/iscsi/initiatorname.iscsi
修改其内容为:
InitiatorName=iqn.2018-05.com.test:desktop
3、设置 iscsid 开机启动,并手动启动此服务
[root@Desktop ~]# systemctl enable iscsid
Created symlink from /etc/systemd/system/multi-user.target.wants/iscsid.service to /usr/lib/systemd/system/iscsid.service.
[root@Desktop ~]# systemctl start iscsid
4、发现服务端已设置好的 Target
[root@Desktop ~]# iscsiadm -m discovery -t st -p 10.0.0.17
10.0.0.17:3260,1 iqn.2018-05.com.test:server
验证客户端是否存储已发现的服务端 Target:
[root@Desktop ~]# ll -R /var/lib/iscsi/nodes/
/var/lib/iscsi/nodes/:
总用量 4
drw-------. 3 root root 4096 5月 23 09:38 iqn.2018-05.com.test:server
/var/lib/iscsi/nodes/iqn.2018-05.com.test:server:
总用量 4
drw-------. 2 root root 4096 5月 23 09:38 10.0.0.17,3260,1
/var/lib/iscsi/nodes/iqn.2018-05.com.test:server/10.0.0.17,3260,1:
总用量 4
-rw-------. 1 root root 2055 5月 23 09:38 default
5、登录服务端已设置好的 Target
[root@Desktop ~]# iscsiadm -m node -T iqn.2018-05.com.test:server -l
Logging in to [iface: default, target: iqn.2018-05.com.test:server, portal: 10.0.0.17,3260] (multiple)
Login to [iface: default, target: iqn.2018-05.com.test:server, portal: 10.0.0.17,3260] successful.
6、验证会话状态及相关的磁盘信息
[root@Desktop ~]# iscsiadm -m session -P 3 |grep Attached
Attached SCSI devices:
Attached scsi disk sdb State: running
Attached scsi disk sdc State: running
7、在新磁盘上创建分区及文件系统并挂载
- 在二个磁盘上各创建一个新分区,新分区独占整个磁盘,过程略过:
[root@Desktop ~]# fdisk /dev/sdb
[root@Desktop ~]# fdisk /dev/sdc
结果:
[root@Desktop ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 20G 0 disk
├─sda1 8:1 0 1G 0 part /boot
├─sda2 8:2 0 17G 0 part /
└─sda3 8:3 0 2G 0 part [SWAP]
sdb 8:16 0 1G 0 disk
└─sdb1 8:17 0 992M 0 part
sdc 8:32 0 1G 0 disk
└─sdc1 8:33 0 992M 0 part
sr0 11:0 1 1024M 0 rom
- 格式化磁盘分区:
[root@Desktop ~]# mkfs -t ext4 /dev/sdb1
[root@Desktop ~]# mkfs -t ext4 /dev/sdc1
- 新建挂载目录:
[root@Desktop ~]# mkdir /iscsi1
[root@Desktop ~]# mkdir /iscsi2
- 挂载分区并查看:
[root@Desktop ~]# mount /dev/sdb1 /iscsi1
[root@Desktop ~]# mount /dev/sdc1 /iscsi2
[root@Desktop ~]# df -h|grep /iscsi
/dev/sdb1 961M 2.5M 893M 1% /iscsi1
/dev/sdc1 961M 2.5M 893M 1% /iscsi2
8、持久挂载:
- 查看 UUID :
[root@Desktop ~]# blkid
/dev/sdb1: UUID="de837800-0e76-469b-abc6-b3815c89d452" TYPE="ext4"
/dev/sdc1: UUID="c715ff1e-37ed-498a-8c02-bb709c9cf355" TYPE="ext4"
- 编辑 /etc/fstab 添加如下二项:
UUID=de837800-0e76-469b-abc6-b3815c89d452 /iscsi1 ext4 _netdev 0 2
UUID=c715ff1e-37ed-498a-8c02-bb709c9cf355 /iscsi2 ext4 _netdev 0 2
- 挂载文件系统并验证
[root@Desktop ~]# umount /iscsi1
[root@Desktop ~]# umount /iscsi2
[root@Desktop ~]# mount -a
[root@Desktop ~]# df -h|grep /iscsi
/dev/sdb1 961M 2.5M 893M 1% /iscsi1
/dev/sdc1 961M 2.5M 893M 1% /iscsi2
由上述操作可以看出:在服务器为一个客户端添加二个LUN,会在客户端显示为二个磁盘驱动器,并不是容量为二个LUN容量的一个磁盘驱动器。因此在服务端为指定 iSCSI Target 添加多个LUN 并不能达到单个磁盘扩容的目的。
要想达到这一目的,可行的做法是,先在服务端的磁盘上新建 LVM , 然后将新建的 LV 加入到 Backstore 中,做为后备磁盘,供 Lun 使用。如果出现需要进行磁盘扩容的情况,只需要调整相应的 Backstore 中的 LV 分区即使。
有关 LVM 的相关操作,请参见本人博客中的相关内容:LVM实用指南
八、客户端卸载 iSCSI Target
出于种种目的,如:磁盘扩容、客户端不再使用 iSCSI 进行数据存储、客户端布署其他应用而不再使用原应用等等,就需要将已经挂载的 iSCSI Target 进行卸载,并出于信息安全的目的,删除已经保存的服务端的相关信息,这时就需要进行下面的操作。
要卸载已经挂载到客户端系统目录上的iSCSI Target,首先要确认当前分区没有被使用,避免出现数据丢失。
- 先在客户端上卸载已挂载的磁盘分区
[root@Desktop ~]# umount /iscsi1
[root@Desktop ~]# umount /iscsi2
[root@Desktop ~]# df -h |grep iscsi
如果在
/etc/fstab中进行了持久化挂载操作,还需要删除相关条目
- 在客户端系统中挂载安装的 iSCSI Target 磁盘
[root@Desktop ~]# iscsiadm -m node -T iqn.2018-05.com.test:server -u
Logging out of session [sid: 1, target: iqn.2018-05.com.test:server, portal: 10.0.0.17,3260]
Logout of [sid: 1, target: iqn.2018-05.com.test:server, portal: 10.0.0.17,3260] successful.
- 验证是否还存在 iSCSI Session
[root@Desktop ~]# iscsiadm -m session -P 3|grep Attached
iscsiadm: No active sessions.
- 查看是否还存在未挂载的磁盘
[root@Desktop ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 20G 0 disk
├─sda1 8:1 0 1G 0 part /boot
├─sda2 8:2 0 17G 0 part /
└─sda3 8:3 0 2G 0 part [SWAP]
sr0 11:0 1 1024M 0 rom
-删除已发现的 iSCSI 服务端信息并验证
[root@Desktop ~]# iscsiadm -m node -T iqn.2018-05.com.test:server -o delete
[root@Desktop ~]# ll /var/lib/iscsi/nodes/
总用量 0
到此就已经在客户端成功删除了 iSCSI Target
九、服务端删除 iSCSI Target 及 Backstores
- 前面对服务端的操作,都是添加相关设置,没有删除设置。这里介绍如何进行配置的删除;
- 下面的步骤是从完整的配置删除全部配置到初始化状态的操作。但大家也可以使用其中的一步或几步,删除配置中的某几个内容,而不是全部;
- 进行配置的完整删除,基本上就是正常添加配置的逆过程。之前在添加操作中,由系统自动添加的部分,如客户端 IQN 下的磁盘映射等,不需要手工删除,系统会根据已删除的项目自动进行删除。
1、进入 targetcli 并查看当前设置
[root@Server ~]# targetcli
targetcli shell version 2.1.fb46
Copyright 2011-2013 by Datera, Inc and others.
For help on commands, type 'help'.
/> ls
o- / .......................................................................... [...]
o- backstores ............................................................... [...]
| o- block ................................................... [Storage Objects: 2]
| | o- disk1 ........................... [/dev/sdb1 (0 bytes) write-thru activated]
| | | o- alua .................................................... [ALUA Groups: 1]
| | | o- default_tg_pt_gp ........................ [ALUA state: Active/optimized]
| | o- disk2 ........................... [/dev/sdb2 (0 bytes) write-thru activated]
| | o- alua .................................................... [ALUA Groups: 1]
| | o- default_tg_pt_gp ........................ [ALUA state: Active/optimized]
| o- fileio .................................................. [Storage Objects: 0]
| o- pscsi ................................................... [Storage Objects: 0]
| o- ramdisk ................................................. [Storage Objects: 0]
o- iscsi ............................................................. [Targets: 1]
| o- iqn.2018-05.com.test:server ........................................ [TPGs: 1]
| o- tpg1 ................................................ [no-gen-acls, no-auth]
| o- acls ........................................................... [ACLs: 1]
| | o- iqn.2018-05.com.test:desktop .......................... [Mapped LUNs: 2]
| | o- mapped_lun0 .................................. [lun0 block/disk1 (rw)]
| | o- mapped_lun1 .................................. [lun1 block/disk2 (rw)]
| o- luns ........................................................... [LUNs: 2]
| | o- lun0 ...................... [block/disk1 (/dev/sdb1) (default_tg_pt_gp)]
| | o- lun1 ...................... [block/disk2 (/dev/sdb2) (default_tg_pt_gp)]
| o- portals ..................................................... [Portals: 1]
| o- 10.0.0.17:3260 .................................................... [OK]
o- loopback .......................................................... [Targets: 0]
2、删除 portals 入口点 IP 和端口
/> /iscsi/iqn.2018-05.com.test:server/tpg1/portals/ delete 10.0.0.17 3260
Deleted network portal 10.0.0.17:3260
3、删除 luns 添加的 Backstore 磁盘
/> /iscsi/iqn.2018-05.com.test:server/tpg1/luns/ delete lun0
Deleted LUN 0.
/> /iscsi/iqn.2018-05.com.test:server/tpg1/luns/ delete lun1
Deleted LUN 1.
4、删除 acls 中客户端 IQN 的认证信息
/> /iscsi/iqn.2018-05.com.test:server/tpg1/acls/ delete iqn.2018-05.com.test:desktop
Deleted Node ACL iqn.2018-05.com.test:desktop.
5、删除 iSCSI Target
/> /iscsi/ delete iqn.2018-05.com.test:server
Deleted Target iqn.2018-05.com.test:server.
6、删除 Backstroes 中已加入的磁盘
/> /backstores/block/ delete disk1
Deleted storage object disk1.
/> /backstores/block/ delete disk2
Deleted storage object disk2.
7、查看结果:
/> 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]
8、保存配置并退出
/> safeconfig
Command not found safeconfig
/> saveconfig
Configuration saved to /etc/target/saveconfig.json
/> exit
Global pref auto_save_on_exit=true
Last 10 configs saved in /etc/target/backup/.
Configuration saved to /etc/target/saveconfig.json
所有的设置都已删除,恢复到初始配置状态。
本文提供了一篇关于iSCSI的详细教程,包括iSCSI协议简介、基本概念、服务端存储类型,以及在实验环境中设置iSCSI Target和客户端的步骤。教程覆盖了从创建Target、添加Backstore、设置ACL,到客户端发现、登录、挂载,直至卸载和删除服务端iSCSI Target和Backstores的全过程。
323

被折叠的 条评论
为什么被折叠?



