ISCSI存储

发布于:2025-06-24 ⋅ 阅读:(13) ⋅ 点赞:(0)

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   -u
    
    iscsiadm  -m  node  -T  iqn.2020-03.com.example:disk1  -p 172.16.30.20:3260  -o  delete
    

网站公告

今日签到

点亮在社区的每一天
去签到