Linux就该这么学—Nineteen 使用iSCSI服务部署网络存储

2024-03-16 11:30

本文主要是介绍Linux就该这么学—Nineteen 使用iSCSI服务部署网络存储,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

iSCSI技术介绍

硬盘是计算机硬件设备中重要的组成部分之一,硬盘存储设备读写速度的快慢也会对服务器的整体性能造成影响。第6章、第7章讲解的硬盘存储结构、RAID磁盘阵列技术以及LVM技术等都是用于存储设备的技术,尽管这些技术有软件层面和硬件层面之分,但是它们都旨在解决硬盘存储设备的读写速度问题,或者竭力保障存储数据的安全。

为了进一步提升硬盘存储设备的读写速度和性能,人们一直在努力改进物理硬盘设备的接口协议。当前的硬盘接口类型主要有IDE、SCSI和SATA这3种。

IDE是一种成熟稳定、价格便宜的并行传输接口。
SATA是一种传输速度更快、数据校验更完整的串行传输接口。
SCSI是一种用于计算机和硬盘、光驱等设备之间系统级接口的通用标准,具有系统资源占用率低、转速高、传输速度快等优点。

不论使用什么类型的硬盘接口,硬盘上的数据总是要通过计算机主板上的总线与CPU、内存设备进行数据交换,这种物理环境上的限制给硬盘资源的共享带来了各种不便。

**互联网小型计算机系统接口(iSCSI,Internet Small Computer System Interface)**这是一种将SCSI接口与以太网技术相结合的新型存储技术,可以用来在网络中传输SCSI接口的命令和数据。不仅克服了传统SCSI接口设备的物理局限性,实现了跨区域的存储资源共享,还可以在不停机的状态下扩展存储容量。

iSCSI技术在生产环境中的优势和劣势。首先,iSCSI存储技术非常便捷,在访问存储资源的形式上发生了很大变化,摆脱了物理环境的限制,同时还可以把存储资源分给多个服务器共同使用,因此是一种非常推荐使用的存储技术。但是,iSCSI存储技术受到了网速的制约。

创建RAID磁盘阵列

在服务端添加4块硬盘做raid5(4个盘,3个盘组raid5,1个盘作为备份盘)。
raid5的可用空间为:(组raid的硬盘数-1) * 每块硬盘的容量。

mdadm -Cv /dev/md0 -n 3 -x 1 -l 5 /dev/sd[b-e]    #拿3块10G的硬盘做raid5,实际可用空间有20G
mdadm -D /dev/md0                                 #查看/dev/md0状态(记住UUID,接下来有用)

暂时不格式化

配置iSCSI服务端

iSCSI技术在工作形式上分为服务端(target)与客户端(initiator)。iSCSI服务端即用于存放硬盘存储资源的服务器,它作为前面创建的RAID磁盘阵列的存储端,能够为用户提供可用的存储资源。iSCSI客户端则是用户使用的软件,用于访问远程服务端的存储资源。

iSCSI服务端和客户端的操作系统以及IP地址

主机名称操作系统IP地址
iSCSI服务端RHEL7192.168.10.10
iSCSI客户端RHEL7192.168.10.20

1.安装iSCSI服务端程序以及配置命令工具,安装好启动target服务并加入开启启动项;

yum install -y targetd targetcli
systemctl start targetd
systemctl enable targetd 

2.targetcli是用于管理iSCSI服务端存储资源的专用配置命令,它提供交互式配置功能,将iSCSI共享资源的配置内容抽象成“目录”的形式,只需将各类配置信息填入到相应的“目录”中即可。

以下步骤涉及到的目录:

1./backstores/block:iSCSI服务端配置共享设备的位置(在这里添加要共享的磁盘设备并重命名)
2./iscsi/iqn…xxx/tpg1:通过在/iscsi目录执行create命令生成iSCSI target名称时自动生成的与iSCSI target名称同名的目录的子目录
3.luns:用于存放可共享的硬盘设备(/backstores/block只是一个预备资源池,但没声明可共享)
4.acls:用于存放能够访问iSCSI服务端共享存储资源的验证信息
5.portals:用于存放iscsi服务端的ip地址
执行targetcli命令后就能进入交互式的配置界面。在该界面中可以使用很多Linux命令(ls、cd等)。

