傲渊山岳 发表于 2024-6-15 01:40:08

网络驱动器装备:ISCSI服务器

使用ISCSI服务摆设网络存储

主机名IPISCSI服务端192.168.200.10ISCSI客户端192.168.200.20Windows客户端192.168.200.30 # 修改主机名
# hostnamectl set-hostname iscsi-server
# bash
#
# hostnamectl set-hostname iscsi-client
# bash
#
ISCSI技术介绍

iSCSI(Internet Small Computer System Interface)是一种将SCSI(Small Computer System Interface)存储协议运行在TCP/IP网络上的技术。它通过使用IP网络来传输SCSI命令和数据,并将存储装备的逻辑单位(LUN)暴露给远程主机,使其能够远程访问和使用存储资源。
架构: iSCSI 架构由以下组件构成:


[*]iSCSI Target(ISCSI服务端):存储资源提供者,通过将存储装备映射为逻辑单位(LUN),并在网络上以iSCSI协议提供服务。
[*]iSCSI Initiator(ISCSI客户端):远程主机或客户端,使用iSCSI协议毗连到iSCSI Target,并通过发送SCSI命令和吸收数据来访问存储资源。
传输: iSCSI 使用 TCP/IP 协议作为底层传输协议,使用 IP 网络传输SCSI命令和数据。它使用 iSCSI Initiator 向 iSCSI Target 发送SCSI 命令,并将响应和数据通过网络传输回 Initiator。
设置和管理: iSCSI 须要设置 iSCSI Initiator 和 iSCSI Target 来创建毗连并传输数据。 Initiator 须要指定目的的 IP 地址和端标语,以及要访问的 LUN。 Target 须要设置相应的存储资源,并设置适当的访问控制和身份验证机制。
功能和优势:


[*]远程存储访问:iSCSI 提供了远程主机访问存储资源的本领,使得远程装备可以像访问当地存储一样使用远程存储。
[*]存储共享:多个远程主机可以通过 iSCSI 毗连到同一个 iSCSI Target,实现存储资源的共享和协同访问。
[*]机动性和可扩展性:iSCSI 技术基于 TCP/IP 网络,具有广泛的支持和可扩展性。可以通过现有的网络底子设施实现存储访问,并可以轻松扩展存储容量和性能。
[*]本钱效益:相对于传统的专用存储网络(如光纤通道),iSCSI 提供了更低的摆设和维护本钱。
iSCSI 技术须要在网络中传输存储数据,因此网络性能和带宽是关键因素。
创建RAID磁盘整列

既然要使用ISCSI存储技术为远程用户提供共享存储资源,首先要保障用于存放资源的服务器的稳定性与可用性,否则一旦在使用过程中出现故障,则维护的难度相较于当地硬盘装备要更加复杂、困难。
首先给虚拟机添加4块硬盘,用于创建RAID5磁盘阵列和备份盘
https://img-blog.csdnimg.cn/img_convert/67d7dd3332a464f01ed4407842e85935.png
#lsblk
NAME          MAJ:MIN RMSIZE RO TYPE MOUNTPOINTS
sr0            11:0    18.9G0 rom/run/media/root/RHEL-9-2-0-BaseOS-x86_64
nvme0n1       259:0    0   50G0 disk
├─nvme0n1p1   259:1    0600M0 part /boot/efi
├─nvme0n1p2   259:2    0    1G0 part /boot
└─nvme0n1p3   259:3    0 48.4G0 part
├─rhel-root 253:0    0 44.5G0 lvm/
└─rhel-swap 253:1    03.9G0 lvm
nvme0n2       259:4    0   20G0 disk
nvme0n3       259:5    0   20G0 disk
nvme0n4       259:6    0   20G0 disk
nvme0n5       259:7    0   20G0 disk
#mdadm -Cv /dev/md0 -l 5 -n 3 -x 1 /dev/nvme0n{2..5}
mdadm: layout defaults to left-symmetric
mdadm: layout defaults to left-symmetric
mdadm: chunk size defaults to 512K
mdadm: size set to 20954112K
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.
# mdadm -D /dev/md0
/dev/md0:
         Version : 1.2
   Creation Time : Sun Apr7 18:30:39 2024
      Raid Level : raid5
      Array Size : 41908224 (39.97 GiB 42.91 GB)
   Used Dev Size : 20954112 (19.98 GiB 21.46 GB)
      Raid Devices : 3
   Total Devices : 4
       Persistence : Superblock is persistent

       Update Time : Sun Apr7 18:32:24 2024
             State : clean
    Active Devices : 3
   Working Devices : 4
    Failed Devices : 0
   Spare Devices : 1

            Layout : left-symmetric
      Chunk Size : 512K

