zoukankan      html  css  js  c++  java
  • 17 使用iSCSI服务部署网络存储

    17 使用iSCSI服务部署网络存储

    当前的硬盘接口类型主要有IDE、SCSI和SATA这3种。

    互联网小型计算机系统接口(iSCSI,Internet Small Computer System Interface)。这是一种将SCSI接口与以太网技术相结合的新型存储技术,可以用来在网络中传输SCSI接口的命令和数据。这样,不仅克服了传统SCSI接口设备的物理局限性,实现了跨区域的存储资源共享,还可以在不停机的状态下扩展存储容量。

    17.2 创建RAID磁盘阵列

    启动虚拟机系统,使用mdadm命令创建RAID磁盘阵列。其中,

    -Cv参数为创建阵列并显示过程,/dev/md0为生成的阵列组名称,

    -n 3参数为创建RAID 5磁盘阵列所需的硬盘个数,-l 5参数为RAID磁盘阵列的级别,

    -x 1参数为磁盘阵列的备份盘个数。在命令后面要逐一写上使用的硬盘名称。

    [root@linuxprobe ~]# mdadm -Cv /dev/md0 -n 3 -l 5 -x 1 /dev/sdb /dev/sdc /dev/sdd /dev/sde
    mdadm: layout defaults to left-symmetric
    mdadm: layout defaults to left-symmetric
    mdadm: chunk size defaults to 512K
    mdadm: size set to 20954624K
    mdadm: Defaulting to version 1.2 metadata
    mdadm: array /dev/md0 started.
    

    在上述命令成功执行之后,得到一块名称为/dev/md0的新设备,这是一块RAID 5级别的磁盘阵列,并且还有一块备份盘为硬盘数据保驾护航。

    可使用mdadm -D命令来查看设备的详细信息。

    另外,由于在使用远程设备时极有可能出现设备识别顺序发生变化的情况,因此,如果直接在fstab挂载配置文件中写入/dev/sdb、/dev/sdc等设备名称的话,就有可能在下一次挂载了错误的存储设备。而UUID值是设备的唯一标识符,可以用于精确地区分本地或远程设备。于是我们可以把这个值记录下来,一会儿准备填写到挂载配置文件中。

    [root@linuxprobe ~]# mdadm -D /dev/md0
    /dev/md0:
            Version : 1.2
      Creation Time : Thu Sep 24 21:59:57 2017
         Raid Level : raid5
         Array Size : 41909248 (39.97 GiB 42.92 GB)
      Used Dev Size : 20954624 (19.98 GiB 21.46 GB)
       Raid Devices : 3
      Total Devices : 4
        Persistence : Superblock is persistent
        Update Time : Thu Sep 24 22:02:23 2017
              State : clean 
     Active Devices : 3
    Working Devices : 4
     Failed Devices : 0
      Spare Devices : 1
             Layout : left-symmetric
         Chunk Size : 512K
               Name : linuxprobe.com:0  (local to host linuxprobe.com)
               UUID : 3370f643:c10efd6a:44e91f2a:20c71f3e
             Events : 26
        Number   Major   Minor   RaidDevice State
           0       8       16        0      active sync   /dev/sdb
           1       8       32        1      active sync   /dev/sdc
           4       8       48        2      active sync   /dev/sdd
           3       8       64        -      spare   /dev/sde
    
    17.3 配置iSCSI服务端
    [root@linuxprobe ~]# yum -y install targetd targetcli
    
    [root@linuxprobe ~]# systemctl start targetd
    [root@linuxprobe ~]# systemctl enable targetd
     ln -s '/usr/lib/systemd/system/targetd.service' '/etc/systemd/system/multi-user.target.wants/targetd.service'
    
    [root@linuxprobe ~]# targetcli
    

    第3步:创建iSCSI target名称及配置共享资源。iSCSI target名称是由系统自动生成的,这是一串用于描述共享资源的唯一字符串。稍后用户在扫描iSCSI服务端时即可看到这个字符串,因此我们不需要记住它。系统在生成这个target名称后,还会在/iscsi参数目录中创建一个与其字符串同名的新“目录”用来存放共享资源。我们需要把前面加入到iSCSI共享资源池中的硬盘设备添加到这个新目录中,这样用户在登录iSCSI服务端后,即可默认使用这硬盘设备提供的共享存储资源了。

    /> cd iscsi
    /iscsi> 
    /iscsi> create
    Created target iqn.2003-01.org.linux-iscsi.linuxprobe.x8664:sn.d497c356ad80.
    Created TPG 1.
    /iscsi> cd iqn.2003-01.org.linux-iscsi.linuxprobe.x8664:sn.d497c356ad80/
    /iscsi/iqn.20....d497c356ad80> ls
    o- iqn.2003-01.org.linux-iscsi.linuxprobe.x8664:sn.d497c356ad80 ...... [TPGs: 1]
      o- tpg1 ............................................... [no-gen-acls, no-auth]
        o- acls .......................................................... [ACLs: 0]
        o- luns .......................................................... [LUNs: 0]
        o- portals .................................................... [Portals: 0]
    /iscsi/iqn.20....d497c356ad80> cd tpg1/luns
    /iscsi/iqn.20...d80/tpg1/luns> create /backstores/block/disk0 
    Created LUN 0.
    

    第4步:设置访问控制列表(ACL)

    /iscsi/iqn.20...d80/tpg1/luns> cd ..
    /iscsi/iqn.20...c356ad80/tpg1> cd acls 
    /iscsi/iqn.20...d80/tpg1/acls> create iqn.2003-01.org.linux-iscsi.linuxprobe.x8664:sn.d497c356ad80:client
    Created Node ACL for iqn.2003-01.org.linux-iscsi.linuxprobe.x8664:sn.d497c356ad80:client
    Created mapped LUN 0.
    

    第5步:设置iSCSI服务端的监听IP地址和端口号。位于生产环境中的服务器上可能有多块网卡,那么到底是由哪个网卡或IP地址对外提供共享存储资源呢?这就需要我们在配置文件中手动定义iSCSI服务端的信息,即在portals参数目录中写上服务器的IP地址。接下来将由系统自动开启服务器192.168.10.10的3260端口将向外提供iSCSI共享存储资源服务:

    /iscsi/iqn.20...d80/tpg1/acls> cd ..
    /iscsi/iqn.20...c356ad80/tpg1> cd portals 
    /iscsi/iqn.20.../tpg1/portals> create 192.168.10.10
    Using default IP port 3260
    Created network portal 192.168.10.10:3260.
    

    第6步:配置妥当后检查配置信息,重启iSCSI服务端程序并配置防火墙策略。在参数文件配置妥当后,可以浏览刚刚配置的信息,确保与下面的信息基本一致。在确认信息无误后输入exit命令来退出配置。注意,千万不要习惯性地按Ctrl + C组合键结束进程,这样不会保存配置文件,我们的工作也就白费了。最后重启iSCSI服务端程序,再设置firewalld防火墙策略,使其放行3260/tcp端口号的流量。

    /iscsi/iqn.20.../tpg1/portals> ls /
    o- / ........................... [...]
      o- backstores................. [...]
      | o- block ................... [Storage Objects: 1]
      | | o- disk0 ................. [/dev/md0 (40.0GiB) write-thru activated]
      | o- fileio .................. [Storage Objects: 0]
      | o- pscsi ................... [Storage Objects: 0]
      | o- ramdisk ................. [Storage Objects: 0]
      o- iscsi ..................... [Targets: 1]
      | o- iqn.2003-01.org.linux-iscsi.linuxprobe.x8664:sn.d497c356ad80 .... [TPGs: 1]
      |   o- tpg1 .................. [no-gen-acls, no-auth]
      |     o- acls ........................................................ [ACLs: 1]
      |     | o- iqn.2003-01.org.linux-iscsi.linuxprobe.x8664:sn.d497c356ad80:client [Mapped LUNs: 1]
      |     |   o- mapped_lun0 ............................................. [lun0 block/disk0 (rw)]  
        o- luns .................... [LUNs: 1]
      |     | o- lun0 .............. [block/disk0 (/dev/md0)]
      |     o- portals ............. [Portals: 1]
      |       o- 192.168.10.10:3260  [OK]
      o- loopback .................. [Targets: 0]
    /> exit
    Global pref auto_save_on_exit=true
    Last 10 configs saved in /etc/target/backup.
    Configuration saved to /etc/target/saveconfig.json
    [root@linuxprobe ~]# systemctl restart targetd
    [root@linuxprobe ~]# firewall-cmd --permanent --add-port=3260/tcp 
    success 
    [root@linuxprobe ~]# firewall-cmd --reload 
    success
    
    17.4 配置Linux客户端
    [root@linuxprobe ~]# yum install iscsi-initiator-utils 
    

    iSCSI协议是通过客户端的名称来进行验证,而该名称也是iSCSI客户端的唯一标识,而且必须与服务端配置文件中访问控制列表中的信息一致,否则客户端在尝试访问存储共享设备时,系统会弹出验证失败的保存信息。

    下面我们编辑iSCSI客户端中的initiator名称文件,把服务端的访问控制列表名称填写进来,然后重启客户端iscsid服务程序并将其加入到开机启动项中:

    [root@linuxprobe ~]# vim /etc/iscsi/initiatorname.iscsi
    InitiatorName=iqn.2003-01.org.linux-iscsi.linuxprobe.x8664:sn.d497c356ad80:client
    [root@linuxprobe ~]# systemctl restart iscsid
    [root@linuxprobe ~]# systemctl enable iscsid
     ln -s '/usr/lib/systemd/system/iscsid.service' '/etc/systemd/system/multi-user.target.wants/iscsid.service'
    

    iSCSI客户端访问并使用共享存储资源的步骤很简单,只需要记住一个小口诀“先发现,再登录,最后挂载并使用”。iscsiadm是用于管理、查询、插入、更新或删除iSCSI数据库配置文件的命令行工具,用户需要先使用这个工具扫描发现远程iSCSI服务端,然后查看找到的服务端上有哪些可用的共享存储资源。其中,-m discovery参数的目的是扫描并发现可用的存储资源,-t st参数为执行扫描操作的类型,-p 192.168.10.10参数为iSCSI服务端的IP地址:

    [root@linuxprobe ~]# iscsiadm -m discovery -t st -p 192.168.10.10
    192.168.10.10:3260,1 iqn.2003-01.org.linux-iscsi.linuxprobe.x8664:sn.d497c356ad80
    

    在使用iscsiadm命令发现了远程服务器上可用的存储资源后,接下来准备登录iSCSI服务端。其中,

    -m node参数为将客户端所在主机作为一台节点服务器,

    -T iqn.2003-01. org.linux-iscsi.linuxprobe.x8664:sn.d497c356ad80参数为要使用的存储资源(大家可以直接复制前面命令中扫描发现的结果,以免录入错误),

    -p 192.168.10.10参数依然为对方iSCSI服务端的IP地址。

    最后使用--login或-l参数进行登录验证。

    [root@linuxprobe ~]# iscsiadm -m node -T iqn.2003-01.org.linux-iscsi.linuxprobe.x8664:sn.d497c356ad80 -p 192.168.10.10 --login
    Logging in to [iface: default, target: iqn.2003-01.org.linux-iscsi.linuxprobe.x8664:sn.d497c356ad80, portal: 192.168.10.10,3260] (multiple)
    Login to [iface: default, target: iqn.2003-01.org.linux-iscsi.linuxprobe.x8664:sn.d497c356ad80, portal: 192.168.10.10,3260] successful.
    

    在iSCSI客户端成功登录之后,会在客户端主机上多出一块名为/dev/sdb的设备文件。第6章曾经讲过,udev服务在命名硬盘名称时,与硬盘插槽是没有关系的。接下来可以像使用本地主机上的硬盘那样来操作这个设备文件了。

    [root@linuxprobe ~]# file /dev/sdb 
    /dev/sdb: block special
    

    下面进入标准的磁盘操作流程。考虑到大家已经在第6章学习了这部分内容,外加这个设备文件本身只有40GB的容量,因此我们不再进行分区,而是直接格式化并挂载使用。

    [root@linuxprobe ~]# mkfs.xfs /dev/sdb
    log stripe unit (524288 bytes) is too large (maximum is 256KiB)
    log stripe unit adjusted to 32KiB
    meta-data=/dev/sdb               isize=256    agcount=16, agsize=654720 blks
             =                       sectsz=512   attr=2, projid32bit=1
             =                       crc=0
    data     =                       bsize=4096   blocks=10475520, imaxpct=25
             =                       sunit=128    swidth=256 blks
    naming   =version 2              bsize=4096   ascii-ci=0 ftype=0
    log      =internal log           bsize=4096   blocks=5120, version=2
             =                       sectsz=512   sunit=8 blks, lazy-count=1
    realtime =none                   extsz=4096   blocks=0, rtextents=0
    [root@linuxprobe ~]# mkdir /iscsi
    [root@linuxprobe ~]# mount /dev/sdb /iscsi
    [root@linuxprobe ~]# df -h
    Filesystem             Size  Used Avail Use% Mounted on
    /dev/mapper/rhel-root   18G  3.4G   15G  20% /
    devtmpfs               734M     0  734M   0% /dev
    tmpfs                  742M  176K  742M   1% /dev/shm
    tmpfs                  742M  8.8M  734M   2% /run
    tmpfs                  742M     0  742M   0% /sys/fs/cgroup
    /dev/sr0               3.5G  3.5G     0 100% /media/cdrom
    /dev/sda1              497M  119M  379M  24% /boot
    /dev/sdb                40G   33M   40G   1% /iscsi
    

    从此以后,这个设备文件就如同是客户端本机主机上的硬盘那样工作。需要提醒大家的是,由于udev服务是按照系统识别硬盘设备的顺序来命名硬盘设备的,当客户端主机同时使用多个远程存储资源时,如果下一次识别远程设备的顺序发生了变化,则客户端挂载目录中的文件也将随之混乱。为了防止发生这样的问题,我们应该在/etc/fstab配置文件中使用设备的UUID唯一标识符进行挂载,这样,不论远程设备资源的识别顺序再怎么变化,系统也能正确找到设备所对应的目录。

    blkid命令用于查看设备的名称、文件系统及UUID。可以使用管道符(详见第3章)进行过滤,只显示与/dev/sdb设备相关的信息:

    [root@linuxprobe ~]# blkid | grep /dev/sdb
    /dev/sdb: UUID="eb9cbf2f-fce8-413a-b770-8b0f243e8ad6" TYPE="xfs" 
    

    由于/dev/sdb是一块网络存储设备,而iSCSI协议是基于TCP/IP网络传输数据的,因此必须在/etc/fstab配置文件中添加上_netdev参数,表示当系统联网后再进行挂载操作,以免系统开机时间过长或开机失败:

    [root@linuxprobe ~]# vim /etc/fstab
    #
    # /etc/fstab
    # Created by anaconda on Wed May 4 19:26:23 2017
    #
    # Accessible filesystems, by reference, are maintained under '/dev/disk'
    # See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
    #
    /dev/mapper/rhel-root / xfs defaults 1 1
    UUID=812b1f7c-8b5b-43da-8c06-b9999e0fe48b /boot xfs defaults 1 2
    /dev/mapper/rhel-swap swap swap defaults 0 0
    /dev/cdrom /media/cdrom iso9660 defaults 0 0 
    UUID=eb9cbf2f-fce8-413a-b770-8b0f243e8ad6 /iscsi xfs defaults,_netdev 0 0
    

    如果我们不再需要使用iSCSI共享设备资源了,可以用iscsiadm命令的-u参数将其设备卸载:

    [root@linuxprobe ~]# iscsiadm -m node -T iqn.2003-01.org.linux-iscsi.linuxprobe.x8664:sn.d497c356ad80 -u
    
    Logging out of session [sid: 7, target : iqn.2003-01.org.linux-iscsi.linuxprobe.x8664:sn.d497c356ad80, portal: 192.168.10.10,3260]
    
    Logout of [sid: 7, target: iqn.2003-01.org.linux-iscsi.linuxprobe.x8664:sn.d497c356ad80,portal:192.168.10.10,3260] successful.
    
  • 相关阅读:
    Asp.net中导出Excel文档(Gridview)
    以太坊难度炸弹是什么?极大抑制矿工继续以POW方式挖矿!
    Solidity语言基础 和 Etherum ERC20合约基础
    BCH/BSV coin split troubleshooting
    比特币学习-Transaction的locktime属性
    在BCH硬分叉后防止重放攻击-2
    在BCH硬分叉后防止重放攻击-1
    区块链硬分叉-软分叉简单了解
    BTC和BCH 区别和联系?
    BCHABC/BCHSV的矛盾所在
  • 原文地址:https://www.cnblogs.com/gerenboke/p/12676975.html
Copyright © 2011-2022 走看看