3.9.4 iSCSI存储原理与部署
3.9.4 iSCSI存储原理与部署#
iSCSI(Internet Small Computer Systems Interface)通过TCP/IP网络承载SCSI命令,使远端块设备在客户端呈现为本地磁盘。典型场景:虚拟化存储、数据库裸设备、集中式存储池。
原理与架构草图#
核心概念与命令解释#
- Target:提供存储服务的服务器(LIO/targetcli)。
- Initiator:客户端(iscsiadm)。
- IQN:iSCSI唯一标识。
- LUN:逻辑单元号,呈现块设备。
- Portal:目标端监听 IP:3260。
- 关键命令说明:
targetcli:管理LIO Target与LUN。iscsiadm:发现、登录、管理会话。lsblk/blkid:确认新块设备。multipath -ll:检查多路径(可选)。
部署示例(Rocky/Alma/CentOS 7+)#
环境假设
- Target:10.0.0.10
- Initiator:10.0.0.20
- 后端:/dev/vdb(20G)
1) Target端安装与基础配置#
# 安装
yum -y install targetcli firewalld
# 启动服务
systemctl enable --now firewalld
systemctl enable --now target
# 放行3260端口
firewall-cmd --add-port=3260/tcp --permanent
firewall-cmd --reload
# 创建IQN与LUN(targetcli交互)
targetcli <<'EOF'
/backstores/block create name=iscsi_disk dev=/dev/vdb
/iscsi create iqn.2024-01.local.lab:storage.target01
/iscsi/iqn.2024-01.local.lab:storage.target01/tpg1/luns create /backstores/block/iscsi_disk
/iscsi/iqn.2024-01.local.lab:storage.target01/tpg1/acls create iqn.2024-01.local.lab:client.initiator01
/iscsi/iqn.2024-01.local.lab:storage.target01/tpg1 set attribute authentication=1 demo_mode_write_protect=0 generate_node_acls=0 cache_dynamic_acls=0
/iscsi/iqn.2024-01.local.lab:storage.target01/tpg1/acls/iqn.2024-01.local.lab:client.initiator01 set auth userid=chapuser password=chapsecret
saveconfig
exit
EOF
预期效果:LUN 0 已绑定 /dev/vdb,仅允许指定 Initiator IQN 访问,且启用 CHAP。
2) Initiator端安装与发现登录#
# 安装
yum -y install iscsi-initiator-utils
# 配置本机IQN(需与Target ACL匹配)
cat >/etc/iscsi/initiatorname.iscsi <<'EOF'
InitiatorName=iqn.2024-01.local.lab:client.initiator01
EOF
# 发现Target
iscsiadm -m discovery -t sendtargets -p 10.0.0.10
# 配置CHAP认证
iscsiadm -m node -T iqn.2024-01.local.lab:storage.target01 -p 10.0.0.10 \
--op update -n node.session.auth.authmethod -v CHAP
iscsiadm -m node -T iqn.2024-01.local.lab:storage.target01 -p 10.0.0.10 \
--op update -n node.session.auth.username -v chapuser
iscsiadm -m node -T iqn.2024-01.local.lab:storage.target01 -p 10.0.0.10 \
--op update -n node.session.auth.password -v chapsecret
# 登录
iscsiadm -m node -T iqn.2024-01.local.lab:storage.target01 -p 10.0.0.10 --login
# 查看新盘
lsblk
预期效果:出现新块设备(如 /dev/sdb)。
3) 分区、格式化与挂载#
# 分区(示例)
parted -s /dev/sdb mklabel gpt mkpart primary xfs 0% 100%
# 格式化
mkfs.xfs /dev/sdb1
# 挂载
mkdir -p /data/iscsi01
mount /dev/sdb1 /data/iscsi01
# 持久化(使用UUID更稳妥)
blkid /dev/sdb1
echo "UUID=<替换为实际UUID> /data/iscsi01 xfs defaults,_netdev 0 0" >> /etc/fstab
命令说明
- _netdev:确保网络就绪后再挂载。
- lsblk:确认块设备与分区关系。
多路径(可选,生产推荐)#
# 安装与启用
yum -y install device-mapper-multipath
mpathconf --enable --with_multipathd y
systemctl enable --now multipathd
# 重新登录后检查
multipath -ll
预期效果:同一LUN聚合为 /dev/mapper/mpathX。
关键运维要点#
- 避免多主机同时写同一LUN(除非集群文件系统)。
- 建议独立存储网络或VLAN隔离。
- 关注 MTU、带宽、IO队列深度、LUN使用率与延迟。
- 使用CHAP与ACL做访问控制。
常见故障排查(含命令)#
1) 发现不到Target
# 网络连通性与端口
ping 10.0.0.10
nc -zv 10.0.0.10 3260
# Target端服务状态
systemctl status target
targetcli ls
2) 登录失败/认证失败
# 核对IQN与CHAP
grep InitiatorName /etc/iscsi/initiatorname.iscsi
iscsiadm -m node -T iqn.2024-01.local.lab:storage.target01 -p 10.0.0.10 -o show | grep auth
3) 挂载失败
# 检查设备与文件系统
lsblk
blkid /dev/sdb1
dmesg | tail -n 50
4) 性能不佳
# 网络与磁盘IO检查
ethtool -S eth0 | head
iostat -xm 1 3
练习题#
1) 在Target端创建第二个LUN(文件后端 /data/iscsi_file.img),并仅允许另一台Initiator访问。
2) 在Initiator端完成发现、登录、格式化与挂载,验证重启后自动挂载。
3) 模拟CHAP错误密码,观察登录失败信息并修正。