Consistency Policy : resync

            Name : localhost.localdomain:0(local to host localhost.localdomain)
            UUID : 4fe66abc:dc653251:28374699:803cfb22
            Events : 18

    Number   Major   Minor   RaidDevice State
       0   259      4      0      active sync   /dev/nvme0n2
       1   259      5      1      active sync   /dev/nvme0n3
       4   259      6      2      active sync   /dev/nvme0n4

       3   259      7      -      spare   /dev/nvme0n5
设置ISCSI服务端

ISCSI技术在工作形式上分为服务器(target)与客户端(initiator)。
ISCSI服务端用于存放硬盘存储资源的服务器,它作为前面创建的RAID磁盘整列的存储端,能够为用户提供可用的存储资源
ISCSI客户端则是用户使用的软件,用于访问远程服务端的存储资源
第一步:在RHEL8/centos 8系统中,默认已经安装了ISCSI服务端程序,用户只用安装ISCSI服务端的交换设置工具就可以了
#yum install -y targetcli
第二步:设置ISCSI服务端共享资源
targetcli是用于管理iSCSI服务端存储资源的专用设置命令,它能够提供类似于 fisk 命令的交互式设置功能,将iSCSI 共享资源的设置内容抽象成“目录”的形式,我们只需将各类设置信息填入到相应的“目录”中即可。
重要在于熟悉每个“参数目录”的作用。当把设置参数正确地填写到“目录”中后,iSCSI服务端也就可以提供共享资源服务了。
在执行 targetcli 命令后就能看到交互式的设置界面了。在该界面中允许使用许多 Linux命令,比如使用ls查看目录参数的结构,使用cd切换到不同的目录中。
常用的targetcli命令和其功能的详解
命令作用ls 列出指定路径下的目的和/或目录cd 进入指定的路径(目的或目录)pwd打印当前路径bookmarks action 执行与书签相干的操纵create name dev 创建一个新的设置。name参数指定了设置的名称,dev参数指定了装备delete name删除指定的设置。name参数指定了要删除的设置exit退出当前会话或程序get 获取指定组或参数的信息refresh刷新当前状态或视图set 设置指定组或参数的值status表现当前状态信息   # targetcli
Warning: Could not load preferences file /root/.targetcli/prefs.bin.
targetcli shell version 2.1.53
Copyright 2011-2013 by Datera, Inc and others.
For help on commands, type ‘help’.
/> ls
o- / … […]
o- backstores … […]
| o- block …
| o- fileio …
| o- pscsi …
| o- ramdisk …
o- iscsi …
o- loopback …


[*]/:根目录,包罗其他目录和命令的子目录
[*]backstores:用于存储对象的目录

[*]block:块装备范例的存储对象列表
[*]fileio:文件IO范例的存储对象列表
[*]pscsi:Pseudo SCSI范例的存储对象列表
[*]ramdisk:内存磁盘范例的存储对象列表

[*]iscsi:iSCSI目的的目录
[*]loopback:回环目的的目录
将刚刚创建的RAID5磁盘阵列md0文件假如到设置共享装备的资源池中,并将该文件重新定名为disk0,如许用户就不会知道是有服务器中的哪块硬盘来提供共享存储资源,而只会看到一个名为disk0的存储装备
   /> cd /backstores/block
