1. iSCSI 服务器配置全流程解析
在企业级存储解决方案中,iSCSI(Internet Small Computer System Interface)是一种基于IP网络的存储协议,它允许客户端通过TCP/IP网络访问远程存储设备,就像访问本地存储一样。本文将详细介绍如何在Linux环境下配置iSCSI服务器(Target)和客户端(Initiator),并分享实际部署中的经验技巧。
1.1 环境准备与规划
在开始配置前,我们需要明确以下环境信息:
-
服务器节点:
- Storage节点:10.1.8.10 (storage.migaomei.cloud)
- Web1节点:10.1.8.11 (web1.migaomei.cloud)
- Web2节点:10.1.8.12 (web2.migaomei.cloud)
-
存储规划:
- Storage节点额外添加一块20GB SATA硬盘(/dev/sdb)
- 将/dev/sdb分区为10GB的XFS分区(/dev/sdb1)用于iSCSI共享
提示:在生产环境中,建议使用性能更好的SAS或NVMe硬盘,并考虑RAID配置以提高可靠性和性能。
1.2 基础配置
首先,在所有节点上配置主机名解析,确保各节点可以通过主机名相互访问:
bash复制# 在所有节点上编辑/etc/hosts文件
echo "10.1.8.10 storage.migaomei.cloud storage" >> /etc/hosts
echo "10.1.8.11 web1.migaomei.cloud web1" >> /etc/hosts
echo "10.1.8.12 web2.migaomei.cloud web2" >> /etc/hosts
2. iSCSI Target服务端配置
2.1 安装必要软件包
在Storage节点上安装iSCSI Target相关软件:
bash复制yum install -y targetd targetcli
targetcli是iSCSI Target的管理工具,提供了交互式和命令行两种配置方式。
2.2 准备存储设备
我们需要将新增的20GB硬盘(/dev/sdb)进行分区和格式化:
bash复制# 创建GPT分区表
parted /dev/sdb mklabel gpt
# 创建10GB的XFS分区
parted /dev/sdb unit MiB mkpart webapp xfs 1 10241
# 查看分区结果
lsblk /dev/sdb
输出应显示:
code复制NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sdb 8:16 0 20G 0 disk
└─sdb1 8:17 0 10G 0 part
2.3 启动iSCSI Target服务
启用并启动targetd服务:
bash复制systemctl enable targetd --now
2.4 使用targetcli配置iSCSI Target
targetcli提供了交互式配置界面,以下是详细配置步骤:
bash复制targetcli
2.4.1 创建存储后端
首先创建block存储后端,将物理设备映射为iSCSI可识别的存储对象:
bash复制/> cd /backstores/block
/backstores/block> create webapp /dev/sdb1
2.4.2 创建iSCSI Target
iSCSI Target使用IQN(iSCSI Qualified Name)作为唯一标识符,格式为:
iqn.年份-月份.域名反写.主机标识:自定义名称
bash复制/> cd /iscsi
/iscsi> create iqn.2026-01.cloud.migaomei.storage.x8664:webapp
2.4.3 配置访问控制(ACL)
设置允许访问该Target的客户端IQN:
bash复制/iscsi> cd iqn.2026-01.cloud.migaomei.storage.x8664:webapp/tpg1/
/iscsi/iqn.20...4:webapp/tpg1> acls/ create iqn.2026-01.cloud.migaomei.web1.x8664:webapp
2.4.4 创建LUN映射
将存储后端映射为LUN(Logical Unit Number):
bash复制/iscsi/iqn.20...4:webapp/tpg1> luns/ create /backstores/block/webapp
2.4.5 配置Portal
默认Portal监听所有IP(0.0.0.0),我们改为只监听内网IP:
bash复制/iscsi/iqn.20...4:webapp/tpg1> portals/ delete 0.0.0.0 3260
/iscsi/iqn.20...4:webapp/tpg1> portals/ create 10.1.8.10 3260
2.4.6 验证配置
使用ls命令查看最终配置:
bash复制/iscsi/iqn.20...4:webapp/tpg1> ls
确认配置无误后退出,配置会自动保存:
bash复制/> exit
2.5 防火墙配置
允许iSCSI服务通过防火墙:
bash复制firewall-cmd --add-service=iscsi-target
firewall-cmd --permanent --add-service=iscsi-target
3. iSCSI Initiator客户端配置
3.1 Web1节点配置
3.1.1 安装客户端软件
bash复制yum install -y iscsi-initiator-utils
3.1.2 配置Initiator名称
编辑/etc/iscsi/initiatorname.iscsi文件,设置与服务端ACL匹配的IQN:
bash复制echo "InitiatorName=iqn.2026-01.cloud.migaomei.web1.x8664:webapp" > /etc/iscsi/initiatorname.iscsi
3.1.3 发现并登录Target
bash复制# 发现Target
iscsiadm -m discovery -t st -p storage
# 登录Target
iscsiadm -m node -T iqn.2026-01.cloud.migaomei.storage.x8664:webapp -p storage -l
3.1.4 验证设备
登录成功后,查看新增的存储设备:
bash复制lsblk /dev/sdb
3.1.5 格式化并使用存储
bash复制# 格式化XFS文件系统
mkfs.xfs /dev/sdb
# 创建挂载点并挂载
mkdir -p /usr/share/nginx/html/webapp
mount /dev/sdb /usr/share/nginx/html/webapp
# 测试使用
echo "Hello World From iSCSI" > /usr/share/nginx/html/webapp/index.html
# 安装并启动Nginx
yum install -y nginx
systemctl enable nginx --now
3.2 Web2节点测试
按照相同步骤配置Web2节点,但使用不同的Initiator名称:
bash复制echo "InitiatorName=iqn.2026-01.cloud.migaomei.web2.x8664:webapp" > /etc/iscsi/initiatorname.iscsi
此时Web2节点会发现但无法登录Target,因为服务端未配置对应的ACL。需要在Storage节点上添加Web2的ACL:
bash复制targetcli /iscsi/iqn.2026-01.cloud.migaomei.storage.x8664:webapp/tpg1/acls/ create iqn.2026-01.cloud.migaomei.web2.x8664:webapp
添加后Web2节点即可成功登录并使用存储。
4. 高级配置与故障排除
4.1 非交互式配置
除了交互式targetcli界面,我们还可以使用命令行方式配置:
bash复制# 创建存储后端
targetcli /backstores/block create webapp /dev/sdb1
# 创建iSCSI Target
targetcli /iscsi create iqn.2026-01.cloud.migaomei.storage.x8664:webapp
# 配置ACL
targetcli /iscsi/iqn.2026-01.cloud.migaomei.storage.x8664:webapp/tpg1/acls/ create iqn.2026-01.cloud.migaomei.web1.x8664:webapp
# 创建LUN映射
targetcli /iscsi/iqn.2026-01.cloud.migaomei.storage.x8664:webapp/tpg1/luns/ create /backstores/block/webapp
# 配置Portal
targetcli /iscsi/iqn.2026-01.cloud.migaomei.storage.x8664:webapp/tpg1/portals/ delete 0.0.0.0 3260
targetcli /iscsi/iqn.2026-01.cloud.migaomei.storage.x8664:webapp/tpg1/portals/ create 10.1.8.10 3260
4.2 断开iSCSI连接
当不再需要访问iSCSI存储时,可以按以下步骤断开连接:
bash复制# 卸载文件系统
umount /mnt/iscsi
# 从/etc/fstab中删除挂载项
# 注销Target
iscsiadm -m node -T iqn.2026-01.cloud.migaomei.storage.x8664:webapp -p 10.1.8.10:3260 -u
# 删除节点记录
iscsiadm -m node -T iqn.2026-01.cloud.migaomei.storage.x8664:webapp -p 10.1.8.10:3260 -o delete
4.3 常见问题排查
4.3.1 登录失败
如果客户端登录Target失败,常见原因包括:
- 客户端IQN与服务端ACL不匹配
- 防火墙阻止了3260端口
- 服务端Portal配置错误
解决方法:
- 检查客户端/etc/iscsi/initiatorname.iscsi文件中的IQN
- 确认服务端ACL配置
- 检查防火墙设置
- 重启iscsid服务:
bash复制systemctl restart iscsid
4.3.2 多路径配置
在高可用环境中,可能需要配置多路径I/O(MPIO):
bash复制# 停止多路径服务
systemctl stop multipathd
# 清除现有多路径设备映射
multipath -F
# 重新扫描并创建多路径设备
multipath -v2
# 重启多路径服务
systemctl restart multipathd
# 验证配置
multipath -ll
5. 性能优化与安全建议
5.1 性能优化
-
网络配置:
- 使用专用存储网络(如10Gbps或更高)
- 考虑使用Jumbo Frames(MTU 9000)
-
存储配置:
- 使用高性能存储设备(SSD/NVMe)
- 考虑使用LVM或RAID提高性能和可靠性
-
iSCSI参数调优:
- 调整队列深度
- 考虑启用CHAP认证
5.2 安全建议
-
访问控制:
- 严格限制ACL,只允许必要的客户端访问
- 使用专用网络或VLAN隔离存储流量
-
认证:
- 考虑启用CHAP认证
- 定期轮换认证凭据
-
监控:
- 监控存储使用情况
- 设置告警机制
在实际生产环境中部署iSCSI存储时,建议先进行充分的测试和性能评估,确保配置满足业务需求。同时,定期备份重要数据,防止意外数据丢失。