iSCSI(一) iSCSI详解 及 iSCSI配置

最全的Linux教程,Linux从入门到精通

======================

  1. linux从入门到精通(第2版)

  2. Linux系统移植

  3. Linux驱动开发入门与实战

  4. LINUX 系统移植 第2版

  5. Linux开源网络全栈详解 从DPDK到OpenFlow

华为18级工程师呕心沥血撰写3000页Linux学习笔记教程

第一份《Linux从入门到精通》466页

====================

内容简介

====

本书是获得了很多读者好评的Linux经典畅销书**《Linux从入门到精通》的第2版**。本书第1版出版后曾经多次印刷,并被51CTO读书频道评为“最受读者喜爱的原创IT技术图书奖”。本书第﹖版以最新的Ubuntu 12.04为版本,循序渐进地向读者介绍了Linux 的基础应用、系统管理、网络应用、娱乐和办公、程序开发、服务器配置、系统安全等。本书附带1张光盘,内容为本书配套多媒体教学视频。另外,本书还为读者提供了大量的Linux学习资料和Ubuntu安装镜像文件,供读者免费下载。

华为18级工程师呕心沥血撰写3000页Linux学习笔记教程

本书适合广大Linux初中级用户、开源软件爱好者和大专院校的学生阅读,同时也非常适合准备从事Linux平台开发的各类人员。

需要《Linux入门到精通》、《linux系统移植》、《Linux驱动开发入门实战》、《Linux开源网络全栈》电子书籍及教程的工程师朋友们劳烦您转发+评论

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以点击这里获取!

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

如上图,SCSI总线通过SCSI控制器来和硬盘之类的设备进行通信, SCSI控制器称为Target,访问的客户端应用称为Initiator。窄SCSI总线最多允许8个、宽SCSI总线最多允许16个不同的SCSI设备和它进行连接,每个SCSI设备都必须有自己唯一的SCSI ID(设备的地址)

**LUN(Logical Unit Number,逻辑单元号)**是为了使用和描述更多设备及对象而引进的一个方法,每个SCSI ID上最多有32个LUN,一个LUN对应一个逻辑设备。

广泛应用于小型机上,正在成为PC 服务器的标准接口,实现高速数据传输(可达320MB/s),常见的SCSI设备:硬盘、磁盘阵列、打印机、光盘刻录机等。

1-2、iSCSI实现

1、iSCSI Initiator

iSCSI 启动器,从本质上说,iSCSI 启动器是一个客户端设备,用于将请求连接并启动到服务器(iSCSI 目标)。

如上图,iSCSI 启动器有三种实现方式:可以完全基于硬件实现,比如 iSCSI HBA 卡;硬件TOE卡与软件结合的方式;完全基于软件实现,而软件 iSCSI 启动器适用于大部分主流操作系统平台,下面就是用软件方式来配置。

2、iSCSI Target

即 iSCSI 目标,它是 iSCSI 网络的服务器组件,通常是一个存储设备,用于包含所需的数据并回应来自 iSCSI 启动器的请求。

3、工作过程

Initiator发出请求后,会在本地的操作系统会生成了相应的SCSI命令和数据I/O请求,然后这些命令和请求被封装加密成IP信息包,通过以太网(TCP/IP)传输到Targer。

当Targer接收到信息包时,将进行解密和解析,将SCSI命令和I/O请求分开。SCSI命令被发送到SCSI控制器,再传送到SCSI存储设备。

设备执行SCSI命令后的响应,经过Target封装成iSCSI响应PDU,再通过已连接的TCP/IP网络传送给Initiator。

Initiator会从iSCSI响应PDU里解析出SCSI响应并传送给操作系统,操作系统再响应给应用程序。

1-3、iSCSI与FC SAN

FC(FiberChannel,光纤通道)是利用光纤信道结合光纤通道交换机实现高速的数据存储网络。FC性能很好,但价格却贵得惊人,管理起来也非常困难。