/backstores/block> create disk0 /dev/md0
Created block storage object disk0 using /dev/md0.
/backstores/block> cd /
/> ls
o- / … […]
o- backstores … […]
| o- block …
| | o- disk0 …
| | o- alua …
| | o- default_tg_pt_gp …
| o- fileio …
| o- pscsi …
| o- ramdisk …
o- iscsi …
o- loopback …
/>
第三步:创建ISCSI target名称及设置共享资源
iSCSI target名称是由系统自动生成的,这是一串用于描述共享资源的唯一字符串。稍后用户在扫描iSCSI服务端时即可看到这个字符串,因此我们不须要记住它。
iqn.yyyy-mm.<reversed domain name>:identifier
iqn.年年-月.单位网络名的反转写法      : 这个共享的target名称
   /> cd iscsi
/iscsi> ls
o- iscsi …
/iscsi> create
Created target iqn.2003-01.org.linux-iscsi.iscsi-server.x8664:sn.3e775a84619b.
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 …
o- iqn.2003-01.org.linux-iscsi.iscsi-server.x8664:sn.3e775a84619b …
o- tpg1 …
o- acls …
o- luns …
o- portals …
o- 0.0.0.0:3260 …
系统在生成这个 target 名称后,还会在/iscsi 参数目录中创建一个与其字符串同名的新“目录”用来存放共享资源。我们须要把前面加人到iSCSI共享资源池中的硬盘装备添加到这个新目录中,如许用户在登录iSCSI服务端后,即可默认使用这硬盘装备提供的共享存储资源了。
/iscsi/iqn.20...5a84619b/tpg1> cd luns
/iscsi/iqn.20...19b/tpg1/luns> create /backstores/block/disk0
Created LUN 0.
   第四步:设置访问控制列表(ACL)
iSCSI协议是通过客户端名称进行验证的。也就是说,用户在访问存储共享资源时不须要输入密码,只要iSCSI客户端的名称与服务端中设置的访问控制列表中某一名称条目一致即可,因此须要在iSCSI服务端的设置文件中写入一串能够验证用户信息的名称。acls 参数目任命于存放能够访问iSCSI服务端共享存储资源的客户端名称。
# systemctl start iscsid.service && systemctl enable iscsid.service
# cat /etc/iscsi/initiatorname.iscsi
InitiatorName=iqn.1994-05.com.redhat:cc54be3e2f1

/iscsi/iqn.20...19b/tpg1/acls> create iqn.1994-05.com.redhat:cc54be3e2f1
Created Node ACL for iqn.1994-05.com.redhat:cc54be3e2f1
Created mapped LUN 0.
https://img-blog.csdnimg.cn/img_convert/ca46043359e6998b434286e9d74b3f69.png
https://img-blog.csdnimg.cn/img_convert/debad68ef623c2515235d18cbdf646c1.png
/iscsi/iqn.20...19b/tpg1/acls> create iqn.1991-05.com.microsoft:desktop-utnil1q
Created Node ACL for iqn.1991-05.com.microsoft:desktop-utnil1q
Created mapped LUN 0.
第五步:设置ISCSI服务端的监听IP地址和端标语
位于生产情况中的服务器上可能有多块网卡,那么到底是由哪个网卡或正地址对外提供共享存储资源呢?在设置文件中默认是允许所有网卡提供iSCSI服务,假如您认为这有些许不安全,可以手动删除:
/iscsi/iqn.20...19b/tpg1/acls> cd ..
/iscsi/iqn.20...5a84619b/tpg1> cd portals/
/iscsi/iqn.20.../tpg1/portals> delete 0.0.0.0 3260
Deleted network portal 0.0.0.0:3260
# 使用192.168.200.10的3260端口向外提供ISCSI共享存储资源服务
/iscsi/iqn.20.../tpg1/portals> create 192.168.200.10
Using default IP port 3260
Created network portal 192.168.200.10:3260.
第六步:再参数文件设置妥当后,浏览刚刚设置的信息,确保上述提到的“目录”都已经填写了正确的内容
确认无误exit退出设置
   /> ls