①.配置iSCSI服务端共享资源。/backstores/block是iSCSI服务端配置共享设备的位置。我们需要把刚刚创建的RAID 5磁盘阵列md0文件加入到配置共享设备的“资源池”中,并将该文件重新命名为disk0。

②.创建iSCSI target名称及配置共享资源。iSCSI target名称是由系统自动生成的一串用于描述共享资源的唯一字符串。在生成这个target名称后,还会在/iscsi参数目录中创建一个与其字符串同名的新“目录”用来存放共享资源。把2-1步加入到iSCSI共享资源池中的硬盘设备添加到这个新目录中,这样用户在登录iSCSI服务端后,即可默认使用这硬盘设备提供的共享存储资源。

③.设置访问控制列表(ACL)。iSCSI协议是通过客户端名称进行验证的,用户在访问存储共享资源时只要iSCSI客户端的名称与服务端中设置的访问控制列表中某一名称条目一致即可。acls参数目录用于存放能够访问iSCSI服务端共享存储资源的客户端名称。建议在刚刚系统生成的iSCSI target后面追加上:client,既能保证客户端的名称具有唯一性,又便于管理和阅读。

④.设置iSCSI服务端的监听IP地址和端口号。在配置文件中手动定义iSCSI服务端的信息,即在portals参数目录中写上服务器的IP地址。系统会自动开启服务器192.168.10.10的3260端口向外提供iSCSI共享存储资源服务。

⑤.配置妥当后检查配置信息,重启iSCSI服务端程序并配置防火墙策略。在参数文件配置妥当并经检查确认配置信息无误后输入exit命令来保存并退出配置(按Ctrl + C组合键强行结束进程是不会保存配置信息的)。重启iSCSI服务端程序后,要设置firewalld防火墙策略,使其放行3260/tcp端口号的流量。

targetcli                                   #进入targetcli交互界面
/> cd /backstores/block                     #1.进入/backstores/block目录
/backstores/block> create disk0 /dev/md0    #把刚刚创建的raid5磁盘阵列/dev/md0加入到配置共享设备的“资源池”中,并将该文件重新命名为disk0
/backstores/block> cd /iscsi                                                       #2.进入/iscsi目录
/iscsi> create                                                                     #创建iSCSI target名称
/iscsi> cd /iscsi/iqn.2003-01.org.linux-iscsi.linuxprobe.x8664:sn.xxxxxxxxxxxx/    #进入系统自动生成的与iSCSI target同名的目录
/iscsi/iqn.20...xxx> cd tpg1/luns                                                  #进入iSCSI target同名目录的tpg1/luns子目录
/iscsi/iqn.20...xxx/tpg1/luns> create /backstores/block/disk0                      #把前面加入到iSCSI共享资源池中的硬盘设备添加到该目录中
/iscsi/iqn.20...xxx/tpg1/luns> cd ..                                                                         #3.返回上一层
/iscsi/iqn.20...xxx/tpg1> cd acls                                                                            #进入acls目录
/iscsi/iqn.20...xxx/tpg1/acls> create iqn.2003-01.org.linux-iscsi.linuxprobe.x8664:sn.xxxxxxxxxxxx:client    #创建用于验证能够访问iSCSI服务端共享存储资源的信息
/iscsi/iqn.20...xxx/tpg1/acls> cd ..                   #4.返回上一层
/iscsi/iqn.20...xxx/tpg1> cd portals                   #进入portals目录
/iscsi/iqn.20.../tpg1/portals> create 192.168.10.10    #设置iSCSI服务端的监听IP地址,系统会自动开启3260端口向外提供iSCSI服务
/iscsi/iqn.20.../tpg1/portals> cd /                    #5.返回目录最顶层
/> ls                                                  #检查配置信息
/> exit                                                #确认配置信息无误后,保存配置信息并退出targetcli交互界面
systemctl restart targetd                              #重启targetd服务     
firewall-cmd --permanent --add-port=3260/tcp           #设置firewalld防火墙策略,使其放行3260/tcp端口号的流量
firewall-cmd --reload                                  #让永久模式下的firewall设置立即生效

配置Linux客户端

