CentOS6.5 Final - 搭建iSCSI共享存储

CentOS 搭建iSCSI共享存储

简介

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

iSCSI是一种基于TCP/IP的协议,用来建立和管理IP存储设备、主机和客户机等之间的相互连接,并创建存储区域网络(SAN)。SAN使得SCSI协议应用于高速数据传输网络成为可能,这种传输以数据块级别(block-level)在多个数据存储网络间进行。SCSI结构基于C/S模式,其通常应用环境是:设备互相靠近,并且这些设备由SCSI总线连接。

iSCSI的主要功能是在TCP/IP网络上的主机系统(启动器 initiator)和存储设备(目标器 target)之间进行大量数据的封装和可靠传输过程。

拓扑图

2018010501.png

image

大白话功能

从本质上说,iSCSI启动器是一个客户端设备,它连接到服务器提供的某一服务,并发起对该服务的请求。iSCSI启动器软件需要安装在每个Oracle RAC节点(rac1和rac2)上。iSCSI启动器可以用软件实现,也可以用硬件实现。软件iSCSI启动器可用于大部分主要操作系统平台。对于本文,我们将使用iscsi-initiator-utils RPM中提供的免费Linux Open-iSCSI软件驱动程序。iSCSI软件启动器通常与标准网络接口卡(NIC)(大多数情况下是千兆位以太网卡)配合使用。硬件启动器是一个iSCSI HBA(或TCP卸载引擎(TOE)卡),它本质上只是一个专用以太网卡,其上的SCSI ASIC可以从系统 CPU 内卸载所有工作(TCP 和 SCSI 命令)。iSCSI HBA可以从许多供应商处购买,包括 Adaptec、Alacritech、Intel 和 QLogic。

iSCSI 目标是iSCSI网络的”服务器”组件。它通常是一个存储设备,包含您所需的信息并响应来自(一个或多个)启动器的请求。对于本文,节点 nas 将是 iSCSI目标。

实验环境

关闭防火墙和SELinux

[root@nas ~]# service iptables stop
[root@nas ~]# chkconfig iptables off
[root@nas ~]# setenforce 0
[root@nas ~]# vim /etc/selinux/config [[修改为disabled]]

拓扑图略

补充:
iSCSI可分享的设备类型有很多,包括镜像文件(*.img)、分区(partition)、物理硬盘、raid设备、逻辑卷等,这里使用物理磁盘做测试。

配置iSCSI target 服务

安装软件包并启动服务:

 
[root@nas ~]# yum install -y scsi-target-utils
 
[root@nas ~]# service tgtd start
 
正在启动 SCSI target daemon:                              [确定]
 
[root@nas ~]#
 
[root@nas ~]# chkconfig tgtd on
 
Copy
 
### 创建Target
 
```Plain Text
 
```shell
 
# 如下会出错?
 
tgtadm --lld /dev/sdb1 --mode target --op new --tid 1 --targetname iqn.2018-01.cn.rexen:nas.target
 
# 如下会出错?
 
tgtadm --lld /dev/mapper/VolGroup1-lvmServer --mode target --op new --tid 1 --targetname iqn.2018-01.cn.rexen:nas.target
 
# 正常创建Target
 
tgtadm --lld iscsi --op new --mode target --tid 1 --targetname iqn.2018-01.cn.rexen:nas.target
 
tgtadm --lld iscsi --op new --mode target --tid 2 --targetname iqn.2018-01.cn.rexen:nas.target.sdc1
 
tgtadm --lld iscsi --op new --mode target --tid 3 --targetname iqn.2018-01.cn.rexen:nas.target.sdd1
 
Copy
 
### 查看我们新添加的Target
 
```Plain Text
 
```shell
 
[root@nas ~]# tgtadm --lld iscsi --op show --mode target
 
[root@nas ~]# tgt-admin -show
 
Target 1: iqn.2018-01.cn.rexen:nas.target
 
    System information:
 
        Driver: iscsi
 
        State: ready
 
    I_T nexus information:
 
    LUN information:
 
        LUN: 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:
 
