转载于https://www.linuxprobe.com/basic-learning-17.html
配置iSCSI服务端
iSCSI技术在工作形式上分为服务端(target)与客户端(initiator)。iSCSI服务端即用于存放硬盘存储资源的服务器,它作为前面创建的RAID磁盘阵列(这里使用的RAID是之前的文章搭建的RAID5)的存储端,能够为用户提供可用的存储资源。iSCSI客户端则是用户使用的软件,用于访问远程服务端的存储资源。下面按照下面的地址来配置iSCSI服务端和客户端所用的IP地址。
iSCSI服务端和客户端的操作系统以及IP地址
主机名称 操作系统 IP地址
iSCSI服务端 deepin 192.168.3.222
iSCSI客户端 centos 7 192.168.3.130
第1步:在 deepin 系统中安装iSCSI服务端程序,用户需要做的是配置好软件仓库后安装iSCSI服务端的交换式配置工具,通过交互式的配置过程来完成对参数的设定,相比于直接修改配置文件则又方便又安全。通过使用apt命令安装:
apt install targetcli-fb
第2步:配置iSCSI服务端共享资源。targetcli是用于管理iSCSI服务端存储资源的专用配置命令,它能够提供类似于fdisk命令的交互式配置功能,将iSCSI共享资源的配置内容抽象成“目录”的形式,我们只需将各类配置信息填入到相应的“目录”中即可。这里的难点主要在于认识每个“参数目录”的作用。当把配置参数正确地填写到“目录”中后,iSCSI服务端也可以提供共享资源服务了。
root@yeye:~# targetcli
Warning: Could not load preferences file /root/.targetcli/prefs.bin.
targetcli shell version 2.1.fb48
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]
o- vhost ............................................................................................................ [Targets: 0]
o- xen-pvscsi ....................................................................................................... [Targets: 0]
/>
/backstores/block 是iSCSI服务端配置共享设备的位置。我们需要把刚刚创建的RAID 5磁盘阵列 md5 文件加入到配置共享设备的“资源池”中,并将该文件重新命名为 disk5,这样用户就不会知道是由服务器中的哪块硬盘来提供共享存储资源,而只会看到一个名为 disk5 的存储设备。结果如下:
/> cd /backstores/block
/backstores/block> create disk5 /dev/md5
Created block storage object disk5 using /dev/md5.
/backstores/block> cd /
/> ls
o- / ......................................................................................................................... [...]
o- backstores .............................................................................................................. [...]
| o- block .................................................................................................. [Storage Objects: 1]
| | o- disk5 ......................................................................... [/dev/md5 (15.0GiB) write-thru deactivated]
| | 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: 0]
o- loopback ......................................................................................................... [Targets: 0]
o- vhost ............................................................................................................ [Targets: 0]
o- xen-pvscsi ....................................................................................................... [Targets: 0]
/>
第3步:创建iSCSI target名称及配置共享资源。iSCSI target名称是由系统自动生成的,这是一串用于描述共享资源的唯一字符串。稍后用户在扫描iSCSI服务端时即可看到这个字符串,因此我们不需要记住它。也可自定义 target名称。结果如下:
(请注意如果使用iSCSI自动生成的名称中,最后一个 “ . ”为句号,不是名称中的一部分。)
/> cd /iscsi
/iscsi> ls
o- iscsi .............................................................................................................. [Targets: 0]
/iscsi> create iqn.2020-06.com.test:server
Created target iqn.2020-06.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.
/iscsi> ls
o- iscsi .............................................................................................................. [Targets: 1]
o- iqn.2020-06.com.test:server ......................................................................................... [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]
/iscsi>
在配置自定义或者配置系统自动生成这个 target 名称后,还会在/iscsi参数目录中创建一个与其字符串同名的新“目录”用来存放共享资源。我们需要把前面加入到iSCSI共享资源池中的硬盘设备添加到这个新目录中,这样用户在登录iSCSI服务端后,即可默认使用这硬盘设备提供的共享存储资源了。
/iscsi> cd iqn.2020-06.com.test:server/tpg1/luns
/iscsi/iqn.20...ver/tpg1/luns> create /b
/backstores/block/disk5 /bin/ /boot/
/iscsi/iqn.20...ver/tpg1/luns> create /backstores/block/disk5
Created LUN 0.
/iscsi/iqn.20...ver/tpg1/luns> ls
o- luns .................................................................................................................. [LUNs: 1]
o- lun0 .............................................................................. [block/disk5 (/dev/md5) (default_tg_pt_gp)]
/iscsi/iqn.20...ver/tpg1/luns>
第4步:设置访问控制列表(ACL)。iSCSI协议是通过客户端名称进行验证的,也就是说,用户在访问存储共享资源时不需要输入密码,只要iSCSI客户端的名称与服务端中设置的访问控制列表中某一名称条目一致即可,因此需要在iSCSI服务端的配置文件中写入一串能够验证用户信息的名称。acls参数目录用于存放能够访问iSCSI服务端共享存储资源的客户端名称。推荐在刚刚系统生成的iSCSI target后面追加上类似于:client的参数,这样既能保证客户端的名称具有唯一性,又非常便于管理和阅读:
/iscsi/iqn.20...ver/tpg1/luns> cd /iscsi/iqn.2020-06.com.test:server/tpg1/acls
/iscsi/iqn.20...ver/tpg1/acls> create iqn.2020-06.com.test:server-client
Created Node ACL for iqn.2020-06.com.test:server-client
Created mapped LUN 0.
/iscsi/iqn.20...ver/tpg1/acls>
第5步:设置iSCSI服务端的监听IP地址和端口号。位于生产环境中的服务器上可能有多块网卡,配置文件中默认是允许所有网卡提供iSCSI服务,如果您认为这有些许不安全,可以手动删除:
以下是默认的配置
/iscsi/iqn.20...ver/tpg1/acls> cd /iscsi/iqn.2020-06.com.test:server/tpg1/portals/
/iscsi/iqn.20.../tpg1/portals> ls
o- portals ............................................................................................................ [Portals: 1]
o- 0.0.0.0:3260 ............................................................................................................. [OK]
/iscsi/iqn.20.../tpg1/portals>
以下是设置指定的监听IP和端口
/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.3.222
Using default IP port 3260
Created network portal 192.168.3.222:3260.
/iscsi/iqn.20.../tpg1/portals>
第6步:在参数文件配置妥当后,浏览刚刚配置的信息,确保上述提到的“目录”都已经填写正确的内容。在确认信息无误后输入 saveconfig 保存然后输入 exit 命令来退出配置。注意,千万不要习惯性地按Ctrl + C组合键结束进程,这样不会保存配置文件。
这里要退出到 / 目录下才能使用saveconfig保存,直接使用exit也会自动保存。
/iscsi/iqn.20.../tpg1/portals> cd /
/> saveconfig
Configuration saved to /etc/rtslib-fb-target/saveconfig.json
/> exit
Global pref auto_save_on_exit=true
Last 10 configs saved in /etc/rtslib-fb-target/backup.
Configuration saved to /etc/rtslib-fb-target/saveconfig.json
如果有启用防火墙,这需要防火墙放行iSCSI服务或3260/tcp端口号。
ISCSI服务端的配置到这里就基本配置好了:下面汇总操作方便查看
root@yeye:~# apt install targetcli-fb
root@yeye:~# targetcli
/> cd /backstores/block
/backstores/block> create disk5 /dev/md5
/> cd /iscsi
/iscsi> create iqn.2020-06.com.test:server
/iscsi> cd iqn.2020-06.com.test:server/tpg1/luns
/iscsi/iqn.20...ver/tpg1/luns> create /backstores/block/disk5
/iscsi/iqn.20...ver/tpg1/luns> cd /iscsi/iqn.2020-06.com.test:server/tpg1/acls
/iscsi/iqn.20...ver/tpg1/acls> create iqn.2020-06.com.test:server-client
/iscsi/iqn.20...ver/tpg1/acls> cd /iscsi/iqn.2020-06.com.test:server/tpg1/portals/
/iscsi/iqn.20.../tpg1/portals> delete 0.0.0.0 3260 <==这一步可以没有需求可以不需要
/iscsi/iqn.20.../tpg1/portals> create 192.168.3.222 <==这一步可以没有需求可以不需要
/iscsi/iqn.20.../tpg1/portals> cd /
/> saveconfig
/> exit
配置Linux客户端
按照 先发现,再登录,最后挂载并使用的操作顺序,容易记忆。
操作步骤如下:
yum install iscsi-initiator-utils <==如果这里是类debain发行版怎么软件名为 open-iscsi
echo "InitiatorName=iqn.2020-06.com.test:server-client" > /etc/iscsi/initiatorname.iscsi <===这里把之前服务端配置的客户端验证信息填入配置文件
systemctl restart iscsid
systemctl enable iscsid
iscsiadm -m discovery -t st -p 192.168.3.222 (iscsiadm是用于管理、查询、插入、更新或删除iSCSI数据库配置文件的命令行工具,用户需要先使用这个工具扫描发现远程iSCSI服务端,然后查看找到的服务端上有哪些可用的共享存储资源。其中,“-m discovery”参数的目的是扫描并发现可用的存储资源,“-t st”参数为执行扫描操作的类型,“-p 192.168.3.222”参数为iSCSI服务端的IP地址)
iscsiadm -m node -T iqn.2020-06.com.test:server -p 192.168.3.222:3260 --login (其中,“-m node”参数为将客户端所在主机作为一台节点服务器,“-T”参数为要使用的存储资源(大家可以直接复制前面命令中扫描发现的结果,以免录入错误),“-p 192.168.3.222”参数依然为对方iSCSI服务端的IP地址。最后使用“--login”或“-l”参数进行登录验证。)
到这里就成功登录iscsi服务端,下面在iSCSI客户端成功登录之后,会在客户端主机上多出一块名为/dev/sd*的设备文件。udev服务在命名硬盘名称时,与硬盘插槽是没有关系的。接下来对对硬盘进行分区,格式化,挂载。
如果外加这个设备文件容量不大,可以不必进行fdisk分区,而是直接格式化并挂载使用。
[root@docker ~]# mkfs.ext4 /dev/sdb <==我这里是硬盘名为sdb,在不同情况下名字可能不同
[root@docker ~]# mkdir /iscsi
[root@docker ~]# mount
[root@docker ~]# df -h
文件系统 容量 已用 可用 已用% 挂载点
devtmpfs 475M 0 475M 0% /dev
tmpfs 487M 0 487M 0% /dev/shm
tmpfs 487M 7.7M 479M 2% /run
tmpfs 487M 0 487M 0% /sys/fs/cgroup
/dev/mapper/centos-root 17G 4.3G 13G 26% /
/dev/sda1 1014M 137M 878M 14% /boot
tmpfs 98M 0 98M 0% /run/user/0
/dev/sdb 15G 41M 14G 1% /iscsi
/dev/sdb /iscsi/
这里可以看到挂载的硬盘了
注意:由于udev服务是按照系统识别硬盘设备的顺序来命名硬盘设备的,当客户端主机同时使用多个远程存储资源时,如果下一次识别远程设备的顺序发生了变化,则客户端挂载目录中的文件也将随之混乱。为了防止发生这样的问题,我们应该在/etc/fstab配置文件中使用设备的UUID唯一标识符进行挂载,这样,不论远程设备资源的识别顺序再怎么变化,系统也能正确找到设备所对应的目录。
还要注意:由于/dev/sdb是一块网络存储设备,而iSCSI协议是基于TCP/IP网络传输数据的,因此必须在/etc/fstab配置文件中添加上“_netdev”参数,表示当系统联网后再进行挂载操作,以免系统开机时间过长或开机失败
[root@docker ~]# blkid /dev/sdb
/dev/sdb: UUID="991e996d-cec6-4b88-8c4c-ba5ab3187871" TYPE="ext4"
[root@docker ~]# echo "991e996d-cec6-4b88-8c4c-ba5ab3187871 /iscsi ext4 defaults,_netdev 0 0" >> /etc/fstab
[root@docker ~]# cat /etc/fstab
#
# /etc/fstab
# Created by anaconda on Fri Sep 11 03:22:17 2020
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/centos-root / xfs defaults 0 0
UUID=6c00d553-a161-44aa-a25d-4a84cd1848b9 /boot xfs defaults 0 0
/dev/mapper/centos-swap swap swap defaults 0 0
991e996d-cec6-4b88-8c4c-ba5ab3187871 /iscsi ext4 defaults,_netdev 0 0
如果不再需要使用iSCSI共享设备资源了,可以用iscsiadm命令的“-u”参数将其设备卸载:
注意:先umount卸载硬盘,在使用iscsiadm命令卸载
[root@docker ~]# umount /iscsi
[root@docker ~]# iscsiadm -m node -T iqn.2020-06.com.test:server -p 192.168.3.222 -u
Logging out of session [sid: 13, target: iqn.2020-06.com.test:server, portal: 192.168.3.222,3260]
Logout of [sid: 13, target: iqn.2020-06.com.test:server, portal: 192.168.3.222,3260] successful.
这种获取iSCSI远程存储的方法依赖的是iSCSI Initiator软件程序,由Initiator软件将以太网卡虚拟成了iSCSI卡,进而接受数据报文,实现主机与iSCSI存储设备之间基于TCP/IP协议的传输功能。这种方式仅需主机与网络即可实现,因此成本是最低的,但是iSCSI和TCP/IP协议报文需要消耗客户端自身的CPU计算性能,还是有一定的额外开销,一般是建议在低I/O或低带宽性能要求的环境中使用软件模拟方式。
如果在后续的生产环境中需要进行大量的远程数据存储,建议自行配备iSCSI HBA硬件卡设备,HBA全称即Host Bus Adapter。安装到iSCSI服务器上,从而实现iSCSI服务器与交换机之间、iSCSI服务器与客户端之间的高效数据传输。与Initiator软件模拟相比,iSCSI HBA硬件卡设备不需要消耗CPU计算性能,专用的设备对于iSCSI的支持也会更好。
-------------------------------------我是分割线--------------------------------------------------
补充内容:以文件的形式建立iSCSI存储
实验环境:两台deepin虚拟机
在deepin1操作
创建2G大小文件
root@yyy-PC:~# dd if=/dev/zero of=/root/test-iscsi-file bs=1M count=2048
记录了2048+0 的读入
记录了2048+0 的写出
2147483648 bytes (2.1 GB, 2.0 GiB) copied, 2.81308 s, 763 MB/s
配置target共享LUN块
targetcli #进入交互界面
/backstores/fileio create mydisk2 /iscsifile
iscsi/ create iqn.2020-04.com.deepinfile
iscsi/iqn.2020-04.com.deepinfile/tpg1/acls create iqn.2020-04.com.uosfile:client
iscsi/iqn.2020-04.com.uosfile/tpg1/luns create /backstores/fileio/mydisk2
saveconfig
exit
在deepin2操作
配置iscsi客户端ISCSIinitiator名称
vim /etc/iscsi/initiatorname.iscsi #配置ISCSIInitiator名称
InitiatorName=iqn.2020-04.com.uos-client
InitiatorName=iqn.2020-04.com.uosfile:client
vim /etc/iscsi/iscsid.conf
node.session.timeo.replacement_timeout = 5 #修改,链路重试5秒不能连接则宣告断开
重启服务
systemctl restart iscsi
systemctl restart iscsid
systemctl enable iscsid
发现并登录,以及建立连接
iscsiadm --mode discoverydb --type sendtargets --portal 192.168.200.201 --discover
iscsiadm --mode node --name iqn.2020-06.com.uosfile --portal 192.168.200.201:3260 --login
设置在开机后自动登录Target
用vi编辑配置文件
vim /etc/iscsi/iscsi.conf
#node.startup = automatic去掉前面的注释符#
node.startup = manual在前面加上注释符#
查询是否连接上了iscsi硬盘
fdisk -l #发现/dev/sdc
fdisk /dev/sdc #分区/dev/sdc1
mkfs.ext4 /dev/sdc1
设置开机挂载
mkdir /mnt/mydisk2
blkid #找出/dev/sdc1的UUID
编辑 vim /etc/fstab
UUID="c56a71c0-d17c-4ff2-80f6-8be43b1663ea" /mnt/mydisk2 ext4 defaults,_netdev 0 0
然后 mount -a 或者 reboot #重启自动挂载
查看session连接是否正常
iscsiadm -m session -P[123] #查看iscsi信息,,大写P,session:会话管理。
iscsi存储的访问控制管理
target 服务器端配置:在deepin1上,配置验证用户名和密码
targetcli
root@yyy-PC:~# targetcli
targetcli shell version 2.1.fb48
Copyright 2011-2013 by Datera, Inc and others.
For help on commands, type 'help'.
/> cd iscsi/iqn.2020-09.com.deepin:server/tpg1/acls/iqn.2020-09.com.deepin:client/
/iscsi/iqn.20...om.deepin:client> set auth userid=test
Parameter userid is now 'test'.
/iscsi/iqn.20...om.deepin:client> set auth password=test
Parameter password is now 'test'.
/iscsi/iqn.20...om.deepin:client> cd /
/> ls
/> exit
iscsi 客户端配置:在deepin2上,配置客户端ACL名
iscsi开关顺序
关机顺序
deepin2先关 deepin1再关
开机顺序
deepin1先开 deepin2再开
iscsi的删除
在deepin2上
卸载挂载
umount /mnt/mydisk1
umount /mnt/mydisk2
删除fstab相关内容 vim /etc/fstab
iscsiadm --mode node --name iqn.2020-06.com.deepinfile:client --portal 192.168.200.201:3260 --logout
iscsiadm --mode node --name iqn.2020-06.com.deepinfile --portal 192.168.200.201:3260 --logout
iscsiadm -m node -T iqn.2020-06.com.deepinfile:client -p 192.168.200.201-o delete
iscsiadm -m node -T iqn.2020-06.com.deepinfile -p 192.168.200.201 -o delete
-d:指定debug级别,有0-8个级别。
-L和-U:分别是登录和登出target,可以指定ALL表示所有发现的target,或者manual指定。
-l和-u:分别是登录和登出某一个target。
-T:用于-l或-u时指定要登录和登出的targetname。
-o:对discoverydb做某些操作,可用的操作有new/delete/update/show,一般只会用到delete和show。
在这里插入代码片
fdisk -l #已经看不到/dev/sdb1和/dev/sdc1了
或者
vim /etc/iscsi/iscsid.conf
node.startup = manual #修改,今后将不会自动挂载