所以iSCSI利用现有的以太网络,用户只需要少量的投入,就可以方便、快捷地对信息和数据进行交互式传输和管理。当然iSCSI与FC相比也存在明显的不足,如速度性能、安全可靠性。

1-4、SAN与NAS / iSCSI与NFS

通过前面文章知道,SAN与NAS是完全不同架构的存储方案,前者支持Block协议,后者则支持File协议;SAN结构中,文件管理系统(FS)还是分别在每一个应用服务器上,会产生I/O操作,而NAS则是每个应用服务器通过网络共享协议(如:NFS、CIFS)使用同一个文件管理系统,所以CPU密集型应用可以选用NAS。SAN是将目光集中在磁盘、磁带以及联接它们的可靠的基础结构,而NAS是将目光集中在应用、用户和文件以及它们共享的数据上,显得更"高级"。将来从桌面系统到数据集中管理到存储设备的全面解决方案将是NAS加SAN。

以上区别具体到iSCSI和NFS:iSCSI可优化空间更大,性能稍好,但技术难度更高;而NFS在系统层面的支持更多,像一些备份、恢复等操作较简单。

2、相关准备配置

2-1、具体使用资源

1、各主机系统:RHEL 5.8 64bit

2、Target:

Soft:scsi-target-utils

IP:192.168.18.240

LUN1:/dev/sda5 50G(以分区代替)

LUN2:/dev/sda6 20G

2、三台节点主机node1,node2,node3:

Soft:iscsi-initiator-utils

Node1: IP:192.168.18.241 host name:node1.tjiyu,com;

Node2: IP:192.168.18.242 host name:node2.tjiyu.com;

Node3: IP:192.168.18.243 host name:node3.tjiyu.com;

2-2、配置前所需要的准备

各节点Initiator和Target端需要做以下准备:

1、配置IP、关闭防火墙/SELINUX;

2、配置各节点名称;

3、时间同步;

在前面《heartbeat v2 haresource 配置可用集群》说到的高可用集群已有详细介绍,这里就不再给出了。

当然我们这里可以用Target端主机作为跳板机,因为很多相同的命令都要在各节点上执行,可以另外加一台跳板机,可以SSH连接各节点,这样就可以在跳板机上给各节点分发命令了。

首先在Target上配置各节点的hostname,方便操作:

然后生成Target端的SSH KEY,再发给到各主机,如下:

    [root@localhost ~]# ssh-keygen -t rsa -f ~/.ssh/id_rsa -P ''

    [root@localhost ~]# ssh-copy-id -i .ssh/id_rsa.pub root@node3.tjiyu.com

    [root@localhost ~]# ssh-copy-id -i .ssh/id_rsa.pub root@node3.tjiyu.com

    [root@localhost ~]# ssh-copy-id -i .ssh/id_rsa.pub root@node3.tjiyu.com

接着为命令前面常规部分设置为别名,方便操作,最后尝试给各节点同步时间,如下:

        [root@localhost ~]# alias ssh_node='for I in {1..3}; do ssh node$I'

        [root@localhost ~]# ssh_node 'ntpdate cn.ntp.org.cn'; done

3、下载安装

配置好yum源,直接在target端安装scsi-target-utils,这个只是iSCSI软件的管理工具(类似ipvsadm),具体的数据处理模块已整合在内核中,如下:

[root@localhost ~]# yum install scsi-target-utils

各节点上分别执行安装iscsi-initiator-utils,当然也可以在Target上通过SSH执行,但那是串行的,不如分别在各节点上分别执行快,如下:

[root@node1 ~]# yum install iscsi-initiator-utils

4、认识配置工具

4-1、target端配置工具(tatadm)

Target端安装scsi-target-util后,提供了相应的管理配置工具tgtadm,可以用target、LUN、用户都进管理,不过因为iSCSI模块工作在内核,tgtadm的配置只在内存中,下次开机重启不会生效,所以可以用过配置文件/etc/tgt/targets.conf来配置,启动时另一个工具tgt-adm会读取该文件。

