网络驱动设备(一)ISCSI

一   SCSI

硬盘从接口方面分:可分为IDE和SATA硬盘与SCSI硬盘

(1)SATA逐渐取代IDE硬盘的地位成为PC市场的主流,个人电脑上使用的硬盘绝大多数均为SATA接口硬盘!

(2)SCSI硬盘(即Small Computer System Interface小型计算机系统接口),由于其性能好,多在服务器上采用此类硬盘产品!

SCSI磁盘的介绍

IDE和SCSI硬盘的区别

不错的科普文章:SCSI、FC、iSCSI三大协议概述

大话存储19节

二   ISCSI

        概念:iscsi(Internet Small Computer System Interface); iscsi是一个供硬件设备使用的、可在IP协议上层运行的SCSI指令集,是一种开放的基于IP协议的工业技术标准。该协议可以用TCP/IP对SCSI指令进行封装,使得这些指令能够通过基于P网络进行传输,从而实现SCSI 和TCP/IP协议的连接。对于局域网环境中的用户来说,采用该标准只需要不多的投资就可以方便、快捷地对信息和数据进行交互式传输及管理。

        从协议层次的角度看,通常所说的SCSI通常是指一组包含块命令、控制器管理、系统命令和enclosure服务等内容的协议规范,对应于会话层;而其下的物理通道和链接方式就对应在数据链路层,SCSI命令可以通过串口、Fibre Channel、SAS、infiniband、Internet、USB、PCIE等进行传输。iSCSI就是一种把异地存储资源通过TCP/IP网络映射本地逻辑存储设备的SCSI实现。不同于NFS向用户提供按文件为单位访问远程存储的方式,它向用户提供了块方式访问远程存储资源接口,也就是说用户可以在本地/dev/下看到iSCSI映射后的磁盘。通常所说的target端是指提供远端存储资源所在的主机,比如存储服务器;而initiator端是指链接到target端并会访问远端存储资源的节点(所在的位置是客户端)

(1) iSCSI target管理工具的特点

        基于iSCSI的网络属性,很直观地我们能想到它基本上是基于server-client模型。提供存储资源的target相当于server,而使用远程存储资源的initiator端相当于client。基于现有的iSCSI协议规范,能够开发出target端和initiator端工具。在Linux系统上,initiator端工具可以用iscsiadm,目前大部分os都自带有这款工具;而target端的工具由于直接和性能和存储管理相关,数量更多,目前常见的有targetcli、targetadm、ietadm,它们各有所长,分别能适用不同的场合。

        三种管理工具的对比

说明:ISCSI通常是设备共享;而samba(cifs)、nfs文件系统共享!

iSCSI继承了两大最传统技术:SCSI和TCP/IP协议,这为iSCSI的发展奠定了坚实的基础!

特点:iSCSI可以实现在IP网络上运行SCSI协议

优点:基于iSCSI的存储系统只需要不多的投资便可实现SAN存储功能,甚至直接利用现有的TCP/IP网络,相对于以往的网络存储技术,它解决了开放性、容量、传输速度兼容性安全性等问题,其优越的性能使其备受始关注与青睐。

三  常用的基本概念

 明白:文件系统、设备、分区的区别!

四   target端可作为共享磁盘的类型

(1)使用单一分区(partition)共享为磁盘

(2)使用完整的块设备(无须事先分区)

(3)使用磁盘阵列(RAID)共享或者软件磁盘阵列共享方式-->与单一磁盘相同

(4)使用LVM的LV设备共享为磁盘!

(5)使用dd命令所建立的大型文件来仿真成磁盘(无需事先格式化)

# 注意:共享的磁盘最好不要被使用,并且开机不要被挂载(/etc/fstab)!

四   实验

说明:RHEL6中是以配置文件的形式来进行配置,RHEL7提供了命令行接口(CLI)的管理工具 targetcli

角色:服务器(target);客户端(initiator)

(1)target(服务器)端准备好ISCSI共享的块设备--->以LVM的形式

过程省略:分区-->改变标识(用途)--->创建物理卷、卷组、逻辑卷

注意不要格式化文件系统,因为文件系统不在target端,服务器端只是提供块设备

补充:各节点Initiator和Target端需要做以下准备

 1、配置IP、关闭防火墙/SELINUX;

 2、配置各节点名称;

 3、时间同步;

安装软件

yum install targetcli.noarch  -y

# 用来将LInux系统仿真成为ISCSI target的功能(软件仿真)

(2)target端进行配置

backstores:后台存储是内核目标用来“备份”其导出的SCSI设备的不同类型的本地存储资源。每个后台创建的到本地存储资源的映射称为存储对象

