章节概述:

本章节将分析SCSI与iSCSI技术结构的不同,了解iSCSI技术的优势、SAN存储网络技术结构以及iSCSI HBA卡的作用。
完整演示部署iSCSI target服务程序的方法流程:创建RAID阵列(5)后使用targetcli命令发布到iSCSI存储目录并创建ACL列表。
配置使用iSCSI initiator服务程序发现、连接并使用iSCSI存储设备,最后编辑fstab文件将存储设备设置为开机启动。

17.1 网络存储技术

传统的SCSI小型计算机系统接口(Small Computer System Interface)技术是存储设备最基本的标准协议,但通常需要设备互相靠近并用SCSI总线链接,因此受到了物理环境的限制。

iSCSI小型计算机系统接口(即Internet Small Computer System Interface)则是由IBM公司研究开发用于实现在IP网络上运行SCSI协议的新存储技术,即能够让SCSI接口与以太网技术相结合,使用iSCSI协议基于以太网传送SCSI命令与数据,克服了SCSI需要直接连接存储设备的局限性,使得我们可以跨越不同的服务器共享存储设备,并可以做到不停机状态下扩展存储容量。

SAN存储区域网络技术(Storage Area Network)便是基于iSCSI存储协议,采用高速光钎通道传输存储数据的服务程序。

本图为SAN结构拓扑

服务器会基于iSCSI协议将SCSI设备、命令与数据打包成标准的TCP/IP包然后通过IP网络传输到目标存储设备,而远端存储设备接收到数据包后需要基于iSCSI协议将TCP/IP包解包成SCSI设备、命令与数据,这个过程无疑会消耗系统CPU资源,因此我们可以将SCSI协议的封装动作交由独立的iSCSI HBA硬件卡来处理,减少了对服务器性能的影响。

本图中设备为iSCSI HBA卡

但坦白来讲iSCSI技术还是存在诸多问题的,如距离与带宽之间的矛盾关系,虽然iSCSI满足了数据长距离传输的需求,但现在广域网的带宽还是不够理想,IP网络的速率和延迟都是iSCSI传输数据的巨大障碍。

17.2 部署iSCSI存储

iSCSI的工作方式分为服务端(target)与客户端(initiator):

服务端:即存放硬盘或RAID设备的存储端,目的是为客户端提供可用的存储。
客户端:使用服务端的服务器主机。

本实验需要两台虚拟主机来完成,分别是:

编辑
主机名称 操作系统 IP地址
iscsi服务端 红帽RHEL7操作系统 192.168.10.10
iscsi客户端 红帽RHEL7操作系统 192.168.10.20

逻辑单元LUN(即Logical Unit Number)是使用iSCSI协议中的重要概念,因为当客户机想要使用服务端存储设备时都必需输入对应的名称(Target ID),而一个服务端可能会同时提供多个可用的存储设备,于是便用LUN来详细的描述设备或对象,同时每个LUN Device可能代表一个硬盘或RAID设备,LUN的名称由用户指定。

17.2.1 配置iSCSI服务端

第1步:准备作为LUN发布的存储设备。

在前面的存储结构章节中学习了使用mdadm工具创建RAID磁盘冗余阵列的方法,忘记就翻回去看下吧~

在虚拟机中再添加4块硬盘:

创建RAID5并设置1块备份故障盘:

  1. [root@linuxprobe ~]# mdadm -Cv /dev/md0 -n 3 -l 5 -x 1 /dev/sdb /dev/sdc /dev/sdd /dev/sde
  2. mdadm: layout defaults to left-symmetric
  3. mdadm: layout defaults to left-symmetric
  4. mdadm: chunk size defaults to 512K
  5. mdadm: size set to 20954624K
  6. mdadm: Defaulting to version 1.2 metadata
  7. mdadm: array /dev/md0 started.

