当前位置: 首页 > news >正文

ISCSI存储

ISCSI存储

一、iscsi简介

1. 基本概念

iSCSI(Internet Small Computer System Interface)即互联网小型计算机系统接口,它是一种基于 TCP/IP 协议的存储网络协议,将传统的 SCSI(Small Computer System Interface)命令封装在 IP 数据包中,从而使服务器可以通过网络像访问本地存储设备一样访问远程的 iSCSI 存储设备。

2. 工作流程
  • 发现阶段:iSCSI 发起端首先需要发现可用的 iSCSI 目标端设备。发起端会向指定的 iSCSI 发现端口(通常是 TCP 端口 3260)发送发现请求,目标端设备接收到请求后,会返回其自身的信息,包括 iSCSI 名称、IP 地址等。发起端根据这些信息建立与目标端的连接。
  • 登录阶段:发起端与目标端建立连接后,会进行登录操作。在登录过程中,发起端和目标端会交换一些必要的参数,如连接的安全设置、数据传输的最大块大小等,以确保双方能够正常通信。
  • 数据传输阶段:登录成功后,发起端可以向目标端发送 SCSI 命令,如读取或写入数据。这些 SCSI 命令会被封装成 iSCSI 数据包,通过 TCP/IP 网络传输到目标端。目标端接收到数据包后,解析其中的 SCSI 命令,并执行相应的操作。操作完成后,目标端会将结果封装成 iSCSI 响应数据包返回给发起端。
  • 注销阶段:当发起端不再需要访问目标端设备时,会发起注销操作,断开与目标端的连接。在注销过程中,双方会清理相关的资源,确保连接的正常关闭。

