1,ISCSI网络存储服务
ISCSI技术是实现物理硬盘设备与TCP/IP网络协议的相结合,使用户可以通过互联网方便的访问远程机房提供的共享存储资源.本次我们在linux系统上部署服务端程序, 并分别在linux系统和Windows系统上来远程访问的存储资源.
2,ISCSI技术概述
为了进一步提升硬盘存储设备的读写速度和性能,一直在努力改进物理硬盘设备的接口协议。当前的硬盘接口类型主要有 IDE、SCSI 和 SATA 这3种。
➢ IDE是一种成熟稳定、价格便宜的并行传输接口。
➢ SATA是一种传输速度更快、数据校验更完整的串行传输接口。
➢ SCSI是一种用于计算机和硬盘、光驱等设备之间系统级接口的通用标准,具有系统资源占用率低、转速高、传输速度快等优点.
不论使用什么类型的硬盘接口,硬盘上的数据总是要通过计算机主板上的总线与 CPU、内存设备进行数据交换,这种物理环境上的限制给硬盘资源的共享带来了各 种不便。
后来,IBM 公司开始动手研发基于 TCP/IP 协议和 SCSI 接口协议的新型存储技术,这也就是我们目前能看到的互联网小型计算机系统接口(iSCSI,Internet Small Computer System Interface)。这是一种将 SCSI 接口与以太网技术相结合的新型存储技术,可以用来在网络中传输 SCSI 接口的命令和数据.
3,创建Raid磁盘阵列
既然要使用 iSCSI 存储技术为远程用户提供共享存储资源,首先要保障用于存放资源的服务器的稳定性与可用性,否则一旦在使用过程中出现故障,则维护的难度 相较于本地硬盘设备要更加复杂、困难.因此推荐来部署 RAID 磁盘阵列组,确保数据的安全性.
在开启虚拟机之前,添加4块硬盘,来创建Raid5磁盘阵列,开机使用madam命令创建
mdadm -Cv /dev/md0 -n 3 -l 5 -x 1 /dev/sdb /dev/sdc /dev/sdd /dev/sde -Cv 参数为创建阵列并显示过程,/dev/md0为生成的阵列组名称,-n 3 参数为创建RAID5磁 盘阵列所需的硬盘个数,-l 5 参数为RAID磁盘阵列的级别,-x 1 参数为磁盘阵列的备份盘个数,在命令后面要逐一写上使用的硬盘名称.
成功后,会出现一个名称为/dev/md0的新设备,这就是Raid5级别的磁盘阵列,并且还有一块是备份盘.
mdadm -D /dev/md0 ---查看设备的详细信息
4,配置ISCSI服务端
ISCSI技术在工作上分为服务端(target)与客户端(initiator)。
ISCSI服务端即用于存放硬盘存储资源的服务器,为用户提供可用的存储资源。ISCSI 客户端则是用户使用的软件,用于访问远程服务端的存储资源.
4-1,使用配置好的Yum软件库安装ISCSI服务端程序以及配置命令工具.
yum -y install targetd targetcli ---y参数,所有操作默认yes
systemctl restart targetd 重启服务端程序
systemctl enable targetd 设置为开机启动服务
4-2,配置ISCSI服务端共享资源, targetcli是用于管理iSCSI服务端存储资源的专用配置命令,提供类似于fdisk命令的交互式配置功能,将ISCSI共享资源的配置内容抽 象成“目录”的形式,我们只需将各类配置信息填入到相应的“目录”中即可.
在执行targetcli命令后就能看到交互式的配置界面。在该界面中可以使用很多Linux命令,比如利用ls查看目录参数的结构,使用cd切换到不同的目录中。
/backstores/block 是 ISCSI服务端配置共享设备的位置。把刚刚创建的 RAID 5 磁盘阵列 md0 文件加入到配置共享设备的“资源池”中,并将该文件重新命名为 disk0.
执行targetcli命令进入交互式配置界面,ls查看以下所有目录
/> 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: 0]
o- loopback ................................................... [Targets: 0]
/> cd /backstores/block
/backstores/block> create disk0 /dev/md0
Created block storage object disk0 using /dev/md0.
/backstores/block> cd /
/> ls
o- / ................... ............................................... [...]
o- backstores ........................................................ [...]
| o- block ........................................... [Storage Objects: 1]
| | o- disk0 .................. [/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: 0]
o- loopback .................................................. [Targets: 0]
4-3,创建ISCSI target 名称及配置共享资源, ISCSI target 名称是由系统自动生成的,是一串用于描述共享资源的唯一字符串,可以自己命名.
/> cd iscsi
/iscsi>
/iscsi> create iqn.2091-10.org.linux
Created target iqn.2019-10.org.linux.
Created TPG 1.
/iscsi> cd iqn.2019-10.org.linux/
/iscsi/iqn.2019-10.org.linux> ls
o- iqn.2019-10.org.linux .... [TPGs: 1]
o- tpg1 ............................................. [no-gen-acls, no-auth]
o- acls ........................................................ [ACLs: 0]
o- luns ........................................................ [LUNs: 0]
o- portals .................................................. [Portals: 0]
/iscsi/iqn.2019-10.org.linux> cd tpg1/luns
/iscsi/iqn.2019-10.org.linux> create /backstores/block/disk0
Created LUN 0.
4-4,设置访问控制列表(ACL),ISCSI协议是通过客户端名称进行验证的,也就是说,用户在访问存储共享资源时不需要输入密码,只要 ISCSI 客户端的名称与服务端中设置的访问控制列表中某一名称条目一致即可,因此需要在 ISCSI 服务端的配置文件中写入一串能够验证用户信息的名称。acls 参数目录用于存放能够访问 ISCSI 服务端共享存储资源的客户端名称。在刚刚系统生成的 ISCSI target 后面追加上类似于:client 的参数,这样能保证客户端的名称具有唯一性.
/iscsi/iqn.2019-10.org.linux/tpg1/luns> cd ..
/iscsi/iqn.2019-10.org.linux/tpg1> cd acls
/iscsi/iqn.2019-10.org.linux/tpg1/acls> create iqn.2019-10.org.linux:client
Created Node ACL for iqn.2019-10.org.linux:client
Created mapped LUN 0.
4-5,设置ISCSI服务端的监听IP地址和端口号,IP地址即为服务器的IP地址.
/iscsi/iqn.2019-10.org.linux/tpg1/acls> cd ..
/iscsi/iqn.2019-10.org.linux/tpg1> cd portals
/iscsi/iqn.2019-10.org.linux/tpg1/portals> create 192.168.13.10
Using default IP port 3260
Created network portal 192.168.13.10:3260.
4-6,配置完后,执行exit退出,此命令是默认保存退出的,所以不用担心之前的操作会消失.
systemc restart targetd 重启服务使其生效
4-7,因为我们新添加的端口号,所以要在防火墙配置中添加策略.
firewall-cmd --add-port=3260/tcp --permanent 添加3260的网络端口,并永久生效
firewall-cmd --reload 重载防火墙使其生效
ISCSI服务端到这里就配置完毕了,下面配置Linux客户端和Windows客户端作对比.
5,配置linux客户端
5-1,yum -y install iscsi-initiator-utils 安装ISCSI客户端服务程序initiator
5-2,ISCSI协议是通过客户端的,名称来进行验证的,所以该名称就就是ISCSI客户端唯一的标识.
编辑ISCSI客户端中的initiator名称文件,把服务端的访问控制列表名称填写进来,然后重启服务程序,并设置为开机启动.
vim /etc/iscsi/initiatorname.iscsi
InitiatorName=iqn.2019-10.org.linux
systemctl restart iscsid
systemctl enable iscsid
5-3,ISCSI客户端访问并使用共享存储资源的步骤是"先发现,再登录,然后挂载使用".
iscsiadm 是用于管理、查询、插入、更新或删除 iSCSI数据库配置文件的命令行工具,用户需要先使用这个工具扫描发现远程 iSCSI 服务端,然后查看找到的服 务端上有哪些可用的共享存储资源。
其中,-m discovery 参数的目的是扫描并发现可用的存储资源,-t sendtarget 参数为执行扫描操作的类型,-p 192.168.13.10 参数为 iSCSI 服务端的IP地址
iscsiadm -m discovery -t sendtarget -p 192.168.13.10
准备登录ISCSI服务端,-m node 参数为将客户端所在主机作为一台节点服务器,-T iqn.2019-10.org.linux 参数为要使用的存储资源(大家可以直接复制前面命令 中扫描发现的结果,以免录入错误),-p 192.168.13.10 参数依然为对方 iSCSI 服务端的 IP 地址。最后使用--login 或-l 参数进行登录验证
iscsiadm -m node -T iqn.2019-10.org.linux -p 192.168.13.10 --login
出现successful的字样,即为登陆成功.
5-4,登录成功后,会看到客户端主机上多了一块名为/dev/sdb的设备文件.
file /dev/sdb file 查看文件的命令
/dev/sdb: block special 特殊的块设备文件
5-5,然后就是标准的磁盘操作流程了,先格式化然后挂载使用.
mkfs.xfs /dev/sdb 格式化成xfs的文件系统
mkdir /iscsi 创建挂载目录
mount /dev/sdb /iscsi 执行挂载命令
df -h 查看是否挂载成功,成功后在最下面看到sdb的设备
5-6,由于 udev 服务是按照系统识别硬盘设备的顺序来命名硬盘设备的,当客户端主机同时使用多个远程存储资源时,如果下一次识别远程设备的顺序发生了变化,则客户端挂载目录中的文件也将随之混乱。为了防止发生这样的问题,我们应该在/etc/fstab 配置文件中使用设备的 UUID 唯一标识符进行挂载,
blkid | grep /dev/sdb blkid 命令查看设备的名称,文件系统以及UUID.
因为/dev/sdb 是一块网络存储设备,而ISCSI协议是基于TCP/IP网络传输数据的,因此在fstab配置文件中添加上_netdev参数,标识系统联网后进行挂载使用,以免系统开始时间过长或开机失败.
vim /etc/fstab
UUID=eb9cbf2f-fce8-413a-b770-8b0f243e8ad6 /iscsi xfs defaults,_netdev 0 0
5-7,如果不再使用ISCSI共享存储资源,可以用iscsiadm命令的-u参数将其卸载
iscsiadm -m node -T iqn.2019-10.org.linux -u
出现successful的字样,即为卸载成功.
6,配置Windows客户端
6-1,找到控制面板-->系统和安全-->管理工具-->iSCSI发起程序,双击打开;第一次开打时会提示"Microsoft iSCSI 服务端未运行",点击"是",即可启动程序.
6-2,运行 iSCSI 发起程序后在“目标”选项卡的“目标”文本框中写入 iSCSI 服务端的 IP 地址,然后单击“快速连接”按钮,在弹出的“快速连接”提示框中可看到共享的硬盘存储资源,单击“完成”按钮即可.
6-3,由于在 iSCSI 服务端程序上设置了 ACL,只有客户端名称与ACL 策略中的名称保持一致时才能使用远程存储资源,因此需要在“配置”选项卡中单击“更改”按钮,把iSCSI 发起程序的名称修改为服务端ACL 所定义的名称.
6-4,在确认客户端发起程序的名称修改正确后即可返回到“目标”选项卡页面中,然后单击“连接”按钮进行连接请求,成功连接到远程共享存储资源的页面.
6-5,右键单击桌面上的“计算机”图标,打开计算机管理程序,开始对磁盘进行初始化操作,然后新建简单卷,点击下一步,选择盘符,点击下一步,设置磁盘设备的格式以及卷标,点击下一步,完成.
完成后即可在计算机中看到我们新建的磁盘,可以使用了.