(1)可用于 iSCSI 的服务存储类型四种

(2)各部分的说明

(1)targetcli - administration shell for storage targets

    管理存储targets的类似shell界面    LIO -->targetcli{查看、编辑、保存}
 
(2)核心步骤

####################BLOCK目录###################

 BLOCK(目录) --->Allows a local disk block device to be shared.(重要!!!)

 说明:block目标表示-->允许一个本地的块设备被共享

 使用结构节点内的create命令创建目标-->映射关系

 举例:

 1)/backstores/block create wzj:storage1(虚拟的) /dev/vg1/lv1(真实)

 PSCSI(目录)Allows a local SCSI device of any type to be shared.

 FILEIO(目录) --->Allows files to be treated as disk images.

 说明:允许一个文件被当作disk images
 
####################ISCSI目录########################

  TPGS(目标门户组-->目录)允许iSCSI在一个目标内支持多个完整配置。这对于复杂的服务质量配置很有用。

  说明:创建目标时,targetcli将自动创建一个tpg,几乎所有设置都只需要一个。

  举例:

  iscsi/ create iqn.2019-01.com.wzj:storange1 
 
  格式: iqn.yyyy-MM.域名反转:labels

#######LUNS目录##########

  LUNS(将之前定义的存储对象--> /backstores/block/wzj:storage1)与目标联系起来 

  iscsi/iqn*/luns create /backstores/block/wzj:storage1
 
  内核目标导出SCSI逻辑单元,也称为LUN。本节将先前定义的存储对象与目标链接起来,并定义设备将使用的编号(逻辑单元号)。

 请注意,如果使用的是ACL,则必须在引用回TPG LUN的ACL下创建一个LUN映射

############ACLS##############

 initiator-->发起者
 
 create <wwn> in the acls node creates an ACL for an initiator, and cre‐
       ate within the ACL creates a LUN mapping.

 为每一个发起者(客户端)创建一个ACL访问控制权限--->持有这个密钥的客户端才能访问我!

############PORTALS###########

开放的端口--->IP(ISCSI服务器!!!) --->默认端口是3260

targetcli --> ls(可以看到端口)--->监听客户端的请求!

服务器配置的步骤

backstores/block create name=wzj:storage1 dev=/dev/vg1/lv1

# 默认前面是 name,后面是dev,如果指定的话(可以调整顺序)

# (1)添加已创建的磁盘分区到 Backstores下,使其成为一个ISCSI的存储对象

iscsi/ create iqn.2019-05.com.wzj:random

# (2)创建一个iqn标签,能被客户端唯一识别的!

# iqn标签的命名规范: iqn.yyyy-mm.[reverse domain]:label(随机字符串) -->遵守(规范)!

注意:默认会创建一个iscsi/iqn.2019-05.com.wzj:random/tpg1

iscsi/iqn.2019-05.com.wzj:random/tpg1/luns create /backstores/block/wzj:storage1

# 做的是:"绑定"iqn标签到存储设备,客户端通过检测iqn标签来使用设备!

# iqn标签创建完之后,会出现一个LUN(专门是做控制的,Type controlller),控制节点类型(iqn标签创建以后自动创建的LUN),并不是做存储的!

原因:因为你还没有"告诉"他你把"哪个设备"共享给它(它的理解)作为共享设备,提供给客户端使用!

# (3)进行关联

iscsi/iqn.2019-05.com.wzj:random/tpg1/acls create iqn.2019-05.com.wzj:randomkey

# (4)认证

iscsi/iqn.2019-05.com.wzj:random/tpg1/portals create 172.25.2.150

# 为了保证安全:指定"用户"(ACL)和"IP网段" -I(IP地址-->给谁使用)才可以使用

# (5)开启的IP:端口-->默认是3260

exit

LUN(Logic Unit逻辑单元)

理解为划分存储能力,ISCSI服务器端有1PB,但是客户端不一定全部要使用(1TB),可以通过分割,划分区域共享!

LUN(逻辑单元),每个逻辑单元都打上一个标签

target端开启服务

systemctl start target
systemctl enable target
systemctl status target

补充:如果防火墙没有关闭,可以进行下面的配置

firewall-cmd --permanent --add-port=3260/tcp
firewall-cmd --reload

#########################

客户端测试

(0)安装 iscsi-initiator-utils 软件包

yum install -y iscsi-initiator-utils

# 作用:挂载来自target的磁盘到Linux本机上!

(1)客户端开启检测前准备工作

#(1)首先进行认证,修改配置文件

/etc/iscsi/initiatorname.iscsi #修改acl的认证!

# (2)开启服务

systemctl enable iscsid
systemctl start iscsid
systemctl status iscsid