查看RAID阵列的详细信息,记录下UUID的值:

  1. [root@linuxprobe ~]# mdadm -D /dev/md0
  2. /dev/md0:
  3. Version : 1.2
  4. Creation Time : Thu Sep 24 21:59:57 2015
  5. Raid Level : raid5
  6. Array Size : 41909248 (39.97 GiB 42.92 GB)
  7. Used Dev Size : 20954624 (19.98 GiB 21.46 GB)
  8. Raid Devices : 3
  9. Total Devices : 4
  10. Persistence : Superblock is persistent
  11. Update Time : Thu Sep 24 22:02:23 2015
  12. State : clean
  13. Active Devices : 3
  14. Working Devices : 4
  15. Failed Devices : 0
  16. Spare Devices : 1
  17. Layout : left-symmetric
  18. Chunk Size : 512K
  19. Name : linuxprobe.com:0 (local to host linuxprobe.com)
  20. UUID : 3370f643:c10efd6a:44e91f2a:20c71f3e
  21. Events : 26
  22. Number Major Minor RaidDevice State
  23. 0 8 16 0 active sync /dev/sdb
  24. 1 8 32 1 active sync /dev/sdc
  25. 4 8 48 2 active sync /dev/sdd
  26. 3 8 64 - spare /dev/sde

创建RAID阵列配置文件:

  1. [root@linuxprobe ~]# vim /etc/mdadm.conf
  2. DEVICE /dev/sdb /dev/sdc /dev/sdd /dev/sde
  3. ARRAY /dev/md0 UUID=3370f643:c10efd6a:44e91f2a:20c71f3e

第2步:安装iSCSI target服务程序:

  1. [root@linuxprobe ~]# yum -y install targetd targetcli
  2. Loaded plugins: langpacks, product-id, subscription-manager
  3. ………………省略部分安装信息………………
  4. Dependencies Resolved
  5. ================================================================================
  6. Package Arch Version Repository Size
  7. ================================================================================
  8. Installing:
  9. targetcli noarch 2.1.fb34-1.el7 rhel7 55 k
  10. targetd noarch 0.7.1-1.el7 rhel7 48 k
  11. Installing for dependencies:
  12. PyYAML x86_64 3.10-11.el7 rhel7 153 k
  13. libyaml x86_64 0.1.4-10.el7 rhel7 55 k
  14. lvm2-python-libs x86_64 7:2.02.105-14.el7 rhel7 153 k
  15. pyparsing noarch 1.5.6-9.el7 rhel7 94 k
  16. python-configshell noarch 1:1.1.fb11-3.el7 rhel7 64 k
  17. python-kmod x86_64 0.9-4.el7 rhel7 57 k
  18. python-rtslib noarch 2.1.fb46-1.el7 rhel7 75 k
  19. python-setproctitle x86_64 1.1.6-5.el7 rhel7 15 k
  20. python-urwid x86_64 1.1.1-3.el7 rhel7 654 k
  21. Transaction Summary
  22. ================================================================================
  23. Install 2 Packages (+9 Dependent packages)
  24. ………………省略部分安装信息………………
  25. Complete!

启动iSCSI target服务程序:

  1. [root@linuxprobe ~]# systemctl start targetd

将iSCSI target服务程序添加到开机启动项:

[root@linuxprobe ~]# systemctl enable targetd
ln -s '/usr/lib/systemd/system/targetd.service' '/etc/systemd/system/multi-user.target.wants/targetd.service'

第3步:创建存储对象。
targetcli命令用于管理iSCSI target存储设备,格式为:“targetcli”

  1. [root@linuxprobe ~]# targetcli
  2. Warning: Could not load preferences file /root/.targetcli/prefs.bin.
  3. targetcli shell version 2.1.fb34
  4. Copyright 2011-2013 by Datera, Inc and others.
  5. For help on commands, type 'help'.

查看当前的存储目录树:

  1. /> ls
  2. o- / ..................................................................... [...]
  3. o- backstores .......................................................... [...]
  4. | o- block .............................................. [Storage Objects: 0]
  5. | o- fileio ............................................. [Storage Objects: 0]
  6. | o- pscsi .............................................. [Storage Objects: 0]
  7. | o- ramdisk ............................................ [Storage Objects: 0]
  8. o- iscsi ........................................................ [Targets: 0]
  9. o- loopback ..................................................... [Targets: 0]

