共享存储之iscsi网络共享存储应用详解

iSCSI概述:

iSCSI技术是一种由IBM公司研究开发的,是一个供硬件设备使用的可以在IP协议的上层运行的SCSI指令集,这种指令集合可以实现在IP网络上运行SCSI协议,使其能够在诸如高速千兆以太网上进行路由选择。iSCSI技术是一种新储存技术,该技术是将现有SCSI接口与以太网络(Ethernet)技术结合,使服务器可与使用IP网络的储存装置互相交换资料。

iSCSI:Internet 小型计算机系统接口 (iSCSI:Internet Small Computer System Interface)。

Internet 小型计算机系统接口(iSCSI)是一种基于 TCP/IP的协议,用来建立和管理 IP 存储设备、主机和客户机等之间的相互连接,并创建存储区域网络(SAN)。SAN 使得 SCSI 协议应用于高速数据传输网络成为可能,这种传输以数据块级别(block-level)在多个数据存储网络间进行。

SCSI 结构基于客户/服务器模式,其通常应用环境是:设备互相靠近,并且这些设备由 SCSI 总线连接。iSCSI 的主要功能是在 TCP/IP 网络上的主机系统(启动器 initiator)和存储设备(目标器 target)之间进行大量数据的封装和可靠传输过程。此外,iSCSI 提供了在 IP 网络封装 SCSI 命令,且运行在 TCP 上。

完整的iSCSI系统的拓扑结构如下:

iSCSI配置实现过程如下:

实验系统环境如下:

操作系统: CentOS release 6.5 (Final)

director(iSCSI Target): 172.16.100.3/16 scsi-target-utils-1.0.24-10.el6.x86_64

node1(iSCSI Initiator) : 172.16.100.6/16  iscsi-initiator-utils.x86_64 0:6.2.0.873-10.el6

关闭防火墙:

iptables: Firewall is not running.

关闭SELINUX:

setenforce: SELinux is disabled

准备工作:

iSCSI可分享的设备类型有很多,包括镜像文件(*.img)、分区(partition)、物理硬盘、raid设备、逻辑卷等,下面我们测试常用的几种设备类型:

(1)准备共享的设备分区类型

# fdisk -l /dev/sdb 

Disk /dev/sdb: 128.8 GB, 128849018880 bytes
255 heads, 63 sectors/track, 15665 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000

建立所需要的新分区大小为20G:

# fdisk -l /dev/sdb 
Command (m for help): n  
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-15665, default 1): 
Using default value 1
Last cylinder, +cylinders or +size{K,M,G} (1-15665, default 15665): +20G

重新读取分区表:

# partx -a /dev/sdb
# fdisk -l /dev/sdb1

Disk /dev/sdb1: 21.5 GB, 21484399104 bytes
255 heads, 63 sectors/track, 2611 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000

(2)准备要共享的镜像文件

在director的/srv目录下创建一个1G大小的镜像文件

# mkdir /srv/iscsi
# dd if=/dev/zero of=/srv/iscsi/disk1.img bs=1M count=1024
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB) copied, 36.8793 s, 29.1 MB/s
[[email protected] ~]# ll -lh /srv/iscsi/disk1.img 
-rw-r--r-- 1 root root 1.0G Aug 20 14:40 /srv/iscsi/disk1.img

(3)创建逻辑卷

创建一个大小为10G的LV

# pvcreate /dev/sdc 
  Physical volume "/dev/sdc" successfully created
# vgcreate vg1 /dev/sdc 
  Volume group "vg1" successfully created
# lvcreate -L 20G -n iscsi vg1
  Logical volume "iscsi" created

(4)准备共享的设备物理硬盘

添加一个大小为120G的硬盘

配置director(iSCSI Target)

(1)安装scsi-target-utils管理工具

CentOS自带scsi-target-utils软件包,使用该工具进行target配置:

# yum -y install scsi-target-utils
# chkconfig tgtd on
# service tgtd start
# ss -tunlp | grep tgt
tcp    LISTEN     0      128                   :::3260                 :::*      users:(("tgtd",1259,5),("tgtd",1262,5))
tcp    LISTEN     0      128                    *:3260                  *:*      users:(("tgtd",1259,4),("tgtd",1262,4))