o- / … […]
o- backstores … […]
| o- block …
| | o- disk0 …
| | o- alua …
| | o- default_tg_pt_gp …
| o- fileio …
| o- pscsi …
| o- ramdisk …
o- iscsi …
| o- iqn.2003-01.org.linux-iscsi.iscsi-server.x8664:sn.3e775a84619b …
| o- tpg1 …
| o- acls …
| | o- iqn.1991-05.com.microsoft:desktop-utnil1q …
| | | o- mapped_lun0 …
| | o- iqn.1994-05.com.redhat:cc54be3e2f1 …
| | o- mapped_lun0 …
| o- luns …
| | o- lun0 …
| o- portals …
| o- 192.168.200.10:3260 …
o- loopback …
/> exit
Global pref auto_save_on_exit=true
Last 10 configs saved in /etc/target/backup/.
Configuration saved to /etc/target/saveconfig.json
防火墙放心规则
# firewall-cmd --add-service=iscsi-target --permanent
# firewall-cmd --reload
设置Windows端

打开windows客户端输入ISCSI服务端的IP地址,点击快速毗连
https://img-blog.csdnimg.cn/img_convert/5f6cdf777a384b631f842a0abc313a17.png
已毗连,点击完成
https://img-blog.csdnimg.cn/img_convert/e44b8c212945d48a2f64e18d87ce42dc.png
搜索磁盘管理器,点击搜索的第一个
https://img-blog.csdnimg.cn/img_convert/53a53d3938894c4b7baf33de254a6728.png
点进去后,就会发现有一个未分配的40G磁盘
https://img-blog.csdnimg.cn/img_convert/b770ea94510ae38d87611bbdf29eb53a.png
点击未分配的磁盘,右键新建卷,设置磁盘巨细为30G,设置驱动号为E盘,NTFS文件系统,卷标为ISCSI磁盘,最后点击完成
https://img-blog.csdnimg.cn/img_convert/a2447ba099db924ccd48733d5cd9c93a.png
https://img-blog.csdnimg.cn/img_convert/07107f87e49cf00352d2c2de8b11f38d.png
在ISCSI磁盘中存储一些内容,也可以存储
https://img-blog.csdnimg.cn/img_convert/26342f63477fb6e2f380100b2b706900.png
设置Linux客户端

在RHEL 9 系统中,已经默认安装了ISCSI客户端服务程序initiator,假如没有安装可以用yum安装
# rpm -qa |grep -i iscsi         
iscsi-initiator-utils-iscsiuio-6.2.1.4-3.git2a8f9d8.el9.x86_64
iscsi-initiator-utils-6.2.1.4-3.git2a8f9d8.el9.x86_64
udisks2-iscsi-2.9.4-7.el9.x86_64
设置iscsid服务开机自启,并启动,在之前设置访问控制列表已经开启过了
iscsiadm 是一个用于管理 iSCSI 会话和目的的命令行工具。它允许您设置和管理 iSCSI 收发器(也称为 iSCSI initiator)与 iSCSI 目的(也称为 iSCSI 服务端)之间的毗连。
Discovery(发现):


[*]iscsiadm -m discovery -t st -p <target_ip> 这个命令用于从指定的 iSCSI 目的 IP 地址进行发现。通过执行发现操纵,可以列出可以毗连的 iSCSI 目的。
Login(登录):


[*]iscsiadm -m node -T <target_name> -p <target_ip> --login 这个命令用于使用指定的 iSCSI 目的名称和 IP 地址登录到 iSCSI 目的。
Logout(注销):


[*]iscsiadm -m node -T <target_name> -p <target_ip> -u这个命令用于从指定的 iSCSI 目的注销并断开与目的的毗连。
# 先发现
# iscsiadm -m discovery -t st -p 192.168.200.10
192.168.200.10:3260,1 iqn.2003-01.org.linux-iscsi.iscsi-server.x8664:sn.3e775a84619b
# 在登录
# iscsiadm -m node -T iqn.2003-01.org.linux-iscsi.iscsi-server.x8664:sn.3e775a84619b -p 192.168.200.10 --login
Logging in to
Login to successful.
# 登录成功

