前言
iSCSI又称为IP-SAN,是一种基于因特网及SCSI-3协议下的存储技术,iSCSI利用了TCP/IP的port 860 和 3260 作为沟通的渠道。透过两部计算机之间利用iSCSI的协议来交换SCSI命令,让计算机可以透过高速的局域网集线来把SAN模拟成为本地的储存装置。iSCSI的实现方法主要有tgtd、LIO、SCST、IET等几种方式。
一、iSCSI存储简介
ISCSI 基于TCP/IP协议,将存储设备通过ISCSI target 功能,配置成可提供共享磁盘空间的服务端,再通过ISCSI initator功能,将服务端ISCSI磁盘映射到本地使用。
ISCSI 主要分为两部分,分别是:
- ISCSI target :存储设备端,存放磁盘或RAID的设备,通过tgtd将Linux主机仿真成ISCSI target,提供其他主机使用的磁盘。
- ISCSI initiator: 存储客户端,通常是普通服务器,安装iscsi initiator后,使用ISCSI target 提供磁盘空间。
角色 | IP | 系统 |
服务端 | 192.168.1.10 | CentOS7.6 |
客户端 | 192.168.1.11 | CentOS7.6 |
二、iSCSI服务端配置
1.关闭防火墙和selinux
systemctl stop firewalld
systemctl disable firewalld
sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config
setenforce 0
注意:必须关闭selinux,否则tgt服务无法启动
2.安装服务端
yum install epel-release -y
yum install scsi-target-utils –y
3.创建虚拟磁盘文件
mkdir -p /data/iscsi
truncate /data/iscsi/disk1 -s 10G
chmod 777 /data/iscsi/disk1
4.创建target
cat <<EOF > /etc/tgt/conf.d/disk1.conf
<target iqn.2023-05.com.example:disk1>
backing-store /data/iscsi/disk1
scsi_id e087acc9-5ef0-4c01-87a7-b9c2e0598468
</target>
EOF
注意:其它详细配置规范和说明,可参考文件/etc/tgt/conf.d/sample.conf内容
5.启动服务
systemctl start tgtd
systemctl enable tgtd
注意:如果tgt服务无法启动,需检查selinux是否关闭
三、客户端配置
1.安装客户端
yum install iscsi-initiator-utils –y
2.映射iscsi
iscsiadm -m discovery -t st -p 192.168.1.10
iscsiadm -m node -T iqn.2023-03.org:disk1.test -p 192.168.1.10:3260 -l
3.检查iscsi映射磁盘
iscsiadm -m node
lsscsi
lsblk
4.格式化iscsi并挂载使用
mkdir /data/sdc -p
mkfs.xfs /dev/sdc
5.配置/etc/fstab文件,设置开机后自动挂载,末尾写入如下内容
UUID=38c7beff-a88a-4a9b-b078-c2992600c5dd /data/sdc/ xfs defaults,_netdev 0 0
注意:挂载的时候一定要加_netdev参数,否则重启会卡住
_netdev是针对iscsi设备的特殊mount 选项,此挂载选择指示将在网络启动后挂载卷,在关闭网络前卸载掉卷。
建议通过文件系统UUID来挂载,防止盘符会变,可通过blkid /dev/sdc命令获取磁盘UUID
6.挂载磁盘
mount -a
注意:挂载失败,则说明/etc/fstab文件内容配置错误,需要进行检查
四、问题记录
问题复现步骤:
客户端通过iscsi映射磁盘后,格式化为xfs,并进行挂载,之后向挂载点用fio写入数据。
发现报错:
Tgt服务端报错:
Jun 28 13:25:50 node1 kernel: XFS: tgtd(30339) possible memory allocation deadlock size 524304 in kmem_realloc (mode:0x250) Jun 28 13:25:52 node1 kernel: XFS: tgtd(30339) possible memory allocation deadlock size 524304 in kmem_realloc (mode:0x250) Jun 28 13:25:54 node1 kernel: XFS: tgtd(30339) possible memory allocation deadlock size 524304 in kmem_realloc (mode:0x250) Jun 28 13:25:56 node1 kernel: XFS: tgtd(30339) possible memory allocation deadlock size 524304 in kmem_realloc (mode:0x250) Jun 28 13:25:58 node1 kernel: XFS: tgtd(30339) possible memory allocation deadlock size 524304 in kmem_realloc (mode:0x250)
解答1:是内核bug,需要升级为 kernel-3.10.0-1062.el7
参考连接:https://forums.centos.org/viewtopic.php?t=52412