tatadm使用语法如下:

        tgtadm --lld [driver] --op [operation] --mode [mode] [OPTION]...

        (1)、添加一个新的 target 且其ID为 [id], 名字为 [name].

            --lld [driver] --op new --mode target --tid=[id] --targetname [name]

        (2)、显示所有或某个特定的target:

            --lld [driver] --op show --mode target [--tid=[id]]

        (3)、向某ID为[id]的设备上添加一个新的LUN,其号码为[lun],且此设备提供给initiator使用。[path]是某"块设备"的路径,此块设备也可以是raid或lvm设备。lun0已经被系统预留。

            --lld [driver] --op new --mode=logicalunit --tid=[id] --lun=[lun] --backing-store [path]

        (4)、删除ID为[id]的target:

            --lld [driver] --op delete --mode target --tid=[id]

        (5)、删除target [id]中的LUN [lun]:

            -lld [driver] --op delete --mode=logicalunit --tid=[id] --lun=[lun]

        (6)、定义某target的基于主机的访问控制列表,其中,[address]表示允许访问此target的initiator客户端的列表:

            --lld [driver] --op bind --mode=target --tid=[id] --initiator-address=[address]

        (7)、解除target [id]的访问控制列表中[address]的访问控制权限:

            --lld [driver] --op unbind --mode=target --tid=[id] --initiator-address=[address]
4-2、Initiator端配置工具(iscsiadm)

而Initiator各节点安装iscsi-initiator-utils后,也提供了一些配置管理工具,其中最主要的是iscsiadm 命令,提供了对 iSCSI 目标节点、会话、连接以及发现记录的操作,iscsiadm使用语法如下:

        iscsiadm

        -m, 同 --mode, 其选项有 discovery, node, fw(启动值), host, iface(iSCSI 接口)和 session。

        -I,同 --interface, 表示接口。

        -o, 同 --op, 可实现对数据库的操作,其选项有 new, delete, update 和 show。

        -n, 同 --name, 指定其数据记录里的名字。

        -t, 同 --type, 其选项有 sendtargets(st), fw 和 isns, 仅在 -m 模式为 discovery 时有效。

        -p, 同 --portal, 指定其目标主机的 IP 地址和端口,默认端口为 3260。

        -L, 同 --loginall,其选项有 all,manual 和 automatic,指定其登录会话时的类型。

        -T, 同 --targetname,表示其目标名字。

        -v, 同 --value,通常在 --op=update 时指定其值。

5、配置target端

5-1、创建分区当作LUN

按上面的资源分配,在target端创建两个分区/dev/sda5和/dev/sda6,分别当作LUN,注意这时并不需要格式化文件系统,因为文件系统不在target端,过程如下:

        [root@localhost ~]# fdisk /dev/sda

        [root@localhost ~]# partprobe /dev/sda

        [root@localhost ~]# fdisk -l

5-2、启动tgtd服务

启动target端的tgtd服务,并配置开机启动,查看网络连接情况,可以看到tgtd监听了tcp的3260端口,如下:

        [root@localhost ~]# chkconfig tgtd on

        [root@localhost ~]# chkconfig tgtd --list

        [root@localhost ~]# service tgtd start

        [root@localhost ~]# netstat -tunlp |grep tgtd

5-3、创建target及LUN,并绑定网络

先创建一个target,ID为1,名称为iqn.2016-10.com.tjiyu:mystore.disk1(全局唯一标识名);然后给该target绑定网络192.168.18.0/24,也就是对这个网络内的主机可以发现该target;接着给该target创建两个LUN,使用上面创建的两个分区,注意LUN的ID从1开始分配,因为0已经被target控制器占用了,如下:

         [root@localhost ~]# tgtadm --lld iscsi -o new -m target -t 1 -T iqn.2016-10.com.tjiyu:mystore.disk1

        [root@localhost ~]# tgtadm -L iscsi -o bind -m target -t 1 -I 192.168.18.0/24

        [root@localhost ~]# tgtadm -L iscsi -o new -m logicalunit -t 1 -l 1 -b /dev/sda5

        [root@localhost ~]# tgtadm -L iscsi -o new -m logicalunit -t 1 -l 2 -b /dev/sda6

