iSCSI介绍
几种存储的架构:
- 直接存取 (direct-attached storage):例如本机上面的磁盘,就是直接存取设备;
- 透过储存局域网络 (SAN):来自网络内的其他储存设备提供的磁盘(block device)
- 网络文件系统 (NAS):来自 NAS 提供的文件系统,只能直接使用,不可进行格式化(NFS/SMB等)。
iSCSI架构将存储和使用主机分为两个部分:
- iSCSI target:就是储存设备端,存放磁盘或 RAID 的设备,目前也能够将 Linux 主机仿真成 iSCSI target 了!目的在提供其他主机使用的『磁盘』
- iSCSI initiator:就是能够使用 target 的客户端,通常是服务器。 也就是说,想要连接到 iSCSI target 的服务器,也必须要安装 iSCSI initiator 的相关功能后才能够使用 iSCSI target 提供的磁盘就是了。
iSCSI target需要安装scsi-target-utils软件包,iSCSI initiator 需要安装iscsi-initiator-utils
iSCSI软件及软件结构:
- scsi-target-utils:用来将 Linux 系统仿真成为 iSCSI target 的功能;
- iscsi-initiator-utils:挂载来自 target 的磁盘到 Linux 本机上。
iSCSI Target的iqn:
iSCSI 有一套自己分享 target 档名的定义,基本上,由 iSCSI 分享出来的 target 檔名都是以 iqn 为开头,意思是:『iSCSI Qualified Name (iSCSI 合格名称)』的意思
iqn.yyyy-mm.<reversed domain name>:identifier
iqn.年年-月.域名的反转写法 :这个分享的target名称
iqn.2011-08.com.ccie:vbirddisk
另外,就如同一般外接式储存装置 (target 名称) 可以具有多个磁盘一样,我们的 target 也能够拥有数个磁盘装置的。 每个在同一个 target 上头的磁盘我们可以将它定义为逻辑单位编号 (Logical Unit Number, LUN)。我们的 iSCSI initiator 就是跟 target 协调后才取得 LUN 的存取权就是了 。在鸟哥的这个简单案例中,最终的结果,我们会有一个 target ,在这个 target 当中可以使用三个 LUN 的磁盘。
iSCSI Target
1. iSCSI Target软件结构
/etc/tgt/targets.conf |
主要配置文件,设定要分享的磁盘格式与哪几颗; |
/usr/sbin/tgt-admin |
在线查询、删除 target 等功能的设定工具; |
/usr/sbin/tgt-setup-lun |
建立 target 以及设定分享的磁盘与可使用的客户端等工具软件。 |
/usr/sbin/tgtadm |
手动直接管理的管理员工具 (可使用配置文件取代); |
/usr/sbin/tgtd |
主要提供 iSCSI target 服务的主程序; |
/usr/sbin/tgtimg |
建置预计分享的映像文件装置的工具 (以映像文件仿真磁盘); |
可以通过target进行分享的类型:
- dd创建的仿真磁盘(无需预先格式化)
- partition
- 完整的磁盘
- software raid
- LVM中LV
2. 创建所需的磁盘装置
#创建dd文件 mkdir /srv/iscsi dd if=/dev/zero of=/srv/iscsi/disk1.im bs=1M count=20 chcon -Rv -t tgtd_var_lib_t /srv/iscsi/ #创建/dev/sdb1,/dev/sdb2两个分区 fdisk /dev/sdb #/dev/sdb2创建LVM分区 pvcreate /dev/sdb2 vgcreate server /dev/sdb2 lvcreate -L 300M -n iscsi01 server lvscan ACTIVE ‘/dev/server/iscsi01‘ [300.00 MiB] inherit
3. 修改tgt配置文件/etc/tgt/target.conf
vi /etc/tgt/targets.conf <target iqn.2011-04.com.ccie:vdisk> backing-store /srv/iscsi/disk1.img backing-store /dev/sdb1 backing-store /dev/server/iscsi01 initiator-address 192.168.0.0/24 incominguser auth authpass write-cache off </target> # 此档案的语法如下: <target iqn.相关装置的target名称> backing-store /你的/虚拟设备/完整檔名-1 backing-store /你的/虚拟设备/完整檔名-2 initiator-address 允许访问的IP地址 incominguser 用户名和密码 </target>
- backing-store (虚拟的装置), direct-store (实际的装置): 设定装置时,如果你的整颗磁盘是全部被拿来当 iSCSI 分享之用,那么才能够使用 direct-store 。不过,根据网络上的其他文件, 似乎说明这个设定值有点危险的样子。所以,基本上还是建议单纯使用模拟的 backing-store 较佳
- initiator-address (用户端地址): 如果你想要限制能够使用这个 target 的客户端来源,才需要填写这个设定值。基本上,不用设定它 (代表所有人都能使用的意思), 因为我们后来会使用 iptables 来规范可以联机的客户端
- incominguser (用户账号密码设定): 如果除了来源 IP 的限制之外,你还想要让使用者输入账密才能使用你的 iSCSI target 的话,那么就加用这个设定项目。 此设定后面接两个参数,分别是账号与密码
- write-cache [off|on] (是否使用快取): 在预设的情况下,tgtd 会使用快取来增快速度。不过,这样可能会有遗失数据的风险。所以,如果你的数据比较重要的话, 或许不要使用快取,直接存取装置会比较妥当一些。
4. 启动target服务
service tgtd start chkconfig tgtd on netstat -anptul | grep "tgtd" tcp 0 0 0.0.0.0:3260 0.0.0.0:* LISTEN 2374/tgtd tcp 0 0 :::3260 :::* LISTEN 2374/tgtd tgt-admin --show Target 1: iqn.2017-06.com.ccie:vdisk System information: Driver: iscsi State: ready I_T nexus information: LUN information: LUN: 0 <== LUN号码 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: rdrw Backing store path: /srv/iscsi/disk1.img Backing store flags: LUN: 1 Type: disk SCSI ID: IET 00010001 SCSI SN: beaf11 Size: 214 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: LUN: 2 Type: disk SCSI ID: IET 00010002 SCSI SN: beaf12 Size: 315 MB, Block size: 512 Online: Yes Removable media: No Prevent removal: No Readonly: No Backing store type: rdwr Backing store path: /dev/server/iscsi01 Backing store flags: Account information: auth ACL information: 192.168.0.0/24 防火墙设置: iptables -A INPUT -p tcp -s 192.168.0.0/24 --dport 3260 -j ACCEPT
iSCSI initiator配置
1. 软件结构
/etc/iscsi/iscsid.conf |
主要的配置文件,用来连结到 iSCSI target 的设定; |
/sbin/iscsid |
启动 iSCSI initiator 的主要服务程序; |
/sbin/iscsiadm |
用来管理 iSCSI initiator 的主要设定程序; |
/etc/init.d/iscsid |
让本机模拟成为 iSCSI initiater 的主要服务; |
/etc/init.d/iscsi |
在本机成为 iSCSI initiator 之后,启动此脚本,让我们可以登入 iSCSI target。所以 iscsid 先启动后,才能启动这个服务。为了防呆,所以 /etc/init.d/iscsi 已经写了一个启动指令, 启动 iscsi 前尚未启动 iscsid ,则会先呼叫 iscsid 才继续处理 iscsi |
2. 修改配置文件(写入target登陆的账号密码)
[[email protected] ~]# vim /etc/iscsi/iscsid.conf
node.session.auth.username = auth <==在 target 时设定的
node.session.auth.password = authpass <==约在 53, 54 行
discovery.sendtargets.auth.username = auth <==约在 67, 68 行
discovery.sendtargets.auth.password = authpass
chkconfig iscsid on
chkconfig iscsi on
由于我们尚未与 target 联机,所以 iscsi 并无法让我们顺利启动的!因此上面只要 chkconfig 即可,不需要启动他。
3. 侦测到target的相关数据
#检测iSCSI target设备端的数据
iscsiadm -m discovery -t sendtargets -p 192.168.0.5
192.168.0.5:3260,1 iqn.2017-06.com.ccie:vdisk
#显示被检测到的结果
ls -l /var/lib/iscsi/nodes/
total 4
drw-------. 3 root root 4096 Jun 29 21:31 iqn.2017-06.com.ccie:vdisk
[[email protected] ~]# iscsiadm -m discovery -t sendtargets -p 192.168.0.5
iscsiadm: No portals found
可能是target端配置地址限制。可以查看/etc/tgt/targets.conf中initiator-address配置
现在我们知道了 target 的名称,同时将所有侦测到的信息通通写入到上述 /var/lib/iscsi/nodes/中,若信息有修订过的话,那你可以到这个档案内修改,也可以透过 iscsiadm 的 update 功能处理相关参数的。
4. 开始联机target
#显示系统上所有target信息:
iscsiadm -m node
192.168.0.5:3260,1 iqn.2017-06.com.ccie:vdisk
#启动iscsi
/etc/init.d/iscsi restart
Logging in to [iface: default, target: iqn.2017-06.com.ccie:vdisk, portal: 192.168.0.5,3260] (multiple)
Login to [iface: default, target: iqn.2017-06.com.ccie:vdisk, portal: 192.168.0.5,3260] successful.
#也可以使用手工方式进行登陆:
iscsiadm -m node -T iqn.2017-06.com.ccie:vdisk --login
使用fdisk -l 可以查看到新增设备信息了。
在服务器上可以使用tgt-admin --show查看到客户端的挂在信息。
5. 更新/删除 target的方法
当 iSCSI target 可能因为某些原因被拿走或其他原因你需要关闭iSCSI initiator时。但是,又不能全部关掉 (/etc/init.d/iscsi stop), 因为还有其他的 iSCSI target 在使用。这个时候该如何取消不要的 target 呢?
[[email protected] ~]# iscsiadm -m node -T targetname --logout
[[email protected] ~]# iscsiadm -m node -o [delete|new|update] -T targetname
选项与参数:
--logout :就是注销 target,但是并没有删除 /var/lib/iscsi/nodes/ 内的数据
-o delete:删除后面接的那部 target 链接信息 (/var/lib/iscsi/nodes/*)
-o update:更新相关的信息
-o new :增加一个新的 target 信息。
#查看现有target信息
iscsiadm -m node
192.168.0.5:3260,1 iqn.2017-06.com.ccie:vdisk
#iscsiadm -m node -T iqn.2017-06.com.ccie:vdisk --logout
Logging out of session [sid: 15, target: iqn.2017-06.com.ccie:vdisk, portal: 192.168.0.5,3260]
Logout of [sid: 15, target: iqn.2017-06.com.ccie:vdisk, portal: 192.168.0.5,3260] successful.
# 这个时候的 target 连结还是存在的,虽然注销你还是看的到!
#删除target信息
iscsiadm -m node -o delete -T iqn.2017-06.com.ccie:vdisk
#再次查看,target信息被删除了
iscsiadm -m node
iscsiadm: No records found
#重启iscsi服务
/etc/init.d/iscsi restart