iSCSI配置

Posted Mr.Bobby

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了iSCSI配置相关的知识,希望对你有一定的参考价值。

 

iSCSI介绍

几种存储的架构:

  • 直接存取 (direct-attached storage):例如本机上面的磁盘,就是直接存取设备;
  • 透过储存局域网络 (SAN):来自网络内的其他储存设备提供的磁盘(block device)
  • 网络文件系统 (NAS):来自 NAS 提供的文件系统,只能直接使用,不可进行格式化(NFS/SMB等)。

iSCSI架构将存储和使用主机分为两个部分:

  • iSCSI target:就是储存设备端,存放磁盘或 RAID 的设备,目前也能够将 Linux 主机仿真成 iSCSI target 了!目的在提供其他主机使用的『磁盘』
  • iSCSI initiator:就是能够使用 target 的客户端,通常是服务器。 也就是说,想要连接到 iSCSI target 的服务器,也必须要安装 iSCSI initiator 的相关功能后才能够使用 iSCSI target 提供的磁盘就是了。

 

iSCSI target需要安装scsi-target-utils软件包,iSCSI initiator 需要安装iscsi-initiator-utils

 

iSCSI软件及软件结构:

  • scsi-target-utils:用来将 Linux 系统仿真成为 iSCSI target 的功能;
  • iscsi-initiator-utils:挂载来自 target 的磁盘到 Linux 本机上。

 

iSCSI Target的iqn:

iSCSI 有一套自己分享 target 档名的定义,基本上,由 iSCSI 分享出来的 target 檔名都是以 iqn 为开头,意思是:『iSCSI Qualified Name (iSCSI 合格名称)』的意思

  iqn.yyyy-mm.<reversed domain name>:identifier

  iqn.年年-月.域名的反转写法  :这个分享的target名称

  iqn.2011-08.com.ccie:vbirddisk

 

另外,就如同一般外接式储存装置 (target 名称) 可以具有多个磁盘一样,我们的 target 也能够拥有数个磁盘装置的。 每个在同一个 target 上头的磁盘我们可以将它定义为逻辑单位编号 (Logical Unit Number, LUN)。我们的 iSCSI initiator 就是跟 target 协调后才取得 LUN 的存取权就是了 。在鸟哥的这个简单案例中,最终的结果,我们会有一个 target ,在这个 target 当中可以使用三个 LUN 的磁盘。

iSCSI Target

1. iSCSI Target软件结构

/etc/tgt/targets.conf

主要配置文件,设定要分享的磁盘格式与哪几颗;

/usr/sbin/tgt-admin

在线查询、删除 target 等功能的设定工具;

/usr/sbin/tgt-setup-lun

建立 target 以及设定分享的磁盘与可使用的客户端等工具软件。

/usr/sbin/tgtadm

手动直接管理的管理员工具 (可使用配置文件取代);

/usr/sbin/tgtd

主要提供 iSCSI target 服务的主程序;

/usr/sbin/tgtimg

建置预计分享的映像文件装置的工具 (以映像文件仿真磁盘);

 

  可以通过target进行分享的类型:

  • dd创建的仿真磁盘(无需预先格式化)
  • partition
  • 完整的磁盘
  • software raid
  • LVM中LV

 

2. 创建所需的磁盘装置

#创建dd文件
mkdir /srv/iscsi
dd if=/dev/zero  of=/srv/iscsi/disk1.im bs=1M count=20
chcon -Rv -t tgtd_var_lib_t /srv/iscsi/
 
#创建/dev/sdb1,/dev/sdb2两个分区
 fdisk /dev/sdb
 
#/dev/sdb2创建LVM分区
pvcreate /dev/sdb2
vgcreate server /dev/sdb2
lvcreate -L 300M -n iscsi01 server
 
lvscan 
  ACTIVE            /dev/server/iscsi01 [300.00 MiB] inherit

 

3.  修改tgt配置文件/etc/tgt/target.conf

 

vi /etc/tgt/targets.conf
<target iqn.2011-04.com.ccie:vdisk>
    backing-store     /srv/iscsi/disk1.img
    backing-store     /dev/sdb1
    backing-store    /dev/server/iscsi01
 
    initiator-address 192.168.0.0/24
    incominguser auth authpass
    write-cache off