进入/backstores/block目录中:

  1. /> cd /backstores/block
  2. /backstores/block>

使用/dev/md0创建设备disk0:

  1. /backstores/block> create disk0 /dev/md0
  2. Created block storage object disk0 using /dev/md0.

返回到根目录中:

  1. /backstores/block> cd ..
  2. /backstores> cd ..
  3. />

查看创建后的设备:

  1. /> ls
  2. o- / ..................................................................... [...]
  3. o- backstores .......................................................... [...]
  4. | o- block .............................................. [Storage Objects: 1]
  5. | | o- disk0 ..................... [/dev/md0 (40.0GiB) write-thru deactivated]
  6. | o- fileio ............................................. [Storage Objects: 0]
  7. | o- pscsi .............................................. [Storage Objects: 0]
  8. | o- ramdisk ............................................ [Storage Objects: 0]
  9. o- iscsi ........................................................ [Targets: 0]
  10. o- loopback ..................................................... [Targets: 0]

第4步:配置iSCSI target目标。
进入到iscsi目录中:

  1. /> cd iscsi
  2. /iscsi>

创建iSCSI target目标:

  1. /iscsi> create
  2. Created target iqn.2003-01.org.linux-iscsi.linuxprobe.x8664:sn.d497c356ad80.
  3. Created TPG 1.

依次进入到target的luns目录中:

  1. /iscsi> cd iqn.2003-01.org.linux-iscsi.linuxprobe.x8664:sn.d497c356ad80/
  2. /iscsi/iqn.20....d497c356ad80> ls
  3. o- iqn.2003-01.org.linux-iscsi.linuxprobe.x8664:sn.d497c356ad80 ...... [TPGs: 1]
  4. o- tpg1 ............................................... [no-gen-acls, no-auth]
  5. o- acls .......................................................... [ACLs: 0]
  6. o- luns .......................................................... [LUNs: 0]
  7. o- portals .................................................... [Portals: 0]
  8. /iscsi/iqn.20....d497c356ad80> cd tpg1/
  9. /iscsi/iqn.20...c356ad80/tpg1> cd luns
  10. /iscsi/iqn.20...d80/tpg1/luns>

创建LUN设备:

  1. /iscsi/iqn.20...d80/tpg1/luns> create /backstores/block/disk0
  2. Created LUN 0.

第5步:设置访问控制列表。
切换到acls目录中:

  1. /iscsi/iqn.20...d80/tpg1/luns> cd ..
  2. /iscsi/iqn.20...c356ad80/tpg1> cd acls

创建访问控制列表:

  1. /iscsi/iqn.20...d80/tpg1/acls> create iqn.2003-01.org.linux-iscsi.linuxprobe.x8664:sn.d497c356ad80:client
  2. Created Node ACL for iqn.2003-01.org.linux-iscsi.linuxprobe.x8664:sn.d497c356ad80:client
  3. Created mapped LUN 0.

切换到portals目录中:

  1. /iscsi/iqn.20...d80/tpg1/acls> cd ..
  2. /iscsi/iqn.20...c356ad80/tpg1> cd portals

添加允许监听的IP地址:

  1. /iscsi/iqn.20.../tpg1/portals> create 192.168.10.10
  2. Using default IP port 3260
  3. Created network portal 192.168.10.10:3260.