注意:是iscsid而不是iscsi!

(2)开始检测

#(1)检测-->获取设备的iqn标签的名称
iscsiadm -m doscovery -t st -p 172.25.2.150
#(2)根据ip标签,登陆准备使用-->成功的标志(successful)
iscsiadm -m node -T iqn.2019-05.com.wzj:random -l

# 在服务器为一个客户端添加一个LUN,会在客户端显示为一个磁盘驱动器!

说明:客户端需要通过访问iqn标签的方式,来确定target端的存储设备有哪些!

  -t st(scanner type)-->指定"扫描类型"!

  -p IP(指定扫描的服务器地址)  结果-->扫描出一个标签

  -l(login-->登陆操作) -m node() -T iqn标签 --->successful成功标示!

  -T, --targetname(指定访问的iqn标签的名字)

  -m, --mode op

# discovery(常用),  discoverydb,node(常用), fw, host iface or session(常用)

 测试

测试1:验证会话状态及相关的磁盘信息

iscsiadm -m session -P 3 |grep Attached

测试2:验证客户端是否存储已发现的服务端 Target

ll -R  /var/lib/iscsi/nodes/

测试3:通过 fdisk -l 或者 cat /proc/partation 查看!

(3)准备使用

强调:不管target端到底提供的是一个分区还是一个文件或者是一个设备,initator端检测的就是一个完整的块设备

(1)分区-->查看 lsblk

fdisk /dev/sda

# 注意:多出来的那块设备,是什么就写什么!

(2)格式化成文件系统-->使用

mkfs.xfs /dev/sda1

mount /dev/sda1 /mnt/

df  #查看是否被挂载上

(3)开始在此分区上写文件等

需求1开机自动挂载

#(1)查设备UUID -->blkid
/dev/sda1: UUID="549d1f04-6054-44b4-9f70-2e93976b9b2b" TYPE="xfs"

#(2)写入配置文件
UUID="549d1f04-6054-44b4-9f70-2e93976b9b2b" /mnt                  xfs     defaults,_netdev 0 0

# 声明是一个网络设备(网络参数的时候)  

#(3)先卸载,然后再测试看是否挂载上

mount -a        

#(4)测试

reboot -->df

说明:永久挂载磁盘的时候必须声明这是一个网络设备了,而且挂载的时候最好使用UUID,防止发生设备名称的漂移!

原因:开机的时候先挂载,不指定参数当作普通的设备会出错,而此设备是需要网络支持,所以必须声明是一个网络设备

注意:第一次的话重启电脑可能会一直卡,需要force,真实环境通过掉电的策略进行!

NAS iscsi 开机启动自动挂载

需求2客户端卸载 iSCSI Target

卸载的场景磁盘扩容、客户端不再使用 iSCSI 进行数据存储、客户端布署其他应用而不再使用原应用等等,就需要将已经挂载的 iSCSI Target 进行卸载,并出于信息安全的目的,删除已经保存的服务端的相关信息,这时就需要进行相关的操作!

注意:要卸载已经挂载到客户端系统目录上的iSCSI Target,首先要确认当前分区没有被使用,避免出现数据丢失

(1)在/etc/fstab中删除持久化挂载操作配置

(2)卸载 umount

umount /mnt/

(3)登出
 
 tree /var/lib/iscsi #有相关的数据文件

 iscsiadm -m node iqn.2019-05.com.wzj:random -p 172.25.2.150 -u #只是登出

 tree /var/lib/iscsi #有相关的数据文件

 iscsiadm -m node iqn.2019-05.com.wzj:random -p 172.25.2.150 -o delete 

 # 说明:删除已发现的 iSCSI 服务端信息并验证

 tree /var/lib/iscsi #此时是否有相关的数据文件(没有)

(4)进一步检查

iscsiadm -m session -P 3|grep Attached #验证是否还存在 iSCSI Session

lsblk                                  #查看是否还存在未挂载的磁盘

说明:到这里在客户端成功删除了 iSCSI Target

需求3临时登出

iscsiadm -m node iqn.2019-05.com.wzj:random -p 172.25.2.150 -u #u(unlogin)

# 说明:临时登出 tree /var/lib/iscsi 可以看到数据文件还存在,此时df看不到此设备信息!

iscsiadm -m node iqn.2019-05.com.wzj:random -p 172.25.2.150 -l #l(login登陆)

说明:如果删除vim /etc/fstab,只u(停止),由于没有删除/var/lib/iscsi,所以systemctl restart iscsid --> fidsk -l 还会看到此硬盘信息

target端删除

targetcli 进入配置shell界面
clearconfig confirm=True
ls #查看下
saveconfig #最好保存下
exit #退出