配置Linux客户端让其可以使用iSCSI服务端的共享存储资源:

安装iSCSI客户端:yum install -y initiator。(RHEL7默认已安装);
编辑iSCSI客户端initiator文件:/etc/iscsi/initiatorname.iscsi。填入服务端acls目录中的验证参数值;
重启iscsid服务并加入开机启动项。
访问并使用共享存储资源(先发现,再登录,最后挂载并使用)。

关于iSCSI共享存储资源的挂载,需要注意:

由于udev服务是按照系统识别硬盘设备的顺序来命名硬盘设备的,当客户端主机同时使用多个远程存储资源时,如果下一次识别远程设备的顺序发生了变化,则客户端挂载目录中的文件也将随之混乱。为了防止发生这样的问题,应在/etc/fstab配置文件中使用设备的UUID唯一标识符进行挂载,不论远程设备资源的识别顺序再怎么变化,系统也能正确找到设备所对应的目录;
由于/dev/sdb是一块网络存储设备,而iSCSI协议是基于TCP/IP网络传输数据的,因此必须在/etc/fstab配置文件中添加上_netdev参数,表示当系统联网后再进行挂载操作,以免系统开机时间过长或开机失败。

iscsiadm命令:用于管理、查询、插入、更新或删除iSCSI数据库配置文件的命令行工具,常用命令:

命令作用
iscsiadm -m discovery -t st -p IP:port发现iSCSI存储
iscsiadm -m node -o delete -T TARGET -p IP:port删除iSCSI发现记录
iscsiadm -m node查看iSCSI发现记录
iscsiadm -m session查看会话情况
iscsiadm -m node -T TARGET -p IP:port -l登录iSCSI存储(-l = --login,TARGET指的是iSCSI target名称)
iscsiadm -m node -T TARGET -p IP:port -u登出iSCSI存储
yum install -y initiator    #安装iSCSI客户端
vim /etc/iscsi/initiatorname.iscsi                                                   #编辑iSCSI客户端中的initiator名称文件
InitiatorName=iqn.2003-01.org.linux-iscsi.linuxprobe.x8664:sn.xxxxxxxxxxxx:client    #填写服务端的访问控制列表名称
systemctl restart iscsid    #重启iscsid服务
systemctl enable iscsid     #把iscsid服务加入开机启动项
iscsiadm -m discovery -t st -p 192.168.10.10                                                                 #发现iSCSI存储(先发现)
iscsiadm -m node -T iqn.2003-01.org.linux-iscsi.linuxprobe.x8664:sn.xxxxxxxxxxxx -p 192.168.10.10 --login    #登录iSCSI存储(再登录)
file /dev/sdb            #查看客户机是否多出了一块设备文件/dev/sdb
mkfs.xfs /dev/sdb        #不分区,直接格式化/dev/sdb为xfs格式
mkdir /iscsi             #创建挂载目录
blkid | grep /dev/sdb    #blkid命令用于查看设备名称、文件系统以及UUID,这里只过滤出/dev/sdb的信息
vim /etc/fstab           #编辑/etc/fstab文件,实现永久挂载
...
UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx /iscsi xfs defaults,_netdev 0 0    #盘符可能会因为机器的识别顺序而改变,用UUID设备唯一标识来挂载绝对稳,
...
mount -a
iscsiadm -m node -T iqn.2003-01.org.linux-iscsi.linuxprobe.x8664:sn.xxxxxxxx -u    #卸载iSCSI共享设备资源

配置Windows客户端

1.在控制面板中找到“系统和安全”标签,然后单击“管理工具”(见图17-3),进入到“管理工具”页面后即可看到“iSCSI发起程序”图标。双击该图标。在第一次运行iSCSI发起程序时,系统会提示“Microsoft iSCSI服务端未运行”,单击“是”按钮即可自动启动并运行iSCSI发起程序。

2.运行iSCSI发起程序后在“目标”选项卡的“目标”文本框中写入iSCSI服务端的IP地址192.168.10.10,然后单击“快速连接”。

3.此时是连不上的,因为在iSCSI服务端程序上设置了ACL,所以需要在“配置”选项卡中单击“更改”按钮,把iSCSI发起程序的名称修改为服务端ACL所定义的名称。