</target>
 
# 此档案的语法如下:
<target iqn.相关装置的target名称>
    backing-store    /你的/虚拟设备/完整檔名-1
    backing-store    /你的/虚拟设备/完整檔名-2
    initiator-address   允许访问的IP地址
    incominguser      用户名和密码    
</target>

 

  • backing-store (虚拟的装置), direct-store (实际的装置): 设定装置时,如果你的整颗磁盘是全部被拿来当 iSCSI 分享之用,那么才能够使用 direct-store 。不过,根据网络上的其他文件, 似乎说明这个设定值有点危险的样子。所以,基本上还是建议单纯使用模拟的 backing-store 较佳
  • initiator-address (用户端地址): 如果你想要限制能够使用这个 target 的客户端来源,才需要填写这个设定值。基本上,不用设定它 (代表所有人都能使用的意思), 因为我们后来会使用 iptables 来规范可以联机的客户端
  • incominguser (用户账号密码设定): 如果除了来源 IP 的限制之外,你还想要让使用者输入账密才能使用你的 iSCSI target 的话,那么就加用这个设定项目。 此设定后面接两个参数,分别是账号与密码
  • write-cache [off|on] (是否使用快取): 在预设的情况下,tgtd 会使用快取来增快速度。不过,这样可能会有遗失数据的风险。所以,如果你的数据比较重要的话, 或许不要使用快取,直接存取装置会比较妥当一些。

 

4. 启动target服务

service tgtd start
chkconfig tgtd on
netstat -anptul | grep "tgtd"
tcp        0      0 0.0.0.0:3260                0.0.0.0:*                   LISTEN      2374/tgtd           
tcp        0      0 :::3260                     :::*                        LISTEN      2374/tgtd 
 
tgt-admin --show
Target 1: iqn.2017-06.com.ccie:vdisk
    System information:
        Driver: iscsi
        State: ready
    I_T nexus information:
    LUN information:
        LUN: 0                           <== LUN号码
            Type: controller
            SCSI ID: IET     00010000
            SCSI SN: beaf10
            Size: 0 MB, Block size: 1
            Online: Yes
            Removable media: No
            Prevent removal: No
            Readonly: No
            Backing store type: rdrw
            Backing store path: /srv/iscsi/disk1.img
            Backing store flags: 
        LUN: 1
            Type: disk
            SCSI ID: IET     00010001
            SCSI SN: beaf11
            Size: 214 MB, Block size: 512
            Online: Yes
            Removable media: No
            Prevent removal: No
            Readonly: No
            Backing store type: rdwr
            Backing store path: /dev/sdb1
            Backing store flags: 
        LUN: 2
            Type: disk
            SCSI ID: IET     00010002
            SCSI SN: beaf12
            Size: 315 MB, Block size: 512
            Online: Yes
            Removable media: No
            Prevent removal: No
            Readonly: No
            Backing store type: rdwr
            Backing store path: /dev/server/iscsi01
            Backing store flags: 
    Account information:
        auth
    ACL information:
        192.168.0.0/24
 
防火墙设置:
iptables -A INPUT  -p tcp -s 192.168.0.0/24 --dport 3260 -j ACCEPT
 

 

 

iSCSI  initiator配置

 

1.     软件结构

 

/etc/iscsi/iscsid.conf

主要的配置文件,用来连结到 iSCSI target 的设定;

/sbin/iscsid

启动 iSCSI initiator 的主要服务程序;

/sbin/iscsiadm

用来管理 iSCSI initiator 的主要设定程序;

/etc/init.d/iscsid

让本机模拟成为 iSCSI initiater 的主要服务;

/etc/init.d/iscsi

在本机成为 iSCSI initiator 之后,启动此脚本,让我们可以登入 iSCSI target。所以 iscsid 先启动后,才能启动这个服务。为了防呆,所以 /etc/init.d/iscsi 已经写了一个启动指令, 启动 iscsi 前尚未启动 iscsid ,则会先呼叫 iscsid 才继续处理 iscsi

 

2.     修改配置文件(写入target登陆的账号密码)

 

[[email protected] ~]# vim /etc/iscsi/iscsid.conf

