6 块存储之 iSCSI 服务

6.1 iSCSI 概述

6.1.1 iSCSI 与 SCSI 原理差别

小型计算机系统接口(英语:Small Computer System Interface; 简写:SCSI),一种用于计算机和智能设备之间(硬盘、软驱、光驱、打印机、扫描仪等)系统级接口的独立处理器标准。 SCSI是一种智能的通用接口标准。它是各种计算机与外部设备之间的接口标准。

iSCSI:Internet 小型计算机系统接口 (iSCSI:Internet Small Computer System Interface)。Internet 小型计算机系统接口(iSCSI)是一种基于 TCP/IP的协议,用来建立和管理 IP 存储设备、主机和客户机等之间的相互连接,并创建存储区域网络(SAN)。SAN 使得 SCSI 协议应用于高速数据传输网络成为可能,这种传输以数据块级别(block-level)在多个数据存储网络间进行。

iSCSI是一种存储设备远程映射技术,它可以将一个远程服务器上的存储设备映射到本地,并呈现为一个块设备(大白话就是磁盘)。从普通用户的角度,映射过来的磁盘与本地安装的磁盘毫无差异。

SCSI与ISCSI是两种不同的概念:

  • iSCSI,即internet SCSI,是IETF制订的一项标准,用于将SCSI数据块映射成以太网数据包。从根本上说,iSCSI协议是一种跨过IP网络来传输潜伏时间短的 SCSI数据块的方法;简单的说, iSCSI可以实现在IP网络上运行SCSI协议,使其能够在诸如高速千兆以太网上进行路由选择。
  • SCSI 的意义是小型计算机系统接口(Small Computer System Interface);今天的SCSI已划分为SCSI-1和SCSI-2,以及最新的SCSI-3三个类型。不过,目前最为流行的版本还要算是SCSI-2。

6.1.2 常见用于 iSCSI 服务的网络拓扑类型

1) SAN:Storage Area Network,存储区域网络,多采用高速光纤通道,对速率、冗余性要求高,使用 iSCSI 存储协议,块级存储。

SAN 将数据存储网络(存储设备)和用户访问网络区分开,iSCSI需要通过不同的网卡来进行数据传输。可以提高效率,以及压力减轻。

2) NAS:Network Attachment Storage,网络附加存储,采用普通以太网,对速率、冗余无特别要求,使用NFS,CIFS共享协议,文件级传输。

  • NFS(Network File System)适用于 Linux & UNIX 系统
  • CIFS(Command Internal File System)适用于 Windows 系统

NAS中的用户访问网络和数据存储网络都在同一个网络内部,在传输高文件或者是大数据量的时候,交换机的压力非常大,效率可能会收到影响。

总结:在小环境中可以使用比较简单的NAS 网络附加存储,在大环境中则必须需要使用 SAN 存储区域网络。

6.1.2.1 SAN / NAS 的性能对比

1、 SAN快还是NAS快

首先,看下SAN与NAS的路径图,如下:

显然,NAS架构的路径在虚拟目录层和文件系统层通信的时候,用以太网和TCP/IP协议代替了内存,这样做不但增加了大量的CPU指令周期(TCP/IP逻辑和以太网卡驱动程序),而且使用了低俗传输介质(内存速度要比以太网快得多)。

而SAN方式下,路径中比NAS方式多了一次FC访问过程,但是FC的逻辑大部分都由适配卡上的硬件完成,增加不了多少CPU的开销,而且FC访问的速度比以太网高,所以我们很容易得出结论,如果后端磁盘没有瓶颈,那么除非NAS使用快于内存的网络方式与主机通信,否则其速度永远无法超越SAN架构。

但是如果后端磁盘有瓶颈,那么NAS用网络代替内存的方法产生的性能降低就可以忽略。比如,在大量随记小块I/O、缓存命中率极低的环境下,后端磁盘系统寻到瓶颈达到最大,此时前端的I/O指令都会处于等待状态,所以就算路径首段速度再快,也无济于事。

此时,NAS系统不但不比SAN慢,而且由于其优化的并发I/O设计和基于文件访问而不是簇块访问的特性,反而可能比SAN性能高。

