ISCSI网络存储
ISCSI(iSCSI,Internet Small Computer System Interface)
iSCSI技术实现了物理硬盘设备与TCP/IP网络协议的相互结合,使得用户可以通过互联网方便地访问远程机房提供的共享存储资源。
既然要使用iSCSI存储技术为远程用户提供共享存储资源,首先要保障用于存放资源的服务器的稳定性与可用性,否则一旦在使用过程中出现故障,则维护的难度相较于本地硬盘设备要更加复杂、困难。
-
创建RAID阵列(保证数据安全性 RAID10)
此处略过,RAID详细创建过程讲解请看 https://www.cnblogs.com/zhangjianghua/p/9091200.html
2、配置iSCSI服务端
iSCSI技术在工作形式上分为服务端(target)与客户端(initiator)。
iSCSI服务端即用于存放硬盘存储资源的服务器,它作为前面创建的RAID磁盘阵列的存储端,能够为用户提供可用的存储资源。iSCSI客户端则是用户使用的软件,用于访问远程服务端的存储资源。
iSCSI服务端和客户端的操作系统以及IP地址:
主机名称 | 操作系统 | IP地址 |
iSCSI服务端 | RHEL 7 | 192.168.38.251 |
iSCSI客户端 | RHEL 7 | 192.168.38.250 |
第1步:安装iSCSI服务端程序以及配置命令工具;安装完成后,启动iSCSI的服务端程序targetd,然后把这个服务程序加入到开机启动项中
[root@zhangjh ~]# yum install targetd targetcli -y [root@zhangjh ~]# systemctl start targetd [root@zhangjh ~]# systemctl enable targetd ln -s '/usr/lib/systemd/system/targetd.service' '/etc/systemd/system/multi-user.target.wants/targetd.service'
第2步:配置iSCSI服务端共享资源。
targetcli是用于管理iSCSI服务端存储资源的专用配置命令,它能够提供类似于fdisk命令的交互式配置功能,将iSCSI共享资源的配置内容抽象成“目录”的形式,我们只需将各类配置信息填入到相应的“目录”中即可。
[root@zhangjh ~]# targetcli targetcli shell version 2.1.fb34 Copyright 2011-2013 by Datera, Inc and others. For help on commands, type 'help'. /> ls o- / ................................................................................ [...] o- backstores ..................................................................... [...] | o- block ......................................................... [Storage Objects: 0] | o- fileio ........................................................ [Storage Objects: 0] | o- pscsi ......................................................... [Storage Objects: 0] | o- ramdisk ....................................................... [Storage Objects: 0] o- iscsi ................................................................... [Targets: 1] | o- iqn.2003-01.org.linux-iscsi.zhangjh.x8664:sn.858af61dee6c ................ [TPGs: 1] | o- tpg1 ...................................................... [no-gen-acls, no-auth] | o- acls ................................................................. [ACLs: 0] | o- luns ................................................................. [LUNs: 0] | o- portals ........................................................... [Portals: 0] o- loopback ................................................................ [Targets: 0] /> cd /backstores/block /backstores/block> create disik0 /dev/md0 Created block storage object disik0 using /dev/md0. /backstores/block> cd / /> ls o- / ................................................................................ [...] o- backstores ..................................................................... [...] | o- block ......................................................... [Storage Objects: 1] | | o- disik0 ............................... [/dev/md0 (40.0GiB) write-thru deactivated] | o- fileio ........................................................ [Storage Objects: 0] | o- pscsi ......................................................... [Storage Objects: 0] | o- ramdisk ....................................................... [Storage Objects: 0] o- iscsi ................................................................... [Targets: 1] | o- iqn.2003-01.org.linux-iscsi.zhangjh.x8664:sn.858af61dee6c ................ [TPGs: 1] | o- tpg1 ...................................................... [no-gen-acls, no-auth] | o- acls ................................................................. [ACLs: 0] | o- luns ................................................................. [LUNs: 0] | o- portals ........................................................... [Portals: 0] o- loopback ................................................................ [Targets: 0] />
第3步:创建iSCSI target名称及配置共享资源。
iSCSI target名称是由系统自动生成的,这是一串用于描述共享资源的唯一字符串。稍后用户在扫描iSCSI服务端时即可看到这个字符串,因此我们不需要记住它。
系统在生成这个target名称后,还会在/iscsi参数目录中创建一个与其字符串同名的新“目录”用来存放共享资源。
我们需要把前面加入到iSCSI共享资源池中的硬盘设备添加到这个新目录中,这样用户在登录iSCSI服务端后,即可默认使用这硬盘设备提供的共享存储资源了。
/> cd iscsi/ /iscsi> create Created target iqn.2003-01.org.linux-iscsi.zhangjh.x8664:sn.762bbcbd6853. Created TPG 1. /iscsi> cd iqn.2003-01.org.linux-iscsi.zhangjh.x8664:sn.762bbcbd6853/ /iscsi/iqn.20....762bbcbd6853> ls o- iqn.2003-01.org.linux-iscsi.zhangjh.x8664:sn.762bbcbd6853 .................... [TPGs: 1] o- tpg1 .......................................................... [no-gen-acls, no-auth] o- acls ..................................................................... [ACLs: 0] o- luns ..................................................................... [LUNs: 0] o- portals ............................................................... [Portals: 0] /iscsi/iqn.20....762bbcbd6853> cd tpg1/luns /iscsi/iqn.20...853/tpg1/luns> create /backstores/block/disik0 Created LUN 0. /iscsi/iqn.20...853/tpg1/luns>
第4步:设置访问控制列表(ACL)。
iSCSI协议是通过客户端名称进行验证的,也就是说,用户在访问存储共享资源时不需要输入密码,只要iSCSI客户端的名称与服务端中设置的访问控制列表中某一名称条目一致即可,
因此需要在iSCSI服务端的配置文件中写入一串能够验证用户信息的名称。acls参数目录用于存放能够访问iSCSI服务端共享存储资源的客户端名称。
/iscsi/iqn.20...853/tpg1/luns> cd .. /iscsi/iqn.20...bcbd6853/tpg1> cd acls /iscsi/iqn.20...853/tpg1/acls> create iqn.2003-01.org.linux-iscsi.zhangjh.x8664:sn.762bbcbd6853:client Created Node ACL for iqn.2003-01.org.linux-iscsi.zhangjh.x8664:sn.762bbcbd6853:client Created mapped LUN 0. /iscsi/iqn.20...853/tpg1/acls>
第5步:设置iSCSI服务端的监听IP地址和端口号。
位于生产环境中的服务器上可能有多块网卡,那么到底是由哪个网卡或IP地址对外提供共享存储资源呢?
这就需要我们在配置文件中手动定义iSCSI服务端的信息,即在portals参数目录中写上服务器的IP地址。
接下来将由系统自动开启服务器192.168.10.10的3260端口将向外提供iSCSI共享存储资源服务:
/iscsi/iqn.20...853/tpg1/acls> cd .. /iscsi/iqn.20...bcbd6853/tpg1> cd portals /iscsi/iqn.20.../tpg1/portals> create 192.168.38.251 Using default IP port 3260 Created network portal 192.168.38.251:3260. /iscsi/iqn.20.../tpg1/portals>
第6步:配置妥当后检查配置信息,重启iSCSI服务端程序并配置防火墙策略。
/iscsi/iqn.20.../tpg1/portals> ls / o- / ................................................................................ [...] o- backstores ..................................................................... [...] | o- block ......................................................... [Storage Objects: 1] | | o- disik0 ................................. [/dev/md0 (40.0GiB) write-thru activated] | o- fileio ........................................................ [Storage Objects: 0] | o- pscsi ......................................................... [Storage Objects: 0] | o- ramdisk ....................................................... [Storage Objects: 0] o- iscsi ................................................................... [Targets: 2] | o- iqn.2003-01.org.linux-iscsi.zhangjh.x8664:sn.762bbcbd6853 ................ [TPGs: 1] | | o- tpg1 ...................................................... [no-gen-acls, no-auth] | | o- acls ................................................................. [ACLs: 1] | | | o- iqn.2003-01.org.linux-iscsi.zhangjh.x8664:sn.762bbcbd6853:client [Mapped LUNs: 1] | | | o- mapped_lun0 ....................................... [lun0 block/disik0 (rw)] | | o- luns ................................................................. [LUNs: 1] | | | o- lun0 ............................................... [block/disik0 (/dev/md0)] | | o- portals ........................................................... [Portals: 1] | | o- 192.168.38.251:3260 ..................................................... [OK] | o- iqn.2003-01.org.linux-iscsi.zhangjh.x8664:sn.858af61dee6c ................ [TPGs: 1] | o- tpg1 ...................................................... [no-gen-acls, no-auth] | o- acls ................................................................. [ACLs: 0] | o- luns ................................................................. [LUNs: 0] | o- portals ........................................................... [Portals: 0] o- loopback ................................................................ [Targets: 0] /iscsi/iqn.20.../tpg1/portals> exit Global pref auto_save_on_exit=true Last 10 configs saved in /etc/target/backup. Configuration saved to /etc/target/saveconfig.json [root@zhangjh ~]# systemctl restart targetd [root@zhangjh ~]# iptables -F [root@zhangjh ~]# service iptables save iptables: Saving firewall rules to /etc/sysconfig/iptables:[ OK ]
配置Linux客户端:
[root@zhangjh ~]# yum install iscsi-initiator-utils.i686 -y
编辑iSCSI客户端中的initiator名称文件,把服务端的访问控制列表名称填写进来,然后重启客户端iscsid服务程序并将其加入到开机启动项中
[root@zhangjh ~]# vim /etc/iscsi/initiatorname.iscsi InitiatorName=iqn.2003-01.org.linux-iscsi.zhangjh.x8664:sn.762bbcbd6853:client [root@zhangjh ~]# systemctl restart iscsid [root@zhangjh ~]# systemctl enable iscsid ln -s '/usr/lib/systemd/system/iscsid.service' '/etc/systemd/system/multi-user.target.wants/iscsid.service'
iscsiadm是用于管理、查询、插入、更新或删除iSCSI数据库配置文件的命令行工具,用户需要先使用这个工具扫描发现远程iSCSI服务端,然后查看找到的服务端上有哪些可用的共享存储资源。
其中,-m discovery参数的目的是扫描并发现可用的存储资源,-t st参数为执行扫描操作的类型,-p 参数为iSCSI服务端的IP地址:
发现卷:
[root@zhangjh ~]# iscsiadm -m discovery -t st -p 192.168.38.251 192.168.38.251:3260,-1 iqn.2003-01.org.linux-iscsi.zhangjh.x8664:sn.858af61dee6c #这个是前边多创建了一个 192.168.38.251:3260,1 iqn.2003-01.org.linux-iscsi.zhangjh.x8664:sn.762bbcbd6853
登录iSCSI服务端
[root@zhangjh ~]# iscsiadm -m node -T iqn.2003-01.org.linux-iscsi.zhangjh.x8664:sn.762bbcbd6853 -p 192.168.38.251 --login Logging in to [iface: default, target: iqn.2003-01.org.linux-iscsi.zhangjh.x8664:sn.762bbcbd6853, portal: 192.168.38.251,3260] (multiple) Login to [iface: default, target: iqn.2003-01.org.linux-iscsi.zhangjh.x8664:sn.762bbcbd6853, portal: 192.168.38.251,3260] successful.
在iSCSI客户端成功登录之后,会在客户端主机上多出一块名为/dev/sdb的设备文件。
[root@zhangjh ~]# file /dev/sdb /dev/sdb: block special
下面进入标准的磁盘操作流程:
[root@zhangjh ~]# mkfs.xfs /dev/sdb -f log stripe unit (524288 bytes) is too large (maximum is 256KiB) log stripe unit adjusted to 32KiB meta-data=/dev/sdf isize=256 agcount=16, agsize=654720 blks = sectsz=512 attr=2, projid32bit=1 = crc=0 data = bsize=4096 blocks=10475520, imaxpct=25 = sunit=128 swidth=256 blks naming =version 2 bsize=4096 ascii-ci=0 ftype=0 log =internal log bsize=4096 blocks=5120, version=2 = sectsz=512 sunit=8 blks, lazy-count=1 realtime =none extsz=4096 blocks=0, rtextents=0
挂载并使用:
[root@zhangjh ~]# mkdir /iscsi [root@zhangjh ~]# mount /dev/sdb /iscsi/ [root@zhangjh ~]# df -h Filesystem Size Used Avail Use% Mounted on /dev/mapper/rhel-root 18G 3.1G 15G 18% / devtmpfs 909M 0 909M 0% /dev tmpfs 918M 140K 917M 1% /dev/shm tmpfs 918M 9.0M 909M 1% /run tmpfs 918M 0 918M 0% /sys/fs/cgroup /dev/sr0 3.5G 3.5G 0 100% /media/cdrom /dev/sda1 497M 119M 379M 24% /boot /dev/sdb 40G 33M 40G 1% /iscsi
从此以后,这个设备文件就如同是客户端本机主机上的硬盘那样工作了
如果我们不再需要使用iSCSI共享设备资源了,可以用iscsiadm命令的-u参数将其设备卸载:
[root@zhangjh ~]# iscsiadm -m node -T iqn.2003-01.org.linux-iscsi.zhangjh.x8664:sn.762bbcbd6853 -u Logging out of session [sid: 1, target: iqn.2003-01.org.linux-iscsi.zhangjh.x8664:sn.762bbcbd6853, portal: 192.168.38.251,3260] Logout of [sid: 1, target: iqn.2003-01.org.linux-iscsi.zhangjh.x8664:sn.762bbcbd6853, portal: 192.168.38.251,3260] successful.
配置windows客户端:
第1步:运行iSCSI发起程序。
第2步:扫描发现iSCSI服务端上可用的存储资源。
在弹出的“快速连接”提示框中可看到共享的硬盘存储资源,单击“完成”按钮即可
第3步:连接iSCSI服务端的共享存储资源。
由于在iSCSI服务端程序上设置了ACL,使得只有客户端名称与ACL策略中的名称保持一致时才能使用远程存储资源,因此需要在“配置”选项卡中单击“更改”按钮,把iSCSI发起程序的名称修改为服务端
然后点击连接
显示连接成功:格式化分区即可使用