Linux 下 网络磁盘共享的部署(ISCSI)
- iSCSI( Internet Small Computer System Interface)
互 联 网 小 型 计 算 机 系 统 接 口 。这是一种将 SCSI 接口与以太网技术相结合的新型存储技术,可以用来在网络中传输 SCSI 接口的命令和数据。这样,不仅克服了传统 SCSI 接口设备的物理局限性,实现了跨区域的存储资源共享,还可以在不停机的状态下扩展存储容量。
通过此技术可以在本地电脑里面虚拟出一个远程电脑里面的磁盘。感觉像是在本机上的硬盘一样。其实他没在本机上。
具体配置如下
服务端
1. 安装对应版本的 targetcli
[root@server ~]# yum install targetcli -y
# 服务安装
[root@server ~]# systemctl start target
[root@server ~]# systemctl enable target
# 服务启动以及开机自启
建立共享磁盘
[root@server ~]# fdisk /dev/vdb
# 建立大小为 2G 的磁盘 vdb1
[root@server ~]# partprobe
# 手动同步分区表
2. 配置共享设备
执行 targetcli 进行编辑
2.1 服务端配置共享设备的位置
[root@server ~]# targetcli
/> /backstores/block create test:storage1 /dev/vdb1
/backstores/block 是 iSCSI
#把刚刚创建的 vdb1 磁盘 文件加入到配置共享设备的“资源池”中,
#并将该文件重新命名为 test:storage1,这样用户就不会知道是由服务器中
#的哪块硬盘来提供共享存储资源,而只会看到一个名为 test:storaget1 的存储设备。
执行如下:
2.2 创建 iSCSI target 名称及配置共享资源
/> /iscsi create iqn.2018-06.com.example:storage1
/> /iscsi/iqn.2018-06.com.example:storage1/tpg1/luns create /backstores/block/test:storage1
#iSCSI target 名称是由系统自动生成的,
#这是一串用于描述共享资源的唯一字符串。稍后用户在扫描 iSCSI 服务端时即可看到这个字
#符串,因此我们不需要记住它。系统在生成这个 target 名称后,还会在/iscsi 参数目录中
#创建一个与其字符串同名的新“目录”用来存放共享资源。我们需要把前面加入到 iSCSI 共享
#资源池中的硬盘设备添加到这个新目录中,这样用户在登录 iSCSI 服务端后,即可默认使用这
#硬盘设备提供的共享存储资源了。
执行如下:
2.3 设置访问控制列表(ACL)
/> /iscsi/iqn.2018-06.com.example:storage1/tpg1/acls create iqn.2018-06.com.example:testkey
#iSCSI 协议是通过客户端名称进行验证的,也就是说,用户在访问存储共享资源时不需要输入
#密码,只要 iSCSI 客户端的名称与服务端中设置的访问控制列表中某一名称条目一致即可,
#因此需要在 iSCSI 服务端的配置文件中写入一串能够验证用户信息的名称
执行如下:
2.4 设置 iSCSI 服务端的监听 IP 地址和端口号
/> /iscsi/iqn.2018-06.com.example:storage1/tpg1/portals create 172.25.151.150
#默认端口号为3260
#位于生产环境中的服务器上可能有多块网卡,需要我们在配置文件中手动定义 iSCSI 服务端
#的信息,规定使用哪块网卡。
#即在 portals 参数目录中写上服务器的 IP 地址。接下来将由系统自动开启服务器
#172.25.151.150 的 3260 端口将向外提供 iSCSI 共享存储资源服务:
执行如下:
客户端中
1. 安装客户端软件
安装 iSCSI 客户端服务程序 initiator
[root@client ~]# yum install iscsi-initiator-utils.x86_64 -y
2. 进行客户端配置
前面讲到,iSCSI 协议是通过客户端的名称来进行验证,而该名称也是 iSCSI 客户端的唯一标识,而且必须与服务端配置文件中访问控制列表中的信息一致,否则客户端在尝试访问存储共享设备时,系统会弹出验证失败的保存信息。
编辑 /etc/iscsi/initiatorname.iscsi
[root@client ~]# vim /etc/iscsi/initiatorname.iscsi
内容如下: 与设置访问控制列表(ACL) 内容一致
1 InitiatorName=iqn.2018-06.com.example:testkey
使用 iscsiam 命令进行查看
iscsiadm 是用于管理、查询、插入、更新或删除 iSCSI 数据库配置文件的命令行工具
-m discovery #参数的目的是扫描并发现可用的存储资源
-t st #参数为执行扫描操作的类型
-p 172.25.151.150 #参数为 iSCSI 服务端的 IP 地址
执行如下:
编辑 /etc/iscsi/initiatorname.iscsi
使用 iscsiam 命令进行查看
在使用 iscsiadm 命令发现了远程服务器上可用的存储资源后,接下来准备登录 iSCSI服务端。
[root@client ~]# iscsiadm -m node -T iqn.2018-06.com.example:storage1 -p 172.25.151.150 -l
-m node #参数为将客户端所在主机作为一台节点服务器
-T targetname #参数为要使用的存储资源(大家可以直接复制前面命令中扫描发现的结果,以免录入错误)
-p 172.25.151.150 #参数依然为 iSCSI 服务端的 IP 地址
--login 或-l #参数表示进行登录验证。
执行如下:
登录验证后可在客户端可发现多了 2G 磁盘 /dev/sda
3. 进行挂载使用
网络共享磁盘建立好后执行以下操作进行使用
1.执行 fdisk /dev/sda 进行磁盘划分(划分大小为500M)
[root@client ~]# fdisk /dev/sda
2.对划分后的磁盘进行格式化
[root@client ~]# mkfs.ext4 /dev/sda1
3.进行挂载使用
[root@client ~]# mount /dev/sda1 /mnt/
4.编辑 /etc/fstab 进行开机自动挂载
[root@client ~]# vim /etc/fstab
编辑内容如下:
/dev/sda1 /mnt ext4 defaults,_netdev 0 0
由于/dev/sdb 是一块网络存储设备,而 iSCSI 协议是基于TCP/IP 网络传输数据的,
因此必须在/etc/fstab 配置文件中添加上_netdev 参数,表示当系统联网后再进行挂载操作
以免系统开机时间过长或开机失败
因为iscsi建立的是网络设备,/etc/fstab 在网络启动前被读取,为了避免读取时无法找到网络设备,
应在配置文件中命令,先启动网络服务
在参数位置加上 _netdev 以满足此操作然后执行重启,进行效果查看
注:
initiator 服务在第一次关闭后是无法完成主动关闭的需要强制性进行关机,后面就不需要进行此操作了
执行如下:
建立磁盘并格式化后,可在 /proc/partitions 查看磁盘信息
进行挂在使用
编辑配置文件,设置开机自动挂载
4. 从客户端卸载共享磁盘
如果我们不再需要使用 iSCSI 共享设备资源了,可以用 iscsiadm 命令的-u 参数将其设备卸载
[root@client ~]# iscsiadm -m node -T iqn.2018-06.com.example:storage1 -p 172.25.151.150 -u
卸载成功,通过fdisk -l 可查看到效果
但通过 tree /var/lib/iscsi/ 还可以追踪到 iscsi 的相关文件,并且在重启iscsi 服务后会再次出现
通过 fdisk -l 可看到效果
执行如下命令进行删除:
[root@client ~]# iscsiadm -m node -T iqn.2018-06.com.example:storage1 -p 172.25.151.150 -o delete
此时再通过 tree /var/lib/iscsi 查看对应信息
执行如下:
卸载后,系统上无法找到 /dev/sda 磁盘
重启服务后再次出现
执行: tree /var/lib/iscsi/ 可发现对应文件依旧存在
进行删除命令,通过 tree 命令发现对应文件消失
重启服务后,磁盘未出现