既然NAS一般情况下不比SAN快,为何要让NAS诞生呢?既然NAS不如SAN快,那么为何还要存在呢?具体原因如下:

  • NAS的成本比SAN低很多。前端只使用以太网接口即可,FC适配卡以及交换机的成本相对以太网卡和交换机来说非常高的。
  • NAS可以解决主机服务器上的CPU和内存资源。NAS适用于cpu密集的应用环境。
  • NAS由于利用了以太网,所以可扩展性很强,且容易部署。
  • NAS设备一般都提供多种协议访问数据,而SAN只能使用SCSI协议访问。
  • NAS可以在一台盘阵上实现多台客户端的共享访问,包括同时访问某个目录或文件。而SAN方式下,除非所有的客户端都安装了专门的集群管理软件,否则不能将某个lun共享,强制共享会损坏数据。
  • 经过特别优化的NAS系统,可以同时并发处理大量客户端的请求,提供比SAN方式更方便的访问方法。
  • 多台主机可以同时挂接NFS上的目录,那么相当于减少了整个系统中文件系统的处理流程,由原来的多个并行处理转化成了NFS上的单一实例,简化了系统冗余度。

2、 SAN好还是NAS好

关于IO密集和CPU密集说明如下。

  • CPU密集:程序内部逻辑复杂,磁盘访问量不高。
  • IO密集:程序内部逻辑不复杂,耗费CPU不多,但随时存取硬盘上的数据。
  • IO和CPU都密集:不适合单机,必须组成集群。

显然,NAS对于大块顺序IO密集的环境,要比SAN慢一大截,原因是经过大量IO累积之后,总体差别就显出来了。不过,如果要用10G以太网,无疑要选用NAS,因为底层链路的速度毕竟是目前NAS的根本瓶颈。

此外,如果是高并发随机小块I/O环境或者共享访问文件的环境,NAS会表现出很强的相对性能。如果SAN主机上的文件系统碎片比较多,那么读写某个文件时便会产生随机小块IO,而NAS自身文件系统会有很多优化设计,碎片相对较少。CPU密集型的应考虑使用NAS。