(2)配置target有以下两种方式:

第一种方式:使用tgtadm全命令工具创建;此命令工具配置的iscsi target系统重启之后会丢失。

第二种方式:编辑/etc/tgt/targets.conf,编辑配置文件生成的iscsi target系统重启之后不会丢失。

第一种使用target命令工具配置如下:

(1)创建一个target:

# tgtadm -L iscsi -o new -m target -t 1 -T iqn.2016.08.com.samlee:iscsi.disk

(2)查询创建的target所有信息:

# tgtadm -L iscsi -m target -o show 
或:
# tgt-admin -show
Target 1: iqn.2016.08.com.samlee:iscsi.disk    ##target名称,以及标识号
    System information: ##系统信息及状态
        Driver: iscsi
        State: ready
    I_T nexus information:
    LUN information:
        LUN: 0        ##逻辑单元号;默认从0开始
            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: null    ##块设备类型
            Backing store path: None    ##提供块设备的位置
            Backing store flags:         ##块设备标记
    Account information:                ##授权用户访问
    ACL information:                    ##授权ip地址段访问

(3)在target中添加分区设备

# tgtadm -L iscsi -m logicalunit -o new -t 1 -l 1 -b /dev/sdb1

(4)在target中添加镜像文件

# tgtadm -L iscsi -m logicalunit -o new -t 1 -l 2 -b /srv/iscsi/disk1.img

(5)在target中添加lv逻辑卷

# tgtadm -L iscsi -m logicalunit -o new -t 1 -l 3 -b /dev/vg1/iscsi

(6)在target中添加硬盘设备

# tgtadm -L iscsi -m logicalunit -o new -t 1 -l 4 -b /dev/sdd

(7)给target授权允许172.16.0.0/16网络访问及iscsiuser用户访问,默认是不允许任何用户访问

# tgtadm -L iscsi -m account -o new --user iscsiuser --password iscsiuser
# tgtadm -L iscsi -m account -o bind --tid 1 --user iscsiuser
# tgtadm -L iscsi -m target -o bind -t 1 -I 172.16.0.0/16

第二种方式:编辑/etc/tgt/targets.conf

target主配置文件为/etc/tgt/targets.conf,下面我们来设置改文件。
在该文件最后追加以下设置:

<target iqn.2016.08.com.samlee:iscsi.disk>
        backing-store /srv/iscsi/disk1.img
        backing-store /dev/sdb1
        backing-store /dev/vg1/iscsi
        backing-store /dev/sdd
        incominguser iscsiuser iscsiuser
        initiator-address 172.16.0.0/16
</target>

说明:

说明:
(1)iqn = iSCSI Qualified Name

(2)iSCSI target的名称规则如下:
iqn.2016.08.com.samlee:iscsi.disk
iqn.年份-月份.域名反写.设备识别

(2)每个在同一个target上的backing-store 称为逻辑单元号(Logical Unit Number,LUN),
 这个实验中有4个LUN。

配置iSCSI Initiator

(1)安装iSCSI客户端工具

# yum -y install iscsi-initiator-utils

(2)设置开机自启动

# chkconfig iscsi on
# chkconfig iscsid on

(3)配置initiator文件
initiator的配置文件位于/etc/iscsi/,该目录下有两个文件,initiatorname.iscsi 和iscsid.conf,其中iscsid.conf 是其配置文件,initiatorname.iscsi 是标记了initiator的名称,我们做如下配置:

# echo "InitiatorName=`iscsi-iname -p iqn.2016.08.com.samlee:iscsi.disk`" > /etc/iscsi/initiatorname.iscsi
# echo "InitiatorAlias=node1.samlee.com" >> /etc/iscsi/initiatorname.iscsi

配置iscsid.conf文件开启用户认证:

# vim /etc/iscsi/iscsid.conf
启用一下选项:
node.session.auth.authmethod = CHAP
node.session.auth.username = iscsiuser
node.session.auth.password = iscsiuser

启动iscsi客户端服务

# service iscsi start
# service iscsid start

(4)侦测target

如果我们事先不知道目标主机的target名称,我们就需要进行侦测:

# iscsiadm -m discovery -t st -p 172.16.100.3
Starting iscsid:                                           [  OK  ]
172.16.100.3:3260,1 iqn.2016.08.com.samlee:iscsi.disk

参数选项说明:

-m discovery  //侦测target
-t sendtargets  //通过iscsi协议
-p IP:port  //指定target的IP和port,不写port的话,默认为3260

(5)查看nodes
iscsiadm 侦测到的结果会写入/var/lib/iscsi/nodes/ 中,因此只需启动/etc/init.d/iscsi 就能够在下次开机时,自动连接到正确的target了

# ls /var/lib/iscsi/
ifaces  isns  nodes  send_targets  slp  static
# ls /var/lib/iscsi/send_targets/
172.16.100.3,3260
# ls -lR /var/lib/iscsi/nodes/
/var/lib/iscsi/nodes/:
total 4
drw------- 3 root root 4096 Aug 20 16:42 iqn.2016.08.com.samlee:iscsi.disk

/var/lib/iscsi/nodes/iqn.2016.08.com.samlee:iscsi.disk:
total 4
drw------- 2 root root 4096 Aug 20 16:42 172.16.100.3,3260,1

/var/lib/iscsi/nodes/iqn.2016.08.com.samlee:iscsi.disk/172.16.100.3,3260,1:
total 4
-rw------- 1 root root 1818 Aug 20 16:42 default

侦测信息都写入了/var/lib/iscsi/nodes/iqn.2016.08.com.samlee:iscsi.disk/172.16.100.3,3260,1/default文件中。

(6)连接target
查看目前系统上面所有的target

# iscsiadm -m node
172.16.100.3:3260,1 iqn.2016.08.com.samlee:iscsi.disk

登陆target

# iscsiadm -m node -T iqn.2016.08.com.samlee:iscsi.disk -P 172.16.100.3 -l
Logging in to [iface: default, target: iqn.2016.08.com.samlee:iscsi.disk, portal: 172.16.100.3,3260] (multiple)
Login to [iface: default, target: iqn.2016.08.com.samlee:iscsi.disk, portal: 172.16.100.3,3260] successful.

(6)查看磁盘状态如下图所示:

现在可以看到,initiator 上面多了四块硬盘,大小和target上的LUN一致。这时你就可以像使用本地磁盘一样使用这些iSCSI设备。

测试应用如下:

(1)将/dev/sdb 和/dev/sdc 创建成LV挂载使用:

创建LV逻辑卷:

# pvcreate /dev/sdb /dev/sdc 
# vgcreate vg_iscsi /dev/sdb /dev/sdc 
# lvcreate -L 130G -n lv_iscsi vg_iscsi

格式化创建文件并挂载:

# mke2fs -t ext4 /dev/vg_iscsi/lv_iscsi
# mkdir /data
# vim /etc/fstab
/dev/vg_iscsi/lv_iscsi  /data                   ext4    defaults,_netdev        0 0
# mount -a

创建测试文件:

# touch  /data/iscsi{1..100}.txt
# ls /data/

创建测试文件成功后,重启客户端:

# df -TH
# ls /data/

以上为iSCSI配置实现全过程。

时间: 2024-10-11 22:01:51

共享存储之iscsi网络共享存储应用详解的相关文章

Java网络编程和NIO详解9:基于NIO的网络编程框架Netty

Java网络编程和NIO详解9:基于NIO的网络编程框架Netty 转自https://sylvanassun.github.io/2017/11/30/2017-11-30-netty_introduction/ netty是基于NIO实现的异步事件驱动的网络编程框架,学完NIO以后,应该看看netty的实现,netty框架涉及的内容特别多,这里只介绍netty的基本使用和实现原理,更多扩展的内容将在以后推出. 本系列文章首发于我的个人博客:https://h2pl.github.io/ 欢迎

Java网络编程和NIO详解8:浅析mmap和Direct Buffer

Java网络编程与NIO详解8:浅析mmap和Direct Buffer 本系列文章首发于我的个人博客:https://h2pl.github.io/ 欢迎阅览我的CSDN专栏:Java网络编程和NIO https://blog.csdn.net/column/details/21963.html 部分代码会放在我的的Github:https://github.com/h2pl/ Java网络编程与NIO详解8:浅析mmap和Direct Buffer 之前看到一篇文章说epoll中在维护epo