# 登录成功之后,会在客户端主机上多出一块磁盘,可以使用lsblk查看
# lsblk
NAME          MAJ:MIN RMSIZE RO TYPE MOUNTPOINTS
sda             8:0    0   40G0 disk
└─sda1          8:1    0   30G0 part   # 这个是windows分区的磁盘
sr0            11:0    18.9G0 rom/run/media/root/RHEL-9-2-0-BaseOS-x86_64
nvme0n1       259:0    0   50G0 disk
├─nvme0n1p1   259:1    0600M0 part /boot/efi
├─nvme0n1p2   259:2    0    1G0 part /boot
└─nvme0n1p3   259:3    0 48.4G0 part
├─rhel-root 253:0    0 44.5G0 lvm/
└─rhel-swap 253:1    03.9G0 lvm

# 再来分区sda
# lsblk /dev/sda
NAME   MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sda      8:0    040G0 disk
├─sda1   8:1    030G0 part
└─sda2   8:2    010G0 part   # 我们创建的
# 格式化
# mkfs.xfs /dev/sda2
log stripe unit (524288 bytes) is too large (maximum is 256KiB)
log stripe unit adjusted to 32KiB
meta-data=/dev/sda2            isize=512    agcount=16, agsize=163200 blks
         =                     sectsz=512   attr=2, projid32bit=1
         =                     crc=1      finobt=1, sparse=1, rmapbt=0
         =                     reflink=1    bigtime=1 inobtcount=1
data   =                     bsize=4096   blocks=2611200, imaxpct=25
         =                     sunit=128    swidth=256 blks
naming   =version 2            bsize=4096   ascii-ci=0, ftype=1
log      =internal log         bsize=4096   blocks=2560, version=2
         =                     sectsz=512   sunit=8 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
# 创建挂载点
# mkdir /sharedisk
# 挂载
# mount /dev/sda2 /sharedisk/
# 查看
# df -hT /sharedisk/
文件系统       类型容量已用可用 已用% 挂载点
/dev/sda2      xfs    10G104M9.9G    2% /sharedisk
# 写入数据
# dd if=/dev/zero of=/sharedisk/test_1 count=500 bs=1M
记录了500+0 的读入
记录了500+0 的写出
524288000字节(524 MB,500 MiB)已复制,0.432517 s,1.2 GB/s
# cd /sharedisk/
# ls
test_1
# df -hT /sharedisk/                                 
文件系统       类型容量已用可用 已用% 挂载点
/dev/sda2      xfs    10G604M9.4G    6% /sharedisk

# 添加自动挂载
# vim /etc/fstab
/dev/sda2             /sharedisk                xfs   defaults,_netdev      0 0
# _netdev 参数可以确保系统在启动网络服务之后再进行挂载,避免因为网络尚未准备好而导致挂载失败。
# cd
# umount /sharedisk
# mount -a
# df -hT /sharedisk/
文件系统       类型容量已用可用 已用% 挂载点
/dev/sda2      xfs    10G604M9.4G    6% /sharedisk
在windows端刷新一下磁盘管理,看看分区情况
https://img-blog.csdnimg.cn/img_convert/dd5d82535630a59d71c61eb2287193a2.png
分区没问题
假如不再须要使用ISCSI共享装备资源了,可以用iscsiadm命令的-u参数将其他装备卸载
# 先发现
# iscsiadm -m discovery -t st -p 192.168.200.10
192.168.200.10:3260,1 iqn.2003-01.org.linux-iscsi.iscsi-server.x8664:sn.3e775a84619b
# 再注销
# iscsiadm -m node -T iqn.2003-01.org.linux-iscsi.iscsi-server.x8664:sn.3e775a84619b -u
Logging out of session
Logout of successful.
# 查看磁盘
# lsblk |grep sda
# 记得删除fstab自动挂载内容,否则关机就开不了机了
windows注销可以打开ISCSI发动身序,点击断开毗连就可以卸载磁盘了
iSCSI服务器CHAP单向认证设置