参考文献:[ https://www.php.cn/faq/467087.html ]

6.1.3 iSCSI 的工作方式

工作模式 C/S 结构

  • Server 服务(设备)端:共享存储(块)能力的 → target
  • Client 客户(应用)端:使用iSCSI设备 → initiator
  • LUN 将一个大空间划分成一个小区域共享给某一台iSCSI客户端。

6.2 iSCSI 服务搭建

两台服务器

#服务器端:10.10.10.11 添加一块新的硬盘(大小自定义,这里将添加500G)

#客户端:10.10.10.12

6.2.1 LVM 整合(10.10.10.11)

#修改主机名
$ hostnamectl set-hostname server
$ lsblk
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda               8:0    0  200G  0 disk
├─sda1            8:1    0    2G  0 part /boot
└─sda2            8:2    0  142G  0 part├─centos-root 253:0    0  100G  0 lvm  /├─centos-swap 253:1    0    2G  0 lvm  [SWAP]└─centos-home 253:2    0   40G  0 lvm  /home
sdb               8:16   0  500G  0 disk# 创建物理卷
pvcreate /dev/sdb
# 创建卷组
vgcreate vg0 /dev/sdb
# 创建逻辑卷
lvcreate -L 50G -n lv0 vg0
# 对创建的逻辑卷进行格式化
mkfs -t ext4 /dev/vg0/lv0

iSCSI 可以使用已格式化的分区,单独的块,甚至是一个目录。

6.2.2 在 target 端创建 IQN 标签(10.10.10.11)

###CentOS 6操作
#挂载本地yum源
$ mount -t iso9660 /dev/cdrom /mnt/cdrom
#安装包,创建 iSCSI 对象
$ yum -y install scsi-target-utils #开启服务
$ service tgtd start
#查看服务是否开启
$ netstat -anpt | grep tgtd #tgtadm -L(指定驱动类型)
#iscsi -o(制定操作类型)
#new -m(制定管理的对象)
#target -t (制定当前存储资源 id 号)1
#-T(制定 iqn 标签,命名规则:iqn.创建年.月.域名反写:自定义)
#iqn.2016-2.com.xdl.www:lvm
###需要对应本机操作系统的系统时间
$ tgtadm -L iscsi -o new -m target -t 1 -T iqn.2021.01.com.test.www:lvm #查看 target 创建的信息
$ tgtadm -L iscsi -o show -m target
Target 1: iqn.2021.01.com.test.www:lvmSystem information:Driver: iscsiState: readyI_T nexus information:LUN information: #LUN逻辑单元,用来划分存储能力LUN: 0              #创建IQN的时候,就自动创建LUN0,是用来做控制的,并不是真正的存储能力的Type: controllerSCSI ID: IET     00010000SCSI SN: beaf10Size: 0 MB, Block size: 1Online: YesRemovable media: NoPrevent removal: NoReadonly: NoBacking store type: nullBacking store path: NoneBacking store flags: Account information:ACL information:##################################################################################################CentOS 7操作(CentOS 7的ISCSI服务器端是在 epel 源中)
#挂载本地yum源
$ mount -t iso9660 /dev/cdrom /mnt/cdrom
#安装包,创建 iSCSI 对象
$ wget -O /etc/yum.repos.d/epel.repo https://mirrors.aliyun.com/repo/epel-7.repo
$ yum -y install scsi-target-utils
#开启服务
$ systemctl enable --now tgtd
#查看服务是否开启
$ netstat -anpt | grep tgtd
tcp        0      0 0.0.0.0:3260            0.0.0.0:*               LISTEN      8501/tgtd
tcp6       0      0 :::3260                 :::*                    LISTEN      8501/tgtd#创建IQN标签
#tgtadm -L(指定驱动类型)
#iscsi -o(制定操作类型)
#new -m(制定管理的对象)
#target -t (制定当前存储资源 id 号)1
#-T(制定 iqn 标签,命名规则:iqn.创建年.月.域名反写:自定义)
#iqn.2016-2.com.xdl.www:lvm
###需要对应本机操作系统的系统时间
$ tgtadm -L iscsi -o new -m target -t 1 -T iqn.2022.09.com.kubernetes.www:lvm
#查看 target 创建的IQN信息
$ tgtadm -L iscsi -o show -m target
Target 1: iqn.2022.09.com.kubernetes.www:lvmSystem information:Driver: iscsiState: readyI_T nexus information:LUN information:LUN: 0Type: controllerSCSI ID: IET     00010000SCSI SN: beaf10Size: 0 MB, Block size: 1Online: YesRemovable media: NoPrevent removal: NoReadonly: NoSWP: NoThin-provisioning: NoBacking store type: nullBacking store path: NoneBacking store flags:Account information:ACL information:

6.2.3 绑定 IQN 标签到存储设备(10.10.10.11)

#tgtadm -L(指定驱动类型)
#iscsi -o new -m(管理的对象)
#logicalunit -t (tat 标签)1
#-l(逻辑存储单元的标签) 1
#-b(设备名称) /dev/vg0/lv0
$ tgtadm -L iscsi -o new -m logicalunit -t 1 -l 1 -b /dev/vg0/lv0
$ tgtadm -L iscsi -o bind -m target -t 1 -I 10.10.10.12#CentOS 7的显示结果:
$ tgtadm -L iscsi -o show -m target
Target 1: iqn.2022.09.com.kubernetes.www:lvmSystem information:Driver: iscsiState: readyI_T nexus information:LUN information:LUN: 0Type: controllerSCSI ID: IET     00010000SCSI SN: beaf10Size: 0 MB, Block size: 1Online: YesRemovable media: NoPrevent removal: NoReadonly: NoSWP: NoThin-provisioning: NoBacking store type: nullBacking store path: NoneBacking store flags:LUN: 1                 #出现LUN1的真实存储空间Type: diskSCSI ID: IET     00010001SCSI SN: beaf11Size: 53687 MB, Block size: 512Online: YesRemovable media: NoPrevent removal: NoReadonly: NoSWP: NoThin-provisioning: NoBacking store type: rdwr         #读写权限Backing store path: /dev/vg0/lv0 #存储设备路径Backing store flags:Account information:ACL information:10.10.10.12

6.2.4 客户端配置(10.10.10.12)

#修改主机名
$ hostnamectl set-hostname client#挂载本地yum源
$ mount -t iso9660 /dev/cdrom /mnt/cdrom
$ yum -y install iscsi-initiator-utils
#(指定服务器 IP 地址)
$ iscsiadm -m discovery -t st -p 10.10.10.11
# 在客户端进行挂载
$ iscsiadm -m node -T iqn.2021.01.com.test.www:lvm  --login
$ fdisk -l#把新添加的硬盘分区
$ fdisk /dev/sdb # 分区
Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel
Building a new DOS disklabel with disk identifier 0x05b4d994.
Changes will remain in memory only, until you decide to write them.
After that, of course, the previous content won't be recoverable.Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)WARNING: DOS-compatible mode is deprecated. It's strongly recommended toswitch off the mode (command 'c') and change display units tosectors (command 'u').Command (m for help): n #输入n,新建分区
Command actione   extendedp   primary partition (1-4)
p #输入p,添加主分区
Partition number (1-4): 1  #输入1,1号分区
First cylinder (1-2610, default 1):  #直接回车
Last cylinder, +cylinders or +size{K,M,G} (1-2610, default 2610):  #直接回车,从头到尾使用所有空间
Using default value 2610
Command (m for help): w   #输入w保存
The partition table has been altered!Calling ioctl() to re-read partition table.
Syncing disks.$ mkfs.ext4 /dev/sdb1 #格式化
$ mkdir /iscsi && mount -t ext4 /dev/sdb1 /iscsi/#解除挂载
$ umount /iscsi/
# 在客户端进行卸载
$ iscsiadm -m node -T iqn.2021.01.com.test.www:lvm  --logout #修改自动挂载文件,添加开机自启
$ vim /etc/fstab
/dev/sdb /mnt ext4 defaults,_netdev 0 0
#(添加)##################################################################################################CentOS 7操作(CentOS 7的ISCSI服务器端是在 epel 源中)
#挂载本地yum源
$ mount -t iso9660 /dev/cdrom /mnt/cdrom
#安装包,创建 iSCSI 对象
$ wget -O /etc/yum.repos.d/epel.repo https://mirrors.aliyun.com/repo/epel-7.repo
$ yum -y install scsi-target-utils
#(指定服务器 IP 地址)
$ iscsiadm -m discovery -t st -p 10.10.10.11
10.10.10.11:3260,1 iqn.2022.09.com.kubernetes.www:lvm
# 在客户端进行挂载
$ iscsiadm -m node -T iqn.2022.09.com.kubernetes.www:lvm  --login
#可以发现新添加的网络硬盘
$ fdisk -l
#把新添加的硬盘分区并格式化分区
$ echo -e "n\np\n\n\n\nw\n" | fdisk /dev/sdb
$ lsblk /dev/sdb
NAME   MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sdb      8:16   0  50G  0 disk
└─sdb1   8:17   0  50G  0 part
$ mkfs.ext4 /dev/sdb1
$ mkdir /iscsi && mount -t ext4 /dev/sdb1 /iscsi/
$ echo "Hello iSCSI" > /iscsi/test.txt
$ cat /iscsi/test.txt
Hello iSCSI#解除挂载
$ umount /iscsi/
# 在客户端进行卸载
$ iscsiadm -m node -T iqn.2022.09.com.kubernetes.www:lvm  --logout
$ lsblk /dev/sdb
lsblk: /dev/sdb: not a block device

以上操作在机器重启之后将会丢失,所以需要写到配置文件中。

6.2.5 通过配置文件持久化配置

服务端(10.10.10.11);快照恢复,然后添加一块硬盘

#挂载本地yum源
$ mount -t iso9660 /dev/cdrom /mnt/cdrom
# 安装包,创建 iSCSI 对象
$ yum -y install scsi-target-utils $ vim /etc/tgt/targets.conf
#配置target名称
<target iqn.2021.01.com.test:teststore.sdb>  #配置共享磁盘       <backing-store /dev/sdb>  #配置发行商(任意)vendor_id test #配置LUN号lun 6  </backing-store>#配置认证的用户名和密码incominguser iscsiuser iscsiuser #配置允许的网段 initiator-address 10.10.10.0/24
</target> # 开启服务
$ service tgtd start
# 查看服务是否开启
$ netstat -anpt | grep tgtd
# 查看 target 创建的信息
$ tgtadm -L iscsi -o show -m target ##################################################################################################CentOS 7操作(CentOS 7的ISCSI服务器端是在 epel 源中)
$ vim /etc/tgt/targets.conf
#配置target名称
<target iqn.2022.09.com.kubernetes.www:teststore.sdb>  #配置共享磁盘,可以使用整一个块,也可以使用逻辑卷#<backing-store /dev/sdb>  <backing-store /dev/vg0/lv0>  #配置发行商(任意)vendor_id kubernetes #配置LUN号lun 5</backing-store>#配置认证的用户名和密码(用户名:iscsiuser;密码:iscsiuser)incominguser iscsiuser iscsiuser#配置允许的网段 initiator-address 10.10.10.0/24
</target> # 开启服务
$ systemctl restart tgtd
# 查看服务是否开启
$ netstat -anpt | grep tgtd
# 查看 target 创建的信息
$ tgtadm -L iscsi -o show -m target
Target 1: iqn.2022.09.com.kubernetes.www:teststore.sdbSystem information:Driver: iscsiState: readyI_T nexus information:LUN information:LUN: 0Type: controllerSCSI ID: IET     00010000SCSI SN: beaf10Size: 0 MB, Block size: 1Online: YesRemovable media: NoPrevent removal: NoReadonly: NoSWP: NoThin-provisioning: NoBacking store type: nullBacking store path: NoneBacking store flags:LUN: 5Type: diskSCSI ID: IET     00010005SCSI SN: beaf15Size: 53687 MB, Block size: 512Online: YesRemovable media: NoPrevent removal: NoReadonly: NoSWP: NoThin-provisioning: NoBacking store type: rdwrBacking store path: /dev/vg0/lv0Backing store flags:Account information:iscsiuserACL information:10.10.10.0/24

客户端(10.10.10.12)

$ vim /etc/iscsi/iscsid.conf
#修改下面三项
node.session.auth.authmethod = CHAP
node.session.auth.username = iscsiuser
node.session.auth.password = iscsiuser#(指定服务器 IP 地址)
$ iscsiadm -m discovery -t st -p 10.10.10.11
10.10.10.11:3260,1 iqn.2022.09.com.kubernetes.www:teststore.sdb
# 在客户端进行挂载
$ iscsiadm -m node -T iqn.2022.09.com.kubernetes.www:teststore.sdb --login #发现已经有一块新的硬盘
$ lsblk /dev/sdb
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sdb    8:16   0  50G  0 disk
$ echo -e "n\np\n\n\n\nw\n" | fdisk /dev/sdb
$ lsblk /dev/sdb
NAME   MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sdb      8:16   0  50G  0 disk
└─sdb1   8:17   0  50G  0 part
$ mkfs.ext4 /dev/sdb1
$ mkdir /iscsi && mount -t ext4 /dev/sdb1 /iscsi/
$ echo "Hello iSCSI World" > /iscsi/test.txt
$ cat /iscsi/test.txt
Hello iSCSI World

网络文件系统和块存储对比:

有些数据库需要的使用的话,就需要指定干净并且空闲的块,文件共享无法实现该功能,这个时候就需要使用到块存储。

块存储之间传输的是 iSCSI 的指令,而不是文件本身,传输的效率会更高。

【Linux集群教程】07 块存储之 iSCSI 服务相关推荐

  1. 【Linux集群教程】09 集群监控 - 监控简介和Cacti搭建

    1 监控简介 1.1 重要性 Windows 的任务管理器工作:监控CPU,内存的占用率,查看相关的进程管理(杀死进程) 很多人说监控,是运维的眼睛,是稳定性建设中最重要的一环,监控也是运维工程师必须 ...

  2. 【Linux集群教程】12 集群安全防御 - 安全防御概述和Linux防火墙

    1 安全防御概述 1.1 常见的攻击手段 拒绝服务(DOS): 通过大量访问请求使服务器资源耗尽,无法向正常用户处理请求连接.常见解决手段将提供服务的机器配置的足够多,性能足够好 或者 使用云服务商的 ...

  3. 【Linux集群教程】13 集群安全防御 - SELinux 功能

    3 SELinux 3.1 SELinux 前世今生 系统安全评级:D(安全性最低) < C1 < C2 < B1 < B2 < B3 < A1(安全性最高). L ...

  4. linux系统搭建redis cluster集群 切片集群 教程 centOS系统redis6

    目录 一.说明 二.环境信息 三.介绍 四.部署流程 五.测试 一.说明 该教程为redis集群-cluster切片集群部署方式,不包含redis的安装过程,如需redis安装教程请移步以下链接: & ...

  5. Linux集群和自动化运维

    Linux/Unix技术丛书 Linux集群和自动化运维 余洪春 著 图书在版编目(CIP)数据 Linux集群和自动化运维/余洪春著. -北京:机械工业出版社,2016.8 (Linux/Unix技 ...

  6. Redis创建高可用集群教程【Windows环境】

    模仿的过程中,加入自己的思考和理解,也会有进步和收获. 在这个互联网时代,在高并发和高流量可能随时爆发的情况下,单机版的系统或者单机版的应用已经无法生存,越来越多的应用开始支持集群,支持分布式部署了. ...

  7. Linux Linux 集群

    Linux 集群 Page navigation 什么是集群? 集群分类 基于 Linux 的集群 Linux 服务器集群系统 Linux 高性能计算集群 集群系统 MOSIX 构建 Linux 集群 ...

  8. linux集群中mpi的并行计算环境简单配置,linux集群中MPI的并行计算环境简单配置(转)...

    一.集群和Linux上的集群解决方案 集群计算机是指用一组联网的PC或工作站来搭建成的,提供比单个PC(节点)计算性能高得多的计算机.说其是计算机,其实是针对所提供出来的服务而言的,或者说是逻辑上来说 ...

  9. linux集群课程,超全Linux集群技术高俊峰-实战式教学视频课程(43讲全)

    超全Linux集群技术高俊峰-实战式教学视频课程(43讲全) 1.jpg (63.6 KB, 下载次数: 0) 2016-4-27 11:41 上传 1.jpg (38.51 KB, 下载次数: 0) ...

最新文章

  1. 【HDU】3308 LCIS
  2. oracle+cast函数+长度,oracle cast() 函数问题
  3. 对于任天堂你了解多少?
  4. centos下修改mysql默认端口_CentOS下修改Apache默认端口80
  5. Apache Spark探秘:三种分布式部署方式比较
  6. CMOS与BIOS的区别
  7. hadoop2.6.0+eclipse配置
  8. Java中可怕的双重检查锁定成语
  9. Java中String为什么是final
  10. php开源mvccms_轻松理解MYSQL MVCC 实现机制
  11. 21 张让你代码能力突飞猛进的速查表(神经网络、线性代数、可视化等)
  12. iOS 中的视图函数 init initwithnib viewDidLoad viewWillAppear的总结
  13. 服装计算机辅助设计论文,计算机辅助高校服装设计论文
  14. c++ 实现四阶龙格库塔方法
  15. 对.Net 垃圾回收的C#编程相关方面(Finalize 和Dispose(bool disposing)和 Dispose())的一些理解体会(转)...
  16. 什么是设计思维Design Thinking——风靡全球的创造力培养方法
  17. web绿色服务器单文件,Web个人临时共享服务器
  18. 微信语音amr文件转mp3
  19. 调手表(蓝桥杯2018年B组真题)
  20. ONNXRUNTIME_EXCEPTION : Non-zero status code returned while running Where node. Name:‘Where‘

热门文章

  1. Quantopian自学笔记04
  2. 某某读书搜索__DATA__分析
  3. Python函数*args与**kwargs的用法
  4. 技术人文丨他们“说”的每一句话,都有ASR、NLP、TTS技术
  5. Android运用手机多媒体
  6. 记一次WebService调用踩的坑
  7. 使用pytorch模型学习框架easyocr模块识别行程码图片文字并使用Flask Web返回指定信息json字符串
  8. Ubuntu+QT+SSL+MQTT
  9. conflicting requests nothing provides libpq.so.5(RHPG_9.6)(64bit) needed **
  10. 【附源码】计算机毕业设计JAVA小王防疫副食品配送商城