[root@nas ~]#
 
Copy
 
补充知识
 
通过man tgtadm 可以查看一些使用说明
 
\-L/--lld 指定驱动 一般为iscsi
 
\-t/--tid 指定target的ID
 
\-l/--lun 指定lun ID
 
\-b/--back-store 指定真正的后端存储设备
 
\-I/--initiators-ddress 指定initiators的ip 一般用于绑定target和initiators进行授权
 
\-T/--targetname 指定target的名称,用以区分多个不同的target
 
\--mode 创建target为target,创建logicalunit则为logicalunit
 
\--op new delete show update bind unbind
 
(bind/unbind 经常用来将initiator 的地址与target绑定,从而对其进行使用授权)
 
### 添加一块新硬盘
 
```Plain Text
 
```shell
 
使用命令来添加一块磁盘添加新硬盘(将新硬盘做成LVM,好像是非必须的,但是注意格式化重启电脑)
 
fdisk /dev/sdb
 
n
 
1
 
wq
 
partprobe /dev/sdb  [[格式化磁盘]]
 
Copy
 
### 创建lun添加硬盘
 
(这里有个问题,target服务重启之后lun会消失!!!!客户机会找不到这个磁盘)
 
```Plain Text
 
```shell
 
tgtadm --lld iscsi --op new --mode logicalunit --tid 1 --lun 1 -b /dev/sdb1
 
tgtadm --lld iscsi --op new --mode logicalunit --tid 2 --lun 1 -b /dev/sdc1
 
tgtadm --lld iscsi --op new --mode logicalunit --tid 3 --lun 1 -b /dev/sdd1
 
tgtadm --lld iscsi --op delete --mode logicalunit --tid 1 --lun 1  [[删除lun的方法]]
 
Copy
 
* 添加授权信息
 
```bash
 
添加验证,这里我们先不添加
 
tgtadm --lld iscsi --op bind --mode logicalunit --tid 1 --initiator-address=172.17.2.0/24
 
Copy
 
查看我们已经定义好的信息
 
[root@nas ~]# tgtadm --lld iscsi --op show --mode target
 
Target 1: iqn.2018-01.cn.rexen:nas.target
 
    System information:
 
        Driver: iscsi
 
        State: ready
 
    I_T nexus information:
 
    LUN information:
 
        LUN: 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:
 
        LUN: 1
 
            Type: disk
 
            SCSI ID: IET     00010001
 
            SCSI SN: beaf11
 
            Size: 53687 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:
 
    Account information:
 
    ACL information:
 
Copy
 
### **修改配置文件(保证服务器重启有效)**
 
```shell
 
# 查找并修改配置文件
 
[root@nas ~]# rpm -qa|grep scsi
 
scsi-target-utils-1.0.24-18.el6.x86_64
 
[root@nas ~]# rpm -ql scsi-target-utils-1.0.24-18.el6.x86_64
 
/etc/rc.d/init.d/tgtd
 
/etc/sysconfig/tgtd
 
/etc/tgt/targets.conf  # 这个就是配置文件,我们需要手动修改这个配置文件,避免前面添加的信息在这里丢失。
 
/usr/sbin/tgt-admin
 
/usr/sbin/tgt-setup-lun
 
/usr/sbin/tgtadm
 
/usr/sbin/tgtd
 
/usr/sbin/tgtimg
 
/usr/share/doc/scsi-target-utils-1.0.24
 
/usr/share/doc/scsi-target-utils-1.0.24/README
 
/usr/share/doc/scsi-target-utils-1.0.24/README.iscsi
 
/usr/share/doc/scsi-target-utils-1.0.24/README.iser
 
/usr/share/doc/scsi-target-utils-1.0.24/README.lu_configuration
 
/usr/share/doc/scsi-target-utils-1.0.24/README.mmc
 
/usr/share/man/man5/targets.conf.5.gz
 
/usr/share/man/man8/tgt-admin.8.gz
 