二、配置iscsi存储服务器–(提供iscsi目标)

  1. 使用fdisk -l指令查看磁盘信息

  2. 新建分区–/dev/sda5–5G
    fdisk /dev/sda 或者 partprobe /dev/sda

  3. 安装targetcli软件包—在RHEL7上提供配置iscsi目标的使用程序是targetcli
    yum -y install targetcli

  4. 使用targetcli交互模式,创建后备存储

    block----块设备、磁盘驱动器、磁盘分区、逻辑卷等等
    fileio----使用dd命令创建的文件。
    pscsi----物理scsi,通常不使用
    ramdisk----类似于U盘

    [root@server ~]# targetcli 
    Warning: Could not load preferences file /root/.targetcli/prefs.bin.
    targetcli shell version 2.1.fb41
    Copyright 2011-2013 by Datera, Inc and others.
    For help on commands, type 'help'.
    /> ls
    o- / ..................................................................... [...]o- backstores .......................................................... [...]| o- block .............................................. [Storage Objects: 0]| o- fileio ............................................. [Storage Objects: 0]| o- pscsi .............................................. [Storage Objects: 0]| o- ramdisk ............................................ [Storage Objects: 0]o- iscsi ........................................................ [Targets: 0]o- loopback ..................................................... [Targets: 0]
    /> cd backstores/block 
    /backstores/block> ls
    o- block .................................................. [Storage Objects: 0]
    /backstores/block> create block1 /dev/sda5	#此时的block1为用户自定义的名字,sda5根据每台主机分区的情况输入
    Created block storage object block1 using /dev/sda5.
    /backstores/block> ls
    o- block .................................................. [Storage Objects: 1]o- block1 ........................ [/dev/sda5 (0 bytes) write-thru deactivated]
    /backstores/block> cd ..
    /backstores> cd ..
    /> ls
    o- / ..................................................................... [...]o- backstores .......................................................... [...]| o- block .............................................. [Storage Objects: 1]| | o- block1 .................... [/dev/sda5 (0 bytes) write-thru deactivated]| o- fileio ............................................. [Storage Objects: 0]| o- pscsi .............................................. [Storage Objects: 0]| o- ramdisk ............................................ [Storage Objects: 0]o- iscsi ........................................................ [Targets: 0]o- loopback ..................................................... [Targets: 0]
    
  5. 为目标创建iqn

    /> cd iscsi 
    /iscsi> create iqn.2025-05.com.example:disk1	#此时的disk1为用户自定义的名字
    Created target iqn.2025-05.com.example:disk1.
    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 .......................................................... [Targets: 1]o- iqn.2025-05.com.example:disk1 ................................... [TPGs: 1]o- tpg1 ............................................. [no-gen-acls, no-auth]o- acls ........................................................ [ACLs: 0]o- luns ........................................................ [LUNs: 0]o- portals .................................................. [Portals: 1]o- 0.0.0.0:3260 ................................................... [OK]
    
  6. 创建acl–在TPG中,创建ACL以控制客户端节点的访问

    /iscsi> cd iqn.2025-05.com.example:disk1/tpg1/acls 
    /iscsi/iqn.20...sk1/tpg1/acls> create iqn.2025-05.com.example:desktop	#创建访问控制列表,其中desktop为用户自定义名字
    Created Node ACL for iqn.2025-05.com.example:desktop
    /iscsi/iqn.20...sk1/tpg1/acls> ls
    o- acls .............................................................. [ACLs: 1]o- iqn.2020-03.com.example:desktop .......................... [Mapped LUNs: 0]
    
  7. 创建LUN–此步骤还将激活每个后备存储。此处为block1后备存储创建LUN

    /iscsi/iqn.20...sk1/tpg1/acls> cd ..
    /iscsi/iqn.20...le:disk1/tpg1> cd luns 
    /iscsi/iqn.20...sk1/tpg1/luns> ls
    o- luns .............................................................. [LUNs: 0]
    /iscsi/iqn.20...sk1/tpg1/luns> create /backstores/block/block1 
    Created LUN 0.
    Created LUN 0->0 mapping in node ACL iqn.2020-03.com.example:desktop
    /iscsi/iqn.20...sk1/tpg1/luns> ls
    o- luns .............................................................. [LUNs: 1]o- lun0 ........................................... [block/block1 (/dev/sda5)]
    
  8. 创建门户–在TPG中,创建一个门户配置侦听IP地址和端口,先把默认的门户配置删除,然后创建

    /iscsi/iqn.20...sk1/tpg1/luns> cd ..
    /iscsi/iqn.20...le:disk1/tpg1> cd portals/
    /iscsi/iqn.20.../tpg1/portals> ls
    o- portals ........................................................ [Portals: 1]o- 0.0.0.0:3260 ......................................................... [OK]
    /iscsi/iqn.20.../tpg1/portals> delete ip_address=0.0.0.0 ip_port=3260		#删除默认门户配置
    Deleted network portal 0.0.0.0:3260
    /iscsi/iqn.20.../tpg1/portals> create ip_address=192.168.100.100 ip_port=3260
    Using default IP port 3260
    Created network portal 192.168.100.100:3260.
    /iscsi/iqn.20.../tpg1/portals> ls
    o- portals ........................................................ [Portals: 1]o- 192.168.100.100:3260 .................................................... [OK]
    
  9. 整体预览targetcli配置

    /iscsi/iqn.20.../tpg1/portals> cd /
    /> ls
    o- / ..................................................................... [...]o- backstores .......................................................... [...]| o- block .............................................. [Storage Objects: 1]| | o- block1 ...................... [/dev/sda5 (0 bytes) write-thru activated]| o- fileio ............................................. [Storage Objects: 0]| o- pscsi .............................................. [Storage Objects: 0]| o- ramdisk ............................................ [Storage Objects: 0]o- iscsi ........................................................ [Targets: 1]| o- iqn.2025-05.com.example:disk1 ................................. [TPGs: 1]|   o- tpg1 ........................................... [no-gen-acls, no-auth]|     o- acls ...................................................... [ACLs: 1]|     | o- iqn.2025-05.com.example:desktop .................. [Mapped LUNs: 1]|     |   o- mapped_lun0 ............................ [lun0 block/block1 (rw)]|     o- luns ...................................................... [LUNs: 1]|     | o- lun0 ................................... [block/block1 (/dev/sda5)]|     o- portals ................................................ [Portals: 1]|       o- 192.168.100.100:3260 ............................................ [OK]o- loopback ..................................................... [Targets: 0]
    /> exit
    
    Global pref auto_save_on_exit=true		#退出后,会自动保存配置信息
    Configuration saved to /etc/target/saveconfig.json
    
  10. 重启服务,并设置下次启动生效

    systemctl  restart  target
    systemctl  enable   target
    

    或者使用

    systemctl restart iscsi
    systemctl restart iscsid
    systemctl enable iscsi
    systemctl enable iscsid
    
  11. 设置防火墙—由于防火墙对应的service name中没有target和iscsi,所以只需要添加端口3260即可

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