注意:一定是没有客户端使用,才清理服务器端,否则会出现错误!

扩展

iSCSI可以配置基于IP或基于用户CHAP的认证方式

多个节点同时挂载后,一个节点的操作和另外节点不是实时同步的

/etc/tgt/targets.conf配置文件

#############################

四   小思考

问题1:既然有文件存储又搞什么块存储有什么意义?

(1)有些数据库它需要的是,如果你要使用我的话,存储必须指定是一个单独的块文件系统不行

(2)我们块存储传输的ISCSI指令,而不是文件本身,它的效率更高

问题2:为什么服务器使用LVM

补充:可以动态伸缩弹性比较好,先在服务端的磁盘上新建 LVM , 然后将新建的 LV 加入到 Backstore 中,做为后备磁盘,供 Lun 使用。如果出现需要进行磁盘扩容的情况,只需要调整相应的 Backstore 中的 LV 分区即可!

五  工作原理

    iSCSI存储系统知识

工作流程

(1)iSCSI系统由SCSI适配器发送一个SCSI命令。
(2)命令封装到TCP/IP包中并送入到以太网络。
(3)接收方从TCP/IP包中抽取SCSI命令并执行相关操作。
(4)把返回的SCSI命令和数据封装到TCP/IP包中,将它们发回到发送方。
(5)系统提取出数据或命令,并把它们传回SCSI子系统。

链接1

内核开发

运维面试的系列

六   排错

(1)客户端查找不到服务端的ISCSI设备

iscsiadm -m discovery -t sendtargets -p 172.25.2.100

iscsiadm: cannot make connection to 172.25.2.100: Connectionrefused

iscsiadm: connection login retries (reopen_max) 5 exceeded

iscsiadm: Could not perform SendTargets discovery: encounteredconnection failure

原因: 服务端未指定ip端口或者防火墙没有开启此端口(3260)!

(2)客户端查找不到服务端的ISCSI设备

 iscsiadm: Could not perform SendTargets discovery: encounteredconnection login failure
 
解决思路:发现tgtd服务也启动了,这样与target服务共用了端口,把tgtd服务关掉并设置为开机不启动

停止:systemctl stop tgtd

开机不启动:systemctl disable tgtd

(3)Could not create NetworkPortal in configFS

原因:服务器已经存在了一个IP和端口,需要删除

场景:服务器target端口有多个LUN的时候!

解决

/>cd /iscsi/iqn.2019-05.com.wzj:iscsimwd1/tpg1/portals

/>/iscsi/iqn.20.../tpg1/portals> delete 0.0.0.0 3260

注:ip和端口之间有一个空格

(4)acl的密钥

 原因:客户端在 /etc/iscsi/init* 写错,属于authorized授权问题,

 解决策略:删除/var/lib/iscis/相应的 --> tree看干不干净,vim /etc/iscis/init*      -->正确的信息!

(5)注意一定要安装正确的版本的yum源

python包的问题

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Linux iSCSI是一种用于在计算机之间传输块级数据的协议。它允许将存储设备(如硬盘驱动器)通过网络连接到远程计算机,并使其在本地计算机上看起来像本地存储设备一样。这样,远程计算机可以像使用本地存储设备一样访问和操作远程存储设备。 要在Linux上使用iSCSI,您需要进行以下步骤: 1. 安装iSCSI软件:使用以下命令安装与iSCSI相关的软件: ```shell yum install iscsi yum install iscsi-initiator-utils.x86_64 ``` 2. 配置iSCSI Initiator:编辑iSCSI Initiator的配置文件以指定远程存储设备的位置和访问凭据。您可以使用以下命令编辑配置文件: ```shell vi /etc/iscsi/initiatorname.iscsi ``` 在文件中,您需要设置以下参数: - InitiatorName:指定本地计算机的iSCSI Initiator名称。 - TargetAddress:指定远程存储设备的IP地址或主机名。 - TargetName:指定远程存储设备iSCSI Target名称。 - Username和Password:如果需要身份验证,则指定访问远程存储设备所需的用户名和密码。 3. 连接到远程存储设备:使用以下命令连接到远程存储设备: ```shell iscsiadm -m discovery -t sendtargets -p <远程存储设备的IP地址或主机名> iscsiadm -m node -T <远程存储设备iSCSI Target名称> -l ``` 4. 验证连接:使用以下命令验证与远程存储设备的连接: ```shell iscsiadm -m session ``` 您应该能够看到已建立的iSCSI会话。 请注意,这只是一个简单的介绍和演示,实际使用iSCSI可能涉及更多的配置和设置。具体的步骤和命令可能因您的操作系统和iSCSI实现而有所不同。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值