Linux实战:iSCSI网络存储的配置与自动化挂载
1. iSCSI网络存储入门指南
第一次接触iSCSI时,我也被这个专业名词吓到了。后来发现它其实就是把本地硬盘"搬到"网络上用的技术,特别适合需要多台服务器共享存储的场景。想象一下,你有一台专门存放数据的服务器,其他服务器都能像使用本地硬盘一样使用这台服务器的存储空间,这就是iSCSI的魔力。
iSCSI由三个核心组件组成:
- iSCSI Initiator:客户端程序,安装在需要访问存储的服务器上
- iSCSI Target:服务端程序,运行在提供存储的服务器上
- 以太网交换机:连接两者的网络设备
我最近给一个客户部署MySQL集群时就用到了iSCSI。他们把数据库文件都放在iSCSI存储上,这样即使某台MySQL服务器挂了,其他节点也能立即接管,数据完全一致。相比NFS这类文件级共享,iSCSI是块级存储,性能更好,特别适合数据库这类对IO要求高的应用。
2. 环境准备与规划
2.1 硬件配置建议
根据我的经验,iSCSI对硬件要求不高,但有些细节需要注意:
- 网络:千兆以太网是底线,最好用万兆。曾经有个项目用百兆网络跑iSCSI,性能惨不忍睹
- 服务端:至少4核CPU,内存建议8G起步,特别是要做RAID的情况下
- 客户端:2核4G足够,主要看应用需求
这是我常用的测试环境配置:
服务端:192.168.100.20 4核8G + 500G SSD 客户端:192.168.100.19 2核4G2.2 软件安装
在CentOS/RHEL上安装非常简单:
# 服务端 yum install targetcli targetd -y # 客户端 yum install iscsi-initiator-utils -yUbuntu用户可以用apt:
apt install tgt open-iscsi3. 服务端详细配置
3.1 创建存储资源
第一次用targetcli可能会觉得复杂,其实就几个关键步骤:
targetcli /> /backstores/block create disk1 /dev/sdb /> /iscsi create iqn.2023-08.example.com:server这里有个坑要注意:iqn命名格式必须是iqn.YYYY-MM.域名反写:自定义标识,我之前随便写了个名字导致客户端死活连不上。
3.2 设置CHAP认证
生产环境一定要开认证,我有次没开认证,结果被内网扫描工具扫到,差点被勒索病毒加密。设置方法:
/iscsi/iqn.../tpg1/acls create iqn.2023-08.example.com:client cd /iscsi/iqn.../client/ set auth userid=myuser set auth password=ComplexP@ssw0rd!密码建议12位以上,包含大小写字母、数字和特殊字符。
4. 客户端配置实战
4.1 连接iSCSI存储
先修改客户端标识:
echo "InitiatorName=iqn.2023-08.example.com:client" > /etc/iscsi/initiatorname.iscsi然后发现和登录存储:
iscsiadm -m discovery -t sendtargets -p 192.168.100.20 iscsiadm -m node -T iqn.2023-08.example.com:server -p 192.168.100.20 -l4.2 自动挂载配置
这里最容易出问题的是fstab配置。必须加_netdev参数,否则系统启动时会卡住:
mkfs.xfs /dev/sdb mkdir /mnt/iscsi echo "/dev/sdb /mnt/iscsi xfs defaults,_netdev 0 0" >> /etc/fstab我曾经有台生产服务器因为这个参数没加,导致无法启动,最后只能进救援模式修复。
5. 高级优化技巧
5.1 多路径配置
当你有多个网络接口时,可以配置多路径IO提高可靠性:
yum install device-mapper-multipath -y mpathconf --enable systemctl start multipathd5.2 性能调优
在/etc/iscsi/iscsid.conf中添加这些参数能显著提升性能:
node.session.timeo.replacement_timeout = 120 node.conn[0].timeo.noop_out_interval = 30 node.conn[0].timeo.noop_out_timeout = 30实测这些调整能让IOPS提升20%以上,特别是对SSD存储。
6. 常见问题排查
6.1 连接失败排查
先检查基本连通性:
telnet 192.168.100.20 3260如果端口不通,检查服务端防火墙:
firewall-cmd --add-service=iscsi-target --permanent firewall-cmd --reload6.2 性能问题定位
用iotop看磁盘IO:
iotop -o用nmon监控网络带宽:
nmon我遇到过因为MTU不匹配导致的性能问题,把服务端和客户端的MTU都设为9000后问题解决。
7. 生产环境建议
在实际项目中,我总结了几条经验:
- 一定要做监控,可以用Prometheus+Granfa监控iSCSI连接状态
- 定期测试故障转移,拔掉网线看看客户端能否自动切换到备用路径
- 备份很重要!iSCSI虽然方便,但误删数据是无法恢复的
- 考虑使用LVM,这样可以在线扩容存储空间
有次客户存储空间不足,因为用了LVM,我直接在线加了块硬盘就解决了,业务完全没中断。