node.session.auth.username = auth                       <==在 target 时设定的

node.session.auth.password = authpass                 <==约在 53, 54 行

discovery.sendtargets.auth.username = auth        <==约在 67, 68 行

discovery.sendtargets.auth.password = authpass

 

chkconfig iscsid on

chkconfig iscsi  on

 

 

由于我们尚未与 target 联机,所以 iscsi 并无法让我们顺利启动的!因此上面只要 chkconfig 即可,不需要启动他。

 

3.     侦测到target的相关数据

 

#检测iSCSI target设备端的数据

iscsiadm -m discovery -t sendtargets -p 192.168.0.5

192.168.0.5:3260,1 iqn.2017-06.com.ccie:vdisk

 

#显示被检测到的结果

ls -l /var/lib/iscsi/nodes/

total 4

drw-------. 3 root root 4096 Jun 29 21:31 iqn.2017-06.com.ccie:vdisk

 

 

[[email protected] ~]# iscsiadm -m discovery -t sendtargets -p 192.168.0.5

iscsiadm: No portals found

可能是target端配置地址限制。可以查看/etc/tgt/targets.conf中initiator-address配置

 

 

现在我们知道了 target 的名称,同时将所有侦测到的信息通通写入到上述 /var/lib/iscsi/nodes/中,若信息有修订过的话,那你可以到这个档案内修改,也可以透过 iscsiadm 的 update 功能处理相关参数的。

 

4.     开始联机target

 

#显示系统上所有target信息:

iscsiadm -m node

192.168.0.5:3260,1 iqn.2017-06.com.ccie:vdisk

#启动iscsi

/etc/init.d/iscsi restart

Logging in to [iface: default, target: iqn.2017-06.com.ccie:vdisk, portal: 192.168.0.5,3260] (multiple)

Login to [iface: default, target: iqn.2017-06.com.ccie:vdisk, portal: 192.168.0.5,3260] successful.

#也可以使用手工方式进行登陆:

iscsiadm -m node -T iqn.2017-06.com.ccie:vdisk --login

 

使用fdisk -l 可以查看到新增设备信息了。

 

 

在服务器上可以使用tgt-admin --show查看到客户端的挂在信息。

 

5.     更新/删除 target的方法

当 iSCSI target 可能因为某些原因被拿走或其他原因你需要关闭iSCSI initiator时。但是,又不能全部关掉 (/etc/init.d/iscsi stop), 因为还有其他的 iSCSI target 在使用。这个时候该如何取消不要的 target 呢?

 

[[email protected] ~]# iscsiadm -m node -T targetname --logout

[[email protected] ~]# iscsiadm -m node -o [delete|new|update] -T targetname

选项与参数:

--logout :就是注销 target,但是并没有删除 /var/lib/iscsi/nodes/ 内的数据

-o delete:删除后面接的那部 target 链接信息 (/var/lib/iscsi/nodes/*)

-o update:更新相关的信息

-o new   :增加一个新的 target 信息。

 

#查看现有target信息

iscsiadm -m node

192.168.0.5:3260,1 iqn.2017-06.com.ccie:vdisk

 

#iscsiadm -m node -T iqn.2017-06.com.ccie:vdisk --logout

Logging out of session [sid: 15, target: iqn.2017-06.com.ccie:vdisk, portal: 192.168.0.5,3260]

Logout of [sid: 15, target: iqn.2017-06.com.ccie:vdisk, portal: 192.168.0.5,3260] successful.

 

# 这个时候的 target 连结还是存在的,虽然注销你还是看的到!

 

#删除target信息

iscsiadm -m node -o delete -T iqn.2017-06.com.ccie:vdisk

 

#再次查看,target信息被删除了

 iscsiadm -m node

iscsiadm: No records found

 

#重启iscsi服务

/etc/init.d/iscsi restart

 

以上是关于iSCSI配置的主要内容,如果未能解决你的问题,请参考以下文章

配置iSCSI 服务端

ESXi6.5使用软件 iSCSI 配置网络连接的最佳做法

RHEL7.0 ISCSI配置

iscsi共享存储的简单配置和应用

Linux挂载iscsi网络存储

Linux挂载iscsi网络存储