iOS网络编程(六) NSURLSession详解

昨夜浏览Demo的时候,看到别人请求网络数据用的是NSURLSession,当时就在想这里什么,怎么没有用过,引起了我的好奇心,遂去百度-谷歌-官方文档一一查看,有了一定的了解,原来NSURLSession是iOS7中新的网络接口,它与咱们熟悉的NSURLConnection是并列的. 查找资料,写了一个小Demo,大家可以看看,有什么不足的地方,可以留言帮我指出来. // // HMTRootViewController.m // // // Created by HMT on 14-6-7.

Fabric网络环境启动过程详解

这篇文章对fabric的网络环境启动过程进行讲解,也就是我们上节讲到的启动测试fabric网络环境时运行network_setup.sh这个文件的执行流程 fabric网络环境启动过程详解 上一节我们讲到 fabric网络环境的启动测试,主要是使用 ./network_setup.sh up 这个命令,所以fabric网络环境启动的重点就在network_setup.sh这个文件中.接下来我们就分析一下network_setup.sh这个文件network_setup.sh其中包括两个部分,一个

Java网络编程和NIO详解6:Linux epoll实现原理详解

Java网络编程和NIO详解6:Linux epoll实现原理详解 本系列文章首发于我的个人博客:https://h2pl.github.io/ 欢迎阅览我的CSDN专栏:Java网络编程和NIO https://blog.csdn.net/column/details/21963.html 部分代码会放在我的的Github:https://github.com/h2pl/ Linux epoll实现原理详解 在linux 没有实现epoll事件驱动机制之前,我们一般选择用select或者pol

Java网络编程和NIO详解7:浅谈 Linux 中NIO Selector 的实现原理

Java网络编程和NIO详解7:浅谈 Linux 中NIO Selector 的实现原理 转自:https://www.jianshu.com/p/2b71ea919d49 本系列文章首发于我的个人博客:https://h2pl.github.io/ 欢迎阅览我的CSDN专栏:Java网络编程和NIO https://blog.csdn.net/column/details/21963.html 部分代码会放在我的的Github:https://github.com/h2pl/ 浅谈 Linux

LINux网络的NAPI机制详解一

在查看NAPI机制的时候发现一篇介绍NAPI引入初衷的文章写的很好,通俗易懂,就想要分享下,重要的是博主还做了可以在他基础上任意修改,而并不用注明出处的声明,着实令我敬佩,不过还是附上原文链接! http://blog.csdn.net/dog250/article/details/5302853 处理外部事件是cpu必须要做的事,因为cpu和外设的不平等性导致外设的事件被cpu 当作是外部事件,其实它们是平等的,只不过冯氏机器不这么认为罢了,既然要处理外部事件,那么就需要一定的方法,方法不止一

Linux网络安全模型及iptables详解(1)

Linux网络安全模型及iptables详解 基本概念 Firewall:工作在主机或网络边缘,对进出的报文按事先定义的规则进行检查, 并且由匹配到的规则进行处理的一组硬件或软件,甚至可能是两者的组合 硬件防火墙:在硬件级别实现部分功能的防火墙:另一个部分功能基于软件实现 软件防火墙:应用软件处理逻辑运行于通用硬件平台之上的防火墙: 主机防火墙:工作于主机边缘,只能对一台主机起到保护作用 网络防火墙:工作于网络边缘,对多台主机起到保护作用(定向规则) iptables:防火墙规则编写工具,位于用

iPhone上网络抓包方法详解

iPhone上网络抓包方法详解 Mac上常用抓包工具: Charles, Fiddler, Wireshark Wi-Fi环境下抓包 (以Charles为例) Mac和iPhone连接相同Wi-Fi 打开Charles,Help->Local IP Address 打开iPhone无线局域网设置, 选中连接的Wi-Fi, 配置代理,服务器输入步骤2中的ip地址,端口号默认8888 设置好之后,就可以在Charles中看到手机上的所有请求 Charles还有许多其他的功能,可以抓https请求,设