4.在确认客户端发起程序的名称修改正确后即可返回到“目标”选项卡页面中,然后单击“连接”按钮进行连接请求,成功连接。

5.打开“计算机管理”,对磁盘1(即iSCSI共享存储资源)进行初始化及格式化(界面操作,简单)。完成后就可以跟普通磁盘一样使用。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

这篇关于Linux就该这么学—Nineteen 使用iSCSI服务部署网络存储的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/815346

相关文章

SpringBoot3.X 整合 MinIO 存储原生方案

《SpringBoot3.X整合MinIO存储原生方案》本文详细介绍了SpringBoot3.X整合MinIO的原生方案,从环境搭建到核心功能实现,涵盖了文件上传、下载、删除等常用操作,并补充了... 目录SpringBoot3.X整合MinIO存储原生方案:从环境搭建到实战开发一、前言:为什么选择MinI

Linux线程之线程的创建、属性、回收、退出、取消方式

《Linux线程之线程的创建、属性、回收、退出、取消方式》文章总结了线程管理核心知识:线程号唯一、创建方式、属性设置(如分离状态与栈大小)、回收机制(join/detach)、退出方法(返回/pthr... 目录1. 线程号2. 线程的创建3. 线程属性4. 线程的回收5. 线程的退出6. 线程的取消7.

Linux下进程的CPU配置与线程绑定过程

《Linux下进程的CPU配置与线程绑定过程》本文介绍Linux系统中基于进程和线程的CPU配置方法,通过taskset命令和pthread库调整亲和力,将进程/线程绑定到特定CPU核心以优化资源分配... 目录1 基于进程的CPU配置1.1 对CPU亲和力的配置1.2 绑定进程到指定CPU核上运行2 基于

使用Python删除Excel中的行列和单元格示例详解

《使用Python删除Excel中的行列和单元格示例详解》在处理Excel数据时,删除不需要的行、列或单元格是一项常见且必要的操作,本文将使用Python脚本实现对Excel表格的高效自动化处理,感兴... 目录开发环境准备使用 python 删除 Excphpel 表格中的行删除特定行删除空白行删除含指定

golang程序打包成脚本部署到Linux系统方式

《golang程序打包成脚本部署到Linux系统方式》Golang程序通过本地编译(设置GOOS为linux生成无后缀二进制文件),上传至Linux服务器后赋权执行,使用nohup命令实现后台运行,完... 目录本地编译golang程序上传Golang二进制文件到linux服务器总结本地编译Golang程序

深入理解Go语言中二维切片的使用

《深入理解Go语言中二维切片的使用》本文深入讲解了Go语言中二维切片的概念与应用,用于表示矩阵、表格等二维数据结构,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习吧... 目录引言二维切片的基本概念定义创建二维切片二维切片的操作访问元素修改元素遍历二维切片二维切片的动态调整追加行动态

Linux下删除乱码文件和目录的实现方式

《Linux下删除乱码文件和目录的实现方式》:本文主要介绍Linux下删除乱码文件和目录的实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录linux下删除乱码文件和目录方法1方法2总结Linux下删除乱码文件和目录方法1使用ls -i命令找到文件或目录

prometheus如何使用pushgateway监控网路丢包

《prometheus如何使用pushgateway监控网路丢包》:本文主要介绍prometheus如何使用pushgateway监控网路丢包问题,具有很好的参考价值,希望对大家有所帮助,如有错误... 目录监控网路丢包脚本数据图表总结监控网路丢包脚本[root@gtcq-gt-monitor-prome

Python通用唯一标识符模块uuid使用案例详解

《Python通用唯一标识符模块uuid使用案例详解》Pythonuuid模块用于生成128位全局唯一标识符,支持UUID1-5版本,适用于分布式系统、数据库主键等场景,需注意隐私、碰撞概率及存储优... 目录简介核心功能1. UUID版本2. UUID属性3. 命名空间使用场景1. 生成唯一标识符2. 数

Linux在线解压jar包的实现方式

《Linux在线解压jar包的实现方式》:本文主要介绍Linux在线解压jar包的实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录linux在线解压jar包解压 jar包的步骤总结Linux在线解压jar包在 Centos 中解压 jar 包可以使用 u