/usr/share/man/man8/tgt-setup-lun.8.gz
 
/usr/share/man/man8/tgtadm.8.gz
 
[root@nas ~]#
 
vim /etc/tgt/targets.conf
 
[[修改配置文件,在文件最后面添加如下内容:]] [[留意路径,否则重启服务会出现找不到磁盘的情况]]
 
<target iqn.2018-01.cn.rexen:nas.target>
 
       backing-store /dev/sdb1
 
       initiator-address 172.17.2.0/24 [[通常限制IP访问,这里我们先不做限制]]
 
       allow-in-use yes [[留意说明,需要添加这行,否则lun不会创建。]]
 
</target>
 
Copy
 
* 在修改完所有配置之后重启服务
 
```bash
 
service tgtd stop
 
service tgtd start
 
Copy
 
## **客户端安装(iSCSIInitiator)**
 
### **安装并设置开机启动**
 
# 开机自动加载存储
 
[root@rac1 ~]# yum -y installiscsi-initiator-utils
 
[root@rac1 ~]# chkconfig iscsid on
 
[root@rac1 ~]# chkconfig iscsi on
 
Copy
 
### **修改配置文件:**
 
initiator的配置文档位于/etc/iscsi/,该目录下有两个文件,
 
initiatorname.iscsi
 
标记了initiator的名称,它的默认名称是InitiatorName=iqn.1994-05.com.redhat:901a4a7966,我们可以根据实际情况进行更改,比较好区分,这里我们修改为InitiatorName=iqn.2018-01.cn.rexen:nas.target.sdb。* iscsid.conf
 
因为在target里面,我们并没有设置访问限制,所以iscsid.conf文件并不需要修改
 
### **检测Target信息**
 
如果我们事先不知道目标主机的target名称,我们就需要进行侦测。
 
基本格式:iscsiadm -m discovery -d # -t sendtargets -p IP[:PORT]
 
-m discovery //侦测target
 
-t sendtargets//通过iscsi协议(sendtargets可简写为st)
 
-p IP:port //指定target的IP和port,不写port的话,默认为3260
 
[root@rac1 ~]# iscsiadm -m discovery -t sendtargets -p 172.17.2.94
 
172.17.2.94:3260,1 iqn.2018-01.cn.rexen:nas.target
 
Copy
 
### **查看侦测到的Nodes信息**
 
iscsiadm 侦测到的结果会写入/var/lib/iscsi/nodes/ 中,因此只需启动/etc/init.d/iscsi 就能够在下次开机时,自动连接到正确的target了。
 
[root@rac1 ~]# ll -R /var/lib/iscsi/nodes/
 
/var/lib/iscsi/nodes/:
 
总用量 4
 
drw------- 3 root root 4096 1月   8 13:57 iqn.2018-01.cn.rexen:nas.target
 
/var/lib/iscsi/nodes/iqn.2018-01.cn.rexen:nas.target:
 
总用量 4
 
drw------- 2 root root 4096 1月   8 13:57 172.17.2.94,3260,1
 
/var/lib/iscsi/nodes/iqn.2018-01.cn.rexen:nas.target/172.17.2.94,3260,1:
 
总用量 4
 
-rw------- 1 root root 2043 1月   8 13:57 default
 
[root@rac1 ~]#
 
Copy
 
### **链接Target**
 
查看目前系统上所有的target:iscsiadm -m node
 
[root@rac1 ~]# iscsiadm -m node
 
172.17.2.94:3260,1 iqn.2018-01.cn.rexen:nas.target
 
[root@rac1 ~]#
 
Copy
 
补充知识:  
连接与退出  
基本格式:iscsiadm-m node [ -d debug_level ] [ [ -T targetname -p ip:port -I ifaceN ] [ -l| -u | -R | -s] ] [ [ -o operation ]
 
[root@rac2 iscsi] iscsiadm -m node -d 1 -T iqn.2018-01.cn.rexen:nas.target-p 172.17.2.94:3260 -u [[退出]]
 
[root@rac2 iscsi] iscsiadm -m node -d 1 -T iqn.2018-01.cn.rexen:nas.target-p 172.17.2.94:3260 -o [[删除指定条目]]
 
链接Target
 
# 链接
 
[root@rac1 ~]# iscsiadm -mnode -d 1 -T iqn.2018-01.cn.rexen:nas.target -p 172.17.2.94:3260 --login
 
Logging in to [iface: default, target: iqn.2018-01.cn.rexen:nas.target, portal: 172.17.2.94,3260] (multiple)
 
Login to [iface: default, target: iqn.2018-01.cn.rexen:nas.target, portal: 172.17.2.94,3260] successful.
 
# 退出链接
 
[root@rac1 ~]# iscsiadm -mnode -d 1 -T iqn.2018-01.cn.rexen:nas.target -p 172.17.2.94:3260 --logout
 
Copy
 
查看磁盘情况
 
# 这里我们就可以看到新添加的iscsi存储信息,就可以像操作本地磁盘一样操作存储。
 
[root@rac1 ~] fdisk –l
 
Disk /dev/sdb: 53.7 GB, 53687074816 bytes
 
64 heads, 32 sectors/track, 51199 cylinders
 
Units = cylinders of 2048 * 512 = 1048576 bytes
 
Sector size (logical/physical): 512 bytes / 512 bytes
 
I/O size (minimum/optimal): 512 bytes / 512 bytes
 
Disk identifier: 0x00000000
 
Copy
 
查看target服务信息
 
# 这里会发现有一个链接信息
 
[root@nas ~]# tgt-admin --show
 
Target 1: iqn.2018-01.cn.rexen:nas.target
 
    System information:
 
        Driver: iscsi
 
        State: ready
 
    I_T nexus information:
 
        I_T nexus: 2
 
            Initiator: iqn.2018-01.cn.rexen:nas.target.sdb
 
            Connection: 0
 
                IP Address: 172.17.2.92
 
    LUN information:
 
        LUN: 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:
 
        ALL
 
Copy
 
## **客户端的安全认证**
 
客户端的认证方式有两种,以保证不同用户数据的安全性:
 
1:基于IP
 
2:基于用户的CHAP(CHAP为双向认证server认证client,client也认证server)
 
下面将对initiators进行基于IP的认证
 
[root@node1 ~]# tgtadm --lld iscsi --mode target --op bind --tid 1 --initiator-address 192.168.139.0/24
 
允许来自192.168.139.0/24网段的所有主机访问target ID为1的target
 
[root@node1 ~]# tgtadm --lld iscsi --mode target --op show
 
Account information:
 
ACL information: 192.168.139.0/24
 
Copy
 
知识点:  
iSCSI节点名称有两种格式,即 iqn-type 格式和 eui-type 格式。  
iqn-type的格式为:  
iqn.yyyy-mm.backward_naming_authority:unique_device_name
 
在Linux上的格式为:  
iqn.2018-01.cn.rexen:RandomNumber
 
通常我们可以把RandomNumber更改为具有意义的名称如主机名,机架和磁盘等。  
默认的,生成的节点名称可以在/etc/initiatorname.iscsi得到。
 
## **参考文档:**
 
[http://www.voidcn.com/article/p-yjcngvej-rx.html](http://www.voidcn.com/article/p-yjcngvej-rx.html) 安装部署
 
[https://linux.die.net/man/8/tgtadm](https://linux.die.net/man/8/tgtadm) 命令使用说明
 
[http://www.voidcn.com/article/p-eohtvicp-kz.html](http://www.voidcn.com/article/p-eohtvicp-kz.html) 安装参考
 
[http://www.voidcn.com/article/p-mpjxkcyf-hh.html](http://www.voidcn.com/article/p-mpjxkcyf-hh.html) 安装参考
 
[http://blog.itpub.net/31015730/viewspace-2137709/](http://blog.itpub.net/31015730/viewspace-2137709/) 客户端与服务端安装