三、iscsi客户端配置

  1. 安装iscsi-initiator-utils

    yum  -y install iscsi-initiator-utils
    
  2. 修改/etc/iscsi/initiatorname.iscsi配置文件—作为iscsi节点,客户端需要唯一的iqn,我们需要将该配置文件中的iqn改成我们之前在acl中新建的那个iqn

    vim  /etc/iscsi/initiatorname.iscsi#在initiatorname.iscsi文件内
    InitiatorName=iqn.2025-05.com.example:desktop	#此时的desktop是在配置acl时自定义的名字
    
  3. 重启iscsi、iscsid服务,并设置下次启动生效

    systemctl restart iscsi
    systemctl enable iscsi
    systemctl restart iscsid
    systemctl enable iscsid
    
  4. 发现目标
    在iscsi客户端上连接目标之前,必须先发现目标,发现过程将目标节点信息和设置存储在/var/lib/iscsi/nodes目录中,并使用/etc/iscsi/iscsi.conf配置文件中的默认值。
    在发现模式中,sendtargets请求仅返回带有为此启动器配置的访问权限的目标

    iscsiadm  -m  discovery  -t  sendtargets  -p  192.168.100.100:3260
    
  5. 登陆目标

    iscsiadm  -m  node  -T  iqn.2025-05.com.example:disk1  -p 192.168.100.100:3260  -l
    
  6. 登录成功后使用fdisk -l命令查看磁盘情况,会发现客户端多了一个块设备
    fdisk -l

  7. 使用iscsi块存储
    对/dev/sdb设备进行分区,并格式化,规划划分分区大小为1G,格式化为xfs

    parted  /dev/sdb	#分区
    udevadm settle		#阻塞当前进程,直到所有 udev 事件处理完成
    mkfs.xfs  /dev/sdb1		#把分区格式化为xfs格式
    blkid		#查看分区
    
  8. 挂载
    mkdir /test

    #临时挂载
    mount  /dev/sdb1  /test#永久挂载
    blkid /dev/sdb5----把查询到的UUID复制
    vim  /etc/fstab#在/etc/fstab文件内
    UUID=...粘贴    /iscsistorage    xfs   defaults,_netdev   0   0
    
    mount  -a		//挂载
    

    注意:_netdev一定要加上,因为我们一旦重启了服务器,系统启动过程中是先读取/etc/fstab文件,然后再读取网卡的,由于我们iscsi存储时属于网络共享,所以如果我们没有写入_netdev这个参数的话,系统就识别不聊iscsi存储共享的设备,导致系统启动失败。

四、注销目标

  1. 取消挂载

  2. 临时注销
    iscsiadm -m node -T iqn.2020-03.com.example:disk1 -p 172.16.30.20:3260 -u

  3. 永久注销—永久注销iscsi目标前,一定先要临时注销iscsi目标。

     iscsiadm  -m  node  -T  iqn.2020-03.com.example:disk1  -p 172.16.30.20:3260   -uiscsiadm  -m  node  -T  iqn.2020-03.com.example:disk1  -p 172.16.30.20:3260  -o  delete
    
http://www.lryc.cn/news/573986.html

相关文章:

  • 从java角度理解io多路复用和redis为什么使用io多路复用
  • 品牌控价需要数据支撑与高效治理双驱动
  • 前端手写题(一)
  • MySQL基础函数篇
  • 黑马python(十三)
  • python高校教务管理系统
  • Rust智能指针演进:从堆分配到零复制的内存管理艺术
  • 算法与数据结构:动态规划DP
  • Windows11系统自定义关闭更新
  • 二刷苍穹外卖 day03
  • Unity2D 街机风太空射击游戏 学习记录 #12QFramework引入
  • 链接脚本基础语法
  • 国产12537穿甲弹侵彻仿真(显式动力学)
  • 抽象工厂设计模式
  • webpack+vite前端构建工具 - 9 webpack技巧性配置
  • Python商务数据分析——Python 入门基础知识学习笔记
  • Python打卡训练营Day56
  • 今日推荐:data-engineer-handbook
  • ICML 2025 | 时空数据(Spatial-Temporal)论文总结
  • 【RocketMQ 生产者和消费者】- 消费者的订阅关系一致性
  • Unity3D仿星露谷物语开发69之动作声音
  • 统计用户本月的连续登录天数
  • 系列一、windows中安装RabbitMQ
  • [论文阅读] 软件工程 + 教学 | 软件工程项目管理课程改革:从传统教学到以学生为中心的混合式学习实践
  • Linux——6.检测磁盘空间、处理数据文件
  • 爬虫入门练习(文字数据的爬取)
  • JavaScript 的 “==” 存在的坑
  • 跨域视角下强化学习重塑大模型推理:GURU框架与多领域推理新突破
  • TypeScript类型定义:Interface与Type的全面对比与使用场景
  • 线程池异步处理