查看下配置的信息,LUN的0已经被target控制器占用了,如下:

[root@localhost ~]# tgtadm -L iscsi -o show -m target

5-4、配置访问用户

iSCSI可以配置基于IP或基于用户(CHAP)的认证方式,基于IP像上面绑定开放网络就可以了;基于用户除了绑定网络,还需要配置访问用户(如果使用基于用户的认证,必须首先开放基于IP的认证),CHAP是双向的认证机制,我们这里只配置单向的用户认证。

先创建帐号tjiyu,并为其授予访问上面ID为1的target的权限(绑定),如下:

        [root@localhost ~]# tgtadm --lld iscsi --op new --mode account --user tjiyu --password 123456

        [root@localhost ~]# tgtadm --lld iscsi --op bind --mode account --tid 1 --user tjiyu

        [root@localhost ~]# tgtadm --lld iscsi --op show --mode account

6、配置各initiator节点

6-1、配置initiator名称

分别在各节点配置initiator名称,名称也是iqn格式的(可以用iscsi-name生成),直接配置在文件/etc/iscsi/initiatorname.iscsi中就好,如下:

        [root@node1 ~]# vim /etc/iscsi/initiatorname.iscsi

        [root@node1 ~]# cat /etc/iscsi/initiatorname.iscsi

        InitiatorName=iqn.2016-10.com.tjiyu:node1_4rs3r3

        InitiatorAlias=node1

6-2、配置target访问用户

因为上面在target端创建并绑定了用户tjiyu,所以各Initiator节点需要先开放CHAP认证,并配置该用户信息,initiator配置文件为/etc/iscsi/iscsid.conf,在文件中修改这三项即可,注意,看清楚是哪三项,因为有几个配置相似,过程如下:

[root@node1 ~]# vim /etc/iscsi/iscsid.conf

6-3、启动各节点iscsi服务

各节点执行的命令一样,可以在跳板机上执行,先配置开机启动,然后启动iscsi服务,注意,上面查看安装信息看到还有一个iscsid服务,它会随着iscsi服务一起启动的,如下:

        [root@localhost ~]# ssh_node 'chkconfig iscsi on'; done

        [root@localhost ~]# ssh_node 'service iscsi start'; done

6-4、各节点发现target,并登录

各节点要使用target的LUN必须先发现,再登录后才能用,发现操作指定target的IP地址,登录需要指定发现的target名称和IP/端口;注意,如果登录不成功,可能是因为上面的配置用户不对,修改正确后需要重启iscsi服务,重新发现target,不然还是登录不了,过程如下,

        [root@localhost ~]# ssh_node 'iscsiadm -m discovery -t st -p 192.168.18.240'; done

        [root@localhost ~]# ssh_node 'iscsiadm -m node -T iqn.2016-10.com.tjiyu:mystore.disk1 -p 192.168.18.240:3260 -l'; done

发现登录成功后,相关信息保存在/var/lib/iscsi/send_targets/目录下,下次启动会自动登录的;

查看会话相关信息:

        Initiator:[root@node1 ~]# iscsiadm -m session -s

        Target:[root@localhost ~]# tgtadm --lld iscsi --op show --mode target

7、测试

Target的两个LUN在initiator端识别为两个磁盘设备,可以在上面进行分区、格式化文件系统等操作,就是本地的磁盘设备一样。不过它们在各节点上的设备名称可能不一样,这里因为开始都是一个硬盘,所有都一样。

7-1、创建分区,并格式化

上面登录成功后,查看各节点的存储空间,发现各节点都多了两个磁盘设备,这两个磁盘设备就是我们上面创建target分区模拟的LUN,一个50G,另一个20G,如下:

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以点击这里获取!

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 25
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值