在 iSCSI 中,CHAP(Challenge Handshake Authentication Protocol)是一种用于进行身份认证的协议,可以在 iSCSI 毗连中提供一种基于密码的安全机制。单向 CHAP 认证是一种设置方式,其中只有 Linux客户端验证 iSCSI 服务器的身份

[*] 创建 CHAP 用户名和密码: 在 iSCSI 服务器上创建一个 CHAP 用户名和密码组合,用于与 iSCSI 客户端进行认证。这些用户名和密码将用于验证 iSCSI 客户端身份。
[*] 修改 iSCSI 客户端的设置文件: 打开 iSCSI 服务器的设置文件,并添加以下设置项:
discovery.sendtargets.auth.authmethod = CHAP
discovery.sendtargets.auth.username = <CHAP用户名>
discovery.sendtargets.auth.password = <CHAP密码>
# 将 <CHAP用户名> 替换为您在第一步中创建的 CHAP 用户名,将 <CHAP密码>替换为相应的密码。

[*] 保存并关闭设置文件
[*] 创建 iSCSI 毗连: 在设置完成后,通过 iSCSI 客户端创建与 iSCSI 服务器的毗连。客户端将使用设置的 CHAP 用户名和密码与服务器进行认证,并创建受信托的毗连
Linux端详细步骤

# 创建 CHAP 用户名和密码
# targetcli
/> cd iscsi/
/iscsi> set discovery_auth enable=1 userid=csq password=Abc@1234# 设置单向认证
Parameter enable is now 'True'.
Parameter userid is now 'csq'.
Parameter password is now 'Abc@1234'.
/iscsi> get discovery_auth
DISCOVERY_AUTH CONFIG GROUP
===========================
enable=True
-----------
The enable discovery_auth parameter.

mutual_password=
----------------
The mutual_password discovery_auth parameter.

mutual_userid=
--------------
The mutual_userid discovery_auth parameter.

password=Abc@1234# # 单项认证的密码
-----------------
The password discovery_auth parameter.

userid=csq      # 单项认证的账户
----------
The userid discovery_auth parameter.
# 修改 iSCSI 服务器的配置文件
# vim /etc/iscsi/iscsid.conf
79 discovery.sendtargets.auth.authmethod = CHAP
83 discovery.sendtargets.auth.username = csq
84 discovery.sendtargets.auth.password = 123789456csq
# 先发现
# iscsiadm -m discovery -t st -p 192.168.200.10
192.168.200.10:3260,1 iqn.2003-01.org.linux-iscsi.iscsi-server.x8664:sn.3e775a84619b
# 再登陆
# iscsiadm -m node -T iqn.2003-01.org.linux-iscsi.iscsi-server.x8664:sn.3e775a84619b --login
Logging in to
Login to successful.
# 查看磁盘
# lsblk /dev/sdb
NAME   MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sdb      8:16   040G0 disk
├─sdb1   8:17   030G0 part
└─sdb2   8:18   010G0 part
Windows端详细步骤

# 创建 CHAP 用户名和密码,执行过不用执行第二遍
# targetcli
/> cd iscsi/
/iscsi> set discovery_auth enable=1 userid=csq password=123789456csq# 设置单向认证
Parameter enable is now 'True'.
Parameter userid is now 'csq'.
Parameter password is now '123789456csq'.
/iscsi> get discovery_auth
DISCOVERY_AUTH CONFIG GROUP
===========================
enable=True
-----------
The enable discovery_auth parameter.

mutual_password=
----------------
The mutual_password discovery_auth parameter.

mutual_userid=
--------------
The mutual_userid discovery_auth parameter.

password=123789456csq   # 单项认证的密码
-----------------
The password discovery_auth parameter.

userid=csq      # 单项认证的账户
----------
The userid discovery_auth parameter.
/iscsi> 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服务端IP,点击高级,在启用CHAP登录前面打上对勾,输入名称机密,点击确定
然后点击目的,点击毗连,就毗连上了
https://img-blog.csdnimg.cn/img_convert/255504e183c422f8e68c0ce3c6dd1350.png

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: 网络驱动器装备:ISCSI服务器