查看配置概述后退出工具:

  1. /iscsi/iqn.20.../tpg1/portals> ls /
  2. o- / ........................... [...]
  3. o- backstores................. [...]
  4. | o- block ................... [Storage Objects: 1]
  5. | | o- disk0 ................. [/dev/md0 (40.0GiB) write-thru activated]
  6. | o- fileio .................. [Storage Objects: 0]
  7. | o- pscsi ................... [Storage Objects: 0]
  8. | o- ramdisk ................. [Storage Objects: 0]
  9. o- iscsi ..................... [Targets: 1]
  10. | o- iqn.2003-01.org.linux-iscsi.linuxprobe.x8664:sn.d497c356ad80 .... [TPGs: 1]
  11. | o- tpg1 .................. [no-gen-acls, no-auth]
  12. | o- acls ........................................................ [ACLs: 1]
  13. | | o- iqn.2003-01.org.linux-iscsi.linuxprobe.x8664:sn.d497c356ad80:client [Mapped LUNs: 1]
  14. | | o- mapped_lun0 ............................................. [lun0 block/disk0 (rw)]
  15. o- luns .................... [LUNs: 1]
  16. | | o- lun0 .............. [block/disk0 (/dev/md0)]
  17. | o- portals ............. [Portals: 1]
  18. | o- 192.168.10.10:3260 [OK]
  19. o- loopback .................. [Targets: 0]
  20. /> exit
  21. Global pref auto_save_on_exit=true
  22. Last 10 configs saved in /etc/target/backup.
  23. Configuration saved to /etc/target/saveconfig.json

第4步:创建防火墙允许规则:

  1. [root@linuxprobe ~]# firewall-cmd --permanent --add-port=3260/tcp
  2. success
  3. [root@linuxprobe ~]# firewall-cmd --reload
  4. success
17.2.2 配置iSCSI客户端

首先检查能够与iscsi服务端通信:

  1. [root@linuxprobe ~]# ping -c 4 192.168.10.10
  2. PING 192.168.10.10 (192.168.10.10) 56(84) bytes of data.
  3. 64 bytes from 192.168.10.10: icmp_seq=1 ttl=64 time=0.959 ms
  4. 64 bytes from 192.168.10.10: icmp_seq=2 ttl=64 time=0.469 ms
  5. 64 bytes from 192.168.10.10: icmp_seq=3 ttl=64 time=0.465 ms
  6. 64 bytes from 192.168.10.10: icmp_seq=4 ttl=64 time=0.277 ms
  7.  
  8. --- 192.168.10.10 ping statistics ---
  9. 4 packets transmitted, 4 received, 0% packet loss, time 3002ms
  10. rtt min/avg/max/mdev = 0.277/0.542/0.959/0.253 ms

红帽RHEL7系统已经默认安装了iscsi客户端服务程序:

  1. [root@linuxprobe ~]# yum install iscsi-initiator-utils
  2. Loaded plugins: langpacks, product-id, subscription-manager
  3. Package iscsi-initiator-utils-6.2.0.873-21.el7.x86_64 already installed and latest version
  4. Nothing to do

编辑的iscsi客户端名称文件:
该名称是initiator客户端的唯一标识,读者可以按照我的方法修改,也可以用iscsi-iname命令随机生成~都可以的。

  1. [root@linuxprobe ~]# vim /etc/iscsi/initiatorname.iscsi
  2. InitiatorName=iqn.2003-01.org.linux-iscsi.linuxprobe.x8664:sn.d497c356ad80:client

重启iscsi客户端服务程序:

  1. [root@linuxprobe ~]# systemctl restart iscsid

将iscsi客户端服务程序添加到开机启动项中:

[root@linuxprobe ~]# systemctl enable iscsid
ln -s '/usr/lib/systemd/system/iscsid.service' '/etc/systemd/system/multi-user.target.wants/iscsid.service'

发现iscsi服务端的可用存储设备:
iscsiadm命令用于管理(插入、查询、更新或删除)iSCSI数据库配置文件的命令行工具,格式见下面演示。

  1. [root@linuxprobe ~]# iscsiadm -m discovery -t st -p 192.168.10.10
  2. 192.168.10.10:3260,1 iqn.2003-01.org.linux-iscsi.linuxprobe.x8664:sn.d497c356ad80

连接iscsi服务端的可用存储设备:

[root@linuxprobe ~]# iscsiadm -m node -T iqn.2003-01.org.linux-iscsi.linuxprobe.x8664:sn.d497c356ad80 -p 192.168.10.10 --login
Logging in to [iface: default, target: iqn.2003-01.org.linux-iscsi.linuxprobe.x8664:sn.d497c356ad80, portal: 192.168.10.10,3260] (multiple)
Login to [iface: default, target: iqn.2003-01.org.linux-iscsi.linuxprobe.x8664:sn.d497c356ad80, portal: 192.168.10.10,3260] successful.

此时便多了一块硬盘设备:

  1. [root@linuxprobe ~]# file /dev/sdb
  2. /dev/sdb: block special

格式化、挂载后查看容量信息:

  1. [root@linuxprobe ~]# mkfs.xfs /dev/sdb
  2. log stripe unit (524288 bytes) is too large (maximum is 256KiB)
  3. log stripe unit adjusted to 32KiB
  4. meta-data=/dev/sdb isize=256 agcount=16, agsize=654720 blks
  5. = sectsz=512 attr=2, projid32bit=1
  6. = crc=0
  7. data = bsize=4096 blocks=10475520, imaxpct=25
  8. = sunit=128 swidth=256 blks
  9. naming =version 2 bsize=4096 ascii-ci=0 ftype=0
  10. log =internal log bsize=4096 blocks=5120, version=2
  11. = sectsz=512 sunit=8 blks, lazy-count=1
  12. realtime =none extsz=4096 blocks=0, rtextents=0
  13. [root@linuxprobe ~]# mkdir /iscsi
  14. [root@linuxprobe ~]# mount /dev/sdb /iscsi
  15. [root@linuxprobe ~]# df -h
  16. Filesystem Size Used Avail Use% Mounted on
  17. /dev/mapper/rhel-root 18G 3.4G 15G 20% /
  18. devtmpfs 734M 0 734M 0% /dev
  19. tmpfs 742M 176K 742M 1% /dev/shm
  20. tmpfs 742M 8.8M 734M 2% /run
  21. tmpfs 742M 0 742M 0% /sys/fs/cgroup
  22. /dev/sr0 3.5G 3.5G 0 100% /media/cdrom
  23. /dev/sda1 497M 119M 379M 24% /boot
  24. /dev/sdb 40G 33M 40G 1% /iscsi

查看设备的UUID值:

  1. [root@linuxprobe ~]# blkid | grep /dev/sdb
  2. /dev/sdb: UUID="eb9cbf2f-fce8-413a-b770-8b0f243e8ad6" TYPE="xfs"

设置为开机后自动挂载时因为iSCSI服务程序基于IP网络传输数据,所以我们必需在fstab文件中添加参数_netdev,代表网络联通后再挂载:

  1. [root@linuxprobe ~]# vim /etc/fstab
  2. UUID=eb9cbf2f-fce8-413a-b770-8b0f243e8ad6 /iscsi xfs defaults,_netdev 0 0

第17章 使用iSCSI服务部署网络存储的更多相关文章

  1. Linux基础学习-使用iSCSI服务部署网络存储

    使用iSCSI服务部署网络存储 iSCSI技术实现了物理硬盘设备与TCP/IP网络协议的相互结合,使得用户可以通过互联网方便地访问远程机房提供的共享存储资源.下面介绍如何在Linux上部署iSCSI服 ...

  2. 《Linux就该这么学》培训笔记_ch17_使用iSCSI服务部署网络存储

    <Linux就该这么学>培训笔记_ch17_使用iSCSI服务部署网络存储 文章最后会post上书本的笔记照片. 文章主要内容: iSCSI技术介绍 创建RAID磁盘阵列 配置iSCSI服 ...

  3. 使用iSCSI服务部署网络存储

  4. 配置iSCSI部署网络存储

    iSCSI( Internet Small Computer System Interface 互联网小型计算机系统接口)是由IBM 下属的两大研发机构一一加利福尼亚AImaden和以色列Haifa研 ...

  5. 《linux就该这么学》第十六节课:第16,17章,Squid服务和iscsi网络存储

    第十六章 squid总结: 正向代理:yum  安装后清空防火墙即可正常使用,客户端设置浏览器 透明正向代理:vim  /etc/squid/squid.conf 59行:http_port  312 ...

  6. 第10章 使用Apache服务部署静态网站

    章节简述: 本章节中通过对比目前热门的网站服务程序来说明Apache服务程序的优势,并新增主机空间选购技巧小节. 了解SELinux服务的3种工作模式,小心谨慎的使用semanage命令和setseb ...

  7. centos 6.5环境利用iscsi搭建SAN网络存储服务及服务端target和客户端initiator配置详解

    一.简介 iSCSI(internet SCSI)技术由IBM公司研究开发,是一个供硬件设备使用的.可以在IP协议的上层运行的SCSI指令集,这种指令集合可以实现在IP网络上运行SCSI协议,使其能够 ...

  8. 部署网络存储ISCSI

    1.什么是ISCSIInternet Small Computer System Interface 互联网小型计算机接口技术,是一种将SCS存储与以太网技术相结合,可以用来在互联网中传输SCSI接口 ...

  9. CentOS7系列--3.2CentOS7中配置iSCSI服务

    CentOS7配置iSCSI服务 在网络上的存贮服务为iSCSI Target,而连接到iSCSI Target服务的叫iSCSI Initiator 1. 直接配置iSCSI Target服务 1. ...

随机推荐

  1. mysql使用基础 sql语句与数据完整性(二)

    二.DML:Data Manipulation Language 数据操作语言 作用:操作表中的数据的. 关键:INSERT UPDATE DELETE 注意:日期或字符串.字符要使用单引号引起来. ...

  2. Object C学习笔记26-文件管理(二)

    上一篇简单的介绍了如何获取文件属性,删除,拷贝文件等,本文继续记录Object C中文件IO操作. 一. 获取文件的执行主目录 在Object C中提供了一个方法 NSHomeDirectory() ...

  3. nginx 配置虚拟主机

    文章转载自:http://www.ttlsa.com/html/1571.html 上篇说道我们的nginx是安装在/usr/local/nginx/ cd conf 我们现在把所有的虚拟主机放在一个 ...

  4. HYSBZ1036 树链剖分

    这题我建了2棵线段树,这样来处理 最值和和值,简单的题目. #include<queue> #include<stack> #include<cmath> #inc ...

  5. Learn sed using these command on Linux(流线式编辑器——sed)

    是对文件中的每一行进行处理,不会对源文件进行修改 sed --version sed '11d' sed_file sed -n '/[Bb]erry/p' sed_file (由于设置了n,所以只打 ...

  6. 【ZOJ 3897】Candy canes//Fiddlesticks

    题 题意 给你一串数,a1...an,从左到右每次让一个数减小c,如果这个数小于c,那就减为0.第n个数减小后,又从第一个开始从左到右.如果这次某个数减小到0,那就改变方向,如果遇到已经是0的,就跳过 ...

  7. 使用XML序列化器生成XML文件和利用pull解析XML文件

    首先,指定XML格式,我指定的XML格式如下: <?xml version='1.0' encoding='utf-8' standalone='yes' ?> <message&g ...

  8. 【bzoj1853】 Scoi2010—幸运数字

    http://www.lydsy.com/JudgeOnline/problem.php?id=1853 (题目链接) 今天考试考了容斥,结果空知道结论却不会写→_→ 题意 求区间中不含6,8两个数字 ...

  9. SQL Server数据库还原:"因为数据库正在使用,所以无法获得对数据库的独占访问权"

    如题,网上找了一些客套的方法,如果不想去折腾,请看我的方法: 1.先脱机数据库,这个目的就是为了停掉所有链接 2.选择还原数据库,如果提示日志尾部不完整,请选择数据库属性的选项,覆盖现有数据. 还可以 ...

  10. ajax提交特殊字符的处理

    前台页面用encodeURIComponent()这个js方法 rule=encodeURIComponent(rule);//对特殊字符编码 后台页面 java.net.URLDecoder url ...