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)之间进行大量数据的封装和可靠传输过程。
拓扑图
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/) 客户端与服务端安装