《Linux就该这么学》培训笔记_ch17_使用iSCSI服务部署网络存储
《Linux就该这么学》培训笔记_ch17_使用iSCSI服务部署网络存储
文章最后会post上书本的笔记照片。
文章主要内容:
iSCSI技术介绍
硬盘存储结构、RAID磁盘阵列技术以及LVM技术等都是用于存储设备的技术,这些技术有软件层面和硬件层面之分,但是它们都旨在解决硬盘存储设备的读写速度问题,或者竭力保障存储数据的安全。
为了进一步提升硬盘存储设备的读写速度和性能,人们一直在努力改进物理硬盘设备的接口协议。当前的硬盘接口类型主要有:
- IDE:一种成熟稳定、价格便宜的并行传输接口。
- SATA:一种传输速度更快、数据校验更完整的串行传输接口。
- SCSI:一种用于计算机和硬盘、光驱等设备之间系统级接口的通用标准,具有系统资源占用率低、转速高、传输速度快等优点。
不论使用什么类型的硬盘接口,硬盘上的数据总是要通过计算机主板上的总线与CPU、内存设备进行数据交换,这种物理环境上的限制给硬盘资源的共享带来了各种不便。
互联网小型计算机系统接口iSCSI(Internet Small Computer System Interface)是一种基于TCP/IP协议和SCSI接口协议的新型存储技术,可以用来在网络中传输SCSI接口的命令和数据。该技术不仅克服了传统SCSI接口设备的物理局限性,实现了跨区域的存储资源共享,还可以在不停机的状态下扩展存储容量。
iSCSI技术在生产环境中的优势和劣势:
- 优势:iSCSI存储技术非常便捷,在访问存储资源的形式上发生了很大变化,摆脱了物理环境的限制,同时还可以把存储资源分给多个服务器共同使用;
- 劣势:iSCSI存储技术受到了网速的制约。以往,硬盘设备直接通过主板上的总线进行数据传输,现在则需要让互联网作为数据传输的载体和通道,因此传输速率和稳定性是iSCSI技术的瓶颈。
部署iSCSI服务需要通过以太网传输硬盘设备上的数据,需要安装iSCSI-HBA卡,与一般的网卡不同:
- 网卡:连接网络总线和内存,供计算机上网使用;
- iSCSI-HBA卡:连接SCSI接口或FC(光纤通道)总线和内存,专门用于在主机之间交换存储数据。
iSCSI-HBA卡使用的协议也与一般网卡有本质的不同。运行Linux系统的服务器会基于iSCSI协议把硬盘设备命令与数据打包成标准的TCP/IP数据包,然后通过以太网传输到目标存储设备,而当目标存储设备接收到这些数据包后,还需要基于iSCSI协议把TCP/IP数据包解压成硬盘设备命令与数据。
创建RAID磁盘阵列
要使用iSCSI存储技术为远程用户提供共享存储资源,首先要保障用于存放资源的服务器的稳定性与可用性,否则一旦在使用过程中出现故障,则维护的难度相较于本地硬盘设备要更加复杂、困难。
在部署iSCSI前,在服务端添加4块硬盘做raid5(4个盘,3个盘组raid5,1个盘作为备份盘)。raid5的可用空间为:(组raid的硬盘数-1) * 每块硬盘的容量。
mdadm -Cv /dev/md0 -n -x -l /dev/sd[b-e] #拿3块10G的硬盘做raid5,实际可用空间有20G
mdadm -D /dev/md0 #查看/dev/md0状态(记住UUID,接下来有用)
做好raid就行了,暂时不需要分区格式化。
配置iSCSI服务端
iSCSI技术在工作形式上分为服务端(target)与客户端(initiator)。iSCSI服务端即用于存放硬盘存储资源的服务器,它作为前面创建的RAID磁盘阵列的存储端,能够为用户提供可用的存储资源。iSCSI客户端则是用户使用的软件,用于访问远程服务端的存储资源。
配置iSCSI服务端:
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名称同名的目录的子目录
- 4.acls:用于存放能够访问iSCSI服务端共享存储资源的验证信息
- 3.luns:用于存放可共享的硬盘设备(/backstores/block只是一个预备资源池,但没声明可共享)
- 5.portals:用于存放iscsi服务端的ip地址
执行targetcli命令后就能进入交互式的配置界面。在该界面中可以使用很多Linux命令(ls、cd等)。
2-1.配置iSCSI服务端共享资源。/backstores/block是iSCSI服务端配置共享设备的位置。我们需要把刚刚创建的RAID 5磁盘阵列md0文件加入到配置共享设备的“资源池”中,并将该文件重新命名为disk0。
2-2.创建iSCSI target名称及配置共享资源。iSCSI target名称是由系统自动生成的一串用于描述共享资源的唯一字符串。在生成这个target名称后,还会在/iscsi参数目录中创建一个与其字符串同名的新“目录”用来存放共享资源。把2-1步加入到iSCSI共享资源池中的硬盘设备添加到这个新目录中,这样用户在登录iSCSI服务端后,即可默认使用这硬盘设备提供的共享存储资源。
2-3.设置访问控制列表(ACL)。iSCSI协议是通过客户端名称进行验证的,用户在访问存储共享资源时只要iSCSI客户端的名称与服务端中设置的访问控制列表中某一名称条目一致即可。acls参数目录用于存放能够访问iSCSI服务端共享存储资源的客户端名称。建议在刚刚系统生成的iSCSI target后面追加上:client,既能保证客户端的名称具有唯一性,又便于管理和阅读。
2-4.设置iSCSI服务端的监听IP地址和端口号。在配置文件中手动定义iSCSI服务端的信息,即在portals参数目录中写上服务器的IP地址。系统会自动开启服务器192.168.10.10的3260端口向外提供iSCSI共享存储资源服务。
2-6.配置妥当后检查配置信息,重启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.-.org.linux-iscsi.linuxprobe.x8664:sn.xxxxxxxxxxxx/ #进入系统自动生成的与iSCSI target同名的目录
/iscsi/iqn....xxx> cd tpg1/luns #进入iSCSI target同名目录的tpg1/luns子目录
/iscsi/iqn....xxx/tpg1/luns> create /backstores/block/disk0 #把前面加入到iSCSI共享资源池中的硬盘设备添加到该目录中
/iscsi/iqn....xxx/tpg1/luns> cd .. #3.返回上一层
/iscsi/iqn....xxx/tpg1> cd acls #进入acls目录
/iscsi/iqn....xxx/tpg1/acls> create iqn.-.org.linux-iscsi.linuxprobe.x8664:sn.xxxxxxxxxxxx:client #创建用于验证能够访问iSCSI服务端共享存储资源的信息
/iscsi/iqn....xxx/tpg1/acls> cd .. #4.返回上一层
/iscsi/iqn....xxx/tpg1> cd portals #进入portals目录
/iscsi/iqn..../tpg1/portals> create 192.168.10.10 #设置iSCSI服务端的监听IP地址,系统会自动开启3260端口向外提供iSCSI服务
/iscsi/iqn..../tpg1/portals> cd / #5.返回目录最顶层
/> ls #检查配置信息
/> exit #确认配置信息无误后,保存配置信息并退出targetcli交互界面
systemctl restart targetd #重启targetd服务
firewall-cmd --permanent --add-port=/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.-.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.-.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 #盘符可能会因为机器的识别顺序而改变,用UUID设备唯一标识来挂载绝对稳,
...
mount -a
iscsiadm -m node -T iqn.-.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就该这么学》培训笔记_ch17_使用iSCSI服务部署网络存储的更多相关文章
- Linux基础学习-使用iSCSI服务部署网络存储
使用iSCSI服务部署网络存储 iSCSI技术实现了物理硬盘设备与TCP/IP网络协议的相互结合,使得用户可以通过互联网方便地访问远程机房提供的共享存储资源.下面介绍如何在Linux上部署iSCSI服 ...
- 《Linux就该这么学》培训笔记_ch10_使用Apache服务部署静态网站
<Linux就该这么学>培训笔记_ch10_使用Apache服务部署静态网站 文章最后会post上书本的笔记照片. 文章主要内容: 网站服务程序 配置服务文件参数 SELinux安全子系统 ...
- 《Linux就该这么学》培训笔记_ch09_使用ssh服务管理远程主机
<Linux就该这么学>培训笔记_ch09_使用ssh服务管理远程主机 文章最后会post上书本的笔记照片. 文章主要内容: 配置网络服务 远程控制服务 不间断会话服务 书本笔记 配置网络 ...
- 《Linux就该这么学》培训笔记_ch11_使用Vsftpd服务传输文件
<Linux就该这么学>培训笔记_ch11_使用Vsftpd服务传输文件 文章最后会post上书本的笔记照片. 文章主要内容: 文件传输协议 Vsftpd服务程序 匿名访问模式 本地用户模 ...
- 《Linux就该这么学》培训笔记_ch20使用LNMP架构部署动态网站环境
<Linux就该这么学>培训笔记_ch20使用LNMP架构部署动态网站环境 文章最后会post上书本的笔记照片. 文章主要内容: 源码包程序 LNMP动态网站架构 配置Mysql服务 配置 ...
- 《linux就该这么学》第八节课:第六章存储结构与磁盘划分
笔记 (借鉴请修改) 6.3.文件系统与数据资料 目前linux最常见的文件系统: ext3:日志文件系统.宕机时可自动恢复数据资料,容量越大恢复时间越长,且不能保证百分百不丢失. ext4:e ...
- Linux笔记15 使用Apache服务部署静态网站。
配置服务文件参数Linux系统中的配置文件 服务目录 /etc/httpd 主配置文件 /etc/httpd/conf/httpd.conf 网站数据目录 /var/www/html 访问日志 /va ...
- LInux 就该这么学 笔记分享
看了Linux就该这么学的前部分书,觉得写的还可以,就在网上找了下面这个同学写的笔记,觉得很详细,所以保存地址,供以后查阅参看.这里对作者表示感谢!!! 博客地址: https://www.cnblo ...
- Linux就该这么学笔记
https://www.linuxprobe.com/========================================================================= ...
随机推荐
- C# foreach循环
一.简介 foreach循环可以迭代数组或者一个集合对象 二.语法 foreach(数据类型 变量名 in 数组名) { //语句块: } 循环运行的过程:每一次循环时,从集合中取出一个 ...
- OCaml (ML家族语言)很好很强大
理由如下: 1. 强类型,写着放心 2. 函数式. 且不是pure functional, 不用像 Haskell 那样极端.. 3. Algebric Data Types 的模式匹配 实在太爽了 ...
- php配置出错,引发上传文件出错
今天在做文件上传的时候,按正常逻辑提交,可提交到服务器后,$_FILES['tmp_name']死活不对,表单的enctype="multipart/form-data" 这个也加 ...
- MYSQL中IN,INSTR,FIND_IN_SET函数效率比较(转)
今天写代码时前台传过来类似‘1,2,3,4,5,6’的字符串,这种情况直接用IN是无效的,需要把字符串分割成数组或者组装成列表,然后再利用mabatis的foreach函数 <select id ...
- echarts 更改tooltip提示框CSS样式
最近 做项目,用过echarts,发现tooltip提示z-index级别很高,想更改下,看了下文档:https://www.echartsjs.com/zh/option.html#tooltip. ...
- 监控微信小程序wx.request请求失败
在微信小程序里,与后台服务器交互的主要接口函数是wx.request(),用于发起 HTTPS 网络请求.其重要性不言而喻.然而,却经常遇到请求失败的问题,笔者特意谷歌"wx.request ...
- (原+修改)Pip使用国内源安装opencv
转载请注明出处: https://www.cnblogs.com/darkknightzh/p/12000823.html 参考网址: https://www.imooc.com/article/34 ...
- 交叉编译tmux
作者:彭东林 邮箱:pengdonglin137@163.com 参考 https://gist.github.com/tessus/5e118d44261a6ab2f198 环境 Qemu-4.1 ...
- mac运行模拟器simulator突然很慢
一直都正常,突然变慢,而且慢的离谱. 上网查了下,这里记录下,或许问题不仅限于此. simulator->Debug->Slow Animations. 这个Slow Animations ...
- django 修改 request 对象中的请求参数, 并重新赋值给 request 对象
直接上代码, 实现流程看代码及注释 def your_view(self, request): method = request.method if method == "GET" ...