iSCSI(一) iSCSI详解 及 iSCSI配置

iSCSI(一) iSCSI详解 及 iSCSI配置

       在集群系统中存储是很重要的一部分,而且存储相关的内容:从硬件设备、接口到文件系统、传输网络、数据协议等,涉及的知识非常多,这里不发散,重点认识iSCSI。在前面《高可用集群》简单认识了DAS/NAS/SAN,下面将会认识iSCSI, 并进行iSCSI的基本配置实现。

1、认识iSCSI

       iSCSI(Internet Small Computer System Interface,Internet 小型计算机系统接口)是一种由IBM公司研究开发的IP SAN技术,该技术是将现有SCSI接口与以太网络(Ethernet)技术结合,基于 TCP/IP的协议连接iSCSI服务端(Target)和客户端(Initiator),使得封装后的SCSI数据包可以在通用互联网传输,最终实现iSCSI服务端映射为一个存储空间(磁盘)提供给已连接认证后的客户端。

1-1、SCSI

       SCSI(Small Computer System Interface)是一种I/O技术,规范了一种并行的I/O总线和相关的协议,SCSI的数据传输是以块的方式进行的。

       如上图,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 
接着为命令前面常规部分设置为别名,方便操作,最后尝试给各节点同步时间,如下
  1. [root@localhost ~]# alias ssh_node='for I in {1..3}; do ssh node$I'  
  2.   
  3. [root@localhost ~]# ssh_node 'ntpdate cn.ntp.org.cn'; done  

3、下载安装

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

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

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

  1. [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使用语法如下:

  1. tgtadm --lld [driver] --op [operation] --mode [mode] [OPTION]...  
  2.   
  3. (1)、添加一个新的 target 且其ID为 [id], 名字为 [name].  
  4.   
  5.     --lld [driver] --op new --mode target --tid=[id] --targetname [name]  
  6.   
  7. (2)、显示所有或某个特定的target:  
  8.   
  9.     --lld [driver] --op show --mode target [--tid=[id]]  
  10.   
  11. (3)、向某ID为[id]的设备上添加一个新的LUN,其号码为[lun],且此设备提供给initiator使用。[path]是某"块设备"的路径,此块设备也可以是raid或lvm设备。lun0已经被系统预留。  
  12.   
  13.     --lld [driver] --op new --mode=logicalunit --tid=[id] --lun=[lun] --backing-store [path]  
  14.   
  15. (4)、删除ID为[id]的target:  
  16.   
  17.     --lld [driver] --op delete --mode target --tid=[id]  
  18.   
  19. (5)、删除target [id]中的LUN [lun]:  
  20.   
  21.     -lld [driver] --op delete --mode=logicalunit --tid=[id] --lun=[lun]  
  22.   
  23. (6)、定义某target的基于主机的访问控制列表,其中,[address]表示允许访问此target的initiator客户端的列表:  
  24.   
  25.     --lld [driver] --op bind --mode=target --tid=[id] --initiator-address=[address]  
  26.   
  27. (7)、解除target [id]的访问控制列表中[address]的访问控制权限:  
  28.   
  29.     --lld [driver] --op unbind --mode=target --tid=[id] --initiator-address=[address]  

4-2、Initiator端配置工具(iscsiadm)

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

  1. iscsiadm    
  2. -m, 同 --mode, 其选项有 discovery, node, fw(启动值), host, iface(iSCSI 接口)和 session。   
  3. -I,同 --interface, 表示接口。    
  4. -o, 同 --op, 可实现对数据库的操作,其选项有 new, delete, update 和 show。    
  5. -n, 同 --name, 指定其数据记录里的名字。    
  6. -t, 同 --type, 其选项有 sendtargets(st), fw 和 isns, 仅在 -m 模式为 discovery 时有效。    
  7. -p, 同 --portal, 指定其目标主机的 IP 地址和端口,默认端口为 3260。    
  8. -L, 同 --loginall,其选项有 all,manual 和 automatic,指定其登录会话时的类型。    
  9. -T, 同 --targetname,表示其目标名字。    
  10. -v, 同 --value,通常在 --op=update 时指定其值。  

5、配置target端

5-1、创建分区当作LUN

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

  1. [root@localhost ~]# fdisk /dev/sda   
  2. [root@localhost ~]# partprobe /dev/sda    
  3. [root@localhost ~]# fdisk -l  

5-2、启动tgtd服务

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

  1. [root@localhost ~]# chkconfig tgtd on    
  2. [root@localhost ~]# chkconfig tgtd --list    
  3. [root@localhost ~]# service tgtd start    
  4. [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控制器占用了,如下:

  1. [root@localhost ~]# tgtadm --lld iscsi -o new -m target -t 1 -T iqn.2016-10.com.tjiyu:mystore.disk1    
  2. [root@localhost ~]# tgtadm -L iscsi -o bind -m target -t 1 -I 192.168.18.0/24    
  3. [root@localhost ~]# tgtadm -L iscsi -o new -m logicalunit -t 1 -l 1 -b /dev/sda5   
  4. [root@localhost ~]# tgtadm -L iscsi -o new -m logicalunit -t 1 -l 2 -b /dev/sda6  

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

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

5-4、配置访问用户

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

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

  1. [root@localhost ~]# tgtadm --lld iscsi --op new --mode account --user tjiyu --password 123456    
  2. [root@localhost ~]# tgtadm --lld iscsi --op bind --mode account --tid 1 --user tjiyu    
  3. [root@localhost ~]# tgtadm --lld iscsi --op show --mode account  

6、配置各initiator节点

6-1、配置initiator名称

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

  1. [root@node1 ~]# vim /etc/iscsi/initiatorname.iscsi    
  2. [root@node1 ~]# cat /etc/iscsi/initiatorname.iscsi    
  3. InitiatorName=iqn.2016-10.com.tjiyu:node1_4rs3r3  
  4. InitiatorAlias=node1  

6-2、配置target访问用户

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

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

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

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

  1. [root@localhost ~]# ssh_node 'chkconfig iscsi on'; done  
  2.   
  3. [root@localhost ~]# ssh_node 'service iscsi start'; done  

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

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

  1. [root@localhost ~]# ssh_node 'iscsiadm -m discovery -t st -p 192.168.18.240'; done  
  2.   
  3. [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/目录下,下次启动会自动登录的;

       查看会话相关信息

  1. Initiator:[root@node1 ~]# iscsiadm -m session -s  
  2.   
  3. Target:[root@localhost ~]# tgtadm --lld iscsi --op show --mode target  

7、测试

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

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

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

  1. [root@localhost ~]# ssh_node 'fdisk -l'; done  

       然后在node1上操作,在50G的/dev/sdb上创建一个10G的分区,并格式化为ext3文件系统,如下:

  1. [root@node1 ~]# fdisk /dev/sdb    
  2. [root@node1 ~]# partprobe /dev/sdb    
  3. [root@node1 ~]# fdisk –l    
  4. [root@node1 ~]# mkfs.ext3 /dev/sdb1  

7-2、各节点挂载测试

       上面在node1上分区/dev/sdb1后,在另外两个节点上可以查看到分区及创建的文件系统,不过却挂载不上去,需要partprobe /dev/sdb内核识别后才能挂载,在node3上挂载如下:

  1. [root@node3 ~]# partprobe /dev/sdb  
  2.   
  3. [root@node3 ~]# mount /dev/sdb1 /mnt  
  4.   
  5. [root@node3 ~]# ls /mnt   


       然后,在node1上复制/etc/fstab进去,然后在node2上也挂载,可以发现复制进去的文件,但在已经挂载的node3上却长时间看不到复制进去的文件,重新挂载后才能看到,如下:

       这说明多个节点同时挂载后,一个节点的操作和另外节点不是实时同步的,是在内存中有缓存的,所以这样用同时操作一个文件很可能会发生成崩溃,待后面解决

8、删除操作及target端文件配置

8-1、删除各节点登录信息

       先使各节点登出,然后再删除发现的的信息,最后把残留的目录也删除,过程如下:

  1. [root@localhost ~]# ssh_node 'iscsiadm -m node -T iqn.2016-10.com.tjiyu:mystore.disk1 -p 192.168.18.240:3260 -u'; done    
  2. [root@localhost ~]# ssh_node 'iscsiadm -m node -T iqn.2016-10.com.tjiyu:mystore.disk1 -p 192.168.18.240:3260 -o delete'; done    
  3. [root@localhost ~]# ssh_node 'rm -rf /var/lib/iscsi/send_targets/192.168.18.240*'; done  

8-2、删除target端配置

       先解除绑定,再删除LUN,最后删除target,过程如下:

  1. [root@localhost ~]# tgtadm -L iscsi -o unbind -m target -t 1 -I 192.168.18.0/24   
  2. [root@localhost ~]# tgtadm -L iscsi -o delete -m logicalunit -t 1 -l 2    
  3. [root@localhost ~]# tgtadm -L iscsi -o delete -m logicalunit -t 1 -l 1    
  4. [root@localhost ~]# tgtadm -L iscsi -o delete -m target -t 1    
  5. [root@localhost ~]# tgtadm -L iscsi -o show -m target  

8-3、文件配置target信息

       上面我们说过tgtadm配置的信息,重启后会失效,需要通过/etc/tgt//targets.conf配置文件来配置才不会;该配置文件里有很多样例,如配置不使用缓存等,配置信息如下:

[plain]  view plain  copy
  1. <target iqn.2016-10.com.tjiyu:mystore.disk1> #配置target名称  
  2.   
  3.     <backing-store /dev/sda5> #配置共享磁盘  
  4.   
  5.         vendor_id test #配置发行商(任意)  
  6.   
  7.         lun 6 #配置LUN号  
  8.   
  9.     </backing-store>  
  10.   
  11.     <backing-store /dev/sda6> #配置共享磁盘  
  12.   
  13.         vendor_id test #配置发行商(任意)  
  14.   
  15.         lun 8 #配置LUN号  
  16.   
  17.     </backing-store>  
  18.   
  19.     incominguser tjiyu 123456 #配置认证的用户名和密码  
  20.   
  21.     initiator-address 192.168.18.0/24 #配置允许的网段  
  22.   
  23. </target>  

       过程如下:

[plain]  view plain  copy
  1. [root@localhost ~]# vim /etc/tgt//targets.conf  
  2.   
  3. [root@localhost ~]# service tgtd restart  
  4.   
  5. [root@localhost ~]# tgtadm -L iscsi -o show -m target  

8-4、各节点重新发现并登录

       和上面6-4一样,各节点重新发现target,并登录,如下:

[plain]  view plain  copy
  1. [root@localhost ~]# ssh_node 'iscsiadm -m discovery -t st -p 192.168.18.240'; done  
  2.   
  3. [root@localhost ~]# ssh_node 'iscsiadm -m node -T iqn.2016-10.com.tjiyu:mystore.disk1 -p 192.168.18.240:3260 -l'; done  

       然后在node1上查看,可以看到前面测试格式化的分区还在,不过从/dev/sdb1变为了/dev/sdc1,重新挂载,发现复制进去的文件也还在,如下:

 

 

       到这里,配置iSCSI应用就可以正常运行了,关于测试中发现的共享存储带来的问题,待后面解决,后面将在本文件的基础上进行集群文件系统gfs2及clvm的相关配置……

 

 

【参考资料】

1、iSCSIhttp://baike.baidu.com/link?url=5OlHGOXZ8Su0TpG1GmAzHrlsJw6GHaAvo4IHjddVZ9RuKtZQANsq1lHe0WFURzBofmNVIVZGeNscvBZw-k6Kwa

2、常见的三种存储技术以及iSCSI协议:http://xslwahaha.blog.51cto.com/4738972/1617781

3、详解Linux配置iSCSI方法:http://tech.watchstor.com/storage-module-121394.htm

4、linux系统简单搭建iSCSI:http://cuchadanfan.blog.51cto.com/9940284/1696408

5、CentOS6.4+cman+rgmanager+iscsi+gfs2+cLVM 实现廉价的可扩展的集群共享存储:http://freeloda.blog.51cto.com/2033581/1279063

  • 4
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
iSCSI(Internet Small Computer System Interface)是一种基于IP网络的存储协议,它能够将远程的存储设备映射为本地的磁盘设备,使得用户可以通过网络访问远程存储设备。iSCSI Target是指提供远程存储服务的服务器,而iSCSI Initiator则是指通过网络访问远程存储设备的客户端。 在Linux系统中,我们可以使用open-iscsi软件包来配置和使用iSCSI Target。下面是配置和使用iSCSI Target的步骤: 1. 安装open-iscsi软件包: ``` sudo apt-get install open-iscsi ``` 2. 配置iSCSI Target: 编辑 /etc/iet/ietd.conf 文件,并添加以下内容: ``` Target iqn.2021-06.com.example:storage.target1 Lun 0 Path=/dev/sdc,Type=fileio Alias storage-target1 ``` 其中,"iqn.2021-06.com.example:storage.target1" 是iSCSI Target的名称,"Lun 0 Path=/dev/sdc,Type=fileio" 表示将 /dev/sdc 设备映射为 iSCSI Target的LUN0。 3. 重启 iSCSI Target 服务: ``` sudo systemctl restart iscsitarget ``` 4. 配置 iSCSI Initiator: 编辑 /etc/iscsi/initiatorname.iscsi 文件,并修改 InitiatorName 字段为本机的iSCSI Initiator名称,例如: ``` InitiatorName=iqn.2021-06.com.example:initiator1 ``` 5. 连接到 iSCSI Target: ``` sudo iscsiadm -m discovery -t st -p 192.168.1.100 ``` 其中,"-p 192.168.1.100" 是iSCSI Target的IP地址,该命令将会列出所有可用的iSCSI Target。 6. 登录 iSCSI Target: ``` sudo iscsiadm -m node --targetname "iqn.2021-06.com.example:storage.target1" --login ``` 7. 查看已连接的 iSCSI Target: ``` sudo iscsiadm -m session -P 3 ``` 8. 卸载 iSCSI Target: ``` sudo iscsiadm -m node --targetname "iqn.2021-06.com.example:storage.target1" --logout ``` 注意:以上步骤中的 iSCSI Target IP 地址、名称、设备路径等需要根据实际情况进行修改。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值