1. Linux服务器挂载普安盘(iSCSI存储)实战指南
最近在帮客户部署一套高可用数据库集群时,遇到了本地存储空间不足的问题。经过多方对比测试,最终选择了iSCSI协议连接普安存储的方案。这种通过网络将远程存储设备映射为本地磁盘的方式,不仅成本比SAN光纤方案低得多,而且性能完全满足我们的业务需求。下面就把整个配置过程整理成实战手册,包含从协议选型到故障排查的全套经验。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. iSCSI技术选型与准备工作
2.1 为什么选择iSCSI协议
在评估了NFS、CIFS等多种网络存储协议后,我们最终锁定iSCSI主要基于三个实际考量:
-
块设备级访问:与文件系统级的NFS不同,iSCSI提供的是裸设备映射,可以像本地磁盘一样进行分区、格式化,特别适合需要直接管理磁盘的场景。实测在MySQL这类数据库应用中,iSCSI的随机读写性能比NFS高出30%以上。
-
跨平台兼容性:普安存储同时支持Windows和Linux连接,而我们的环境正好是混合架构。通过同一个存储设备,既能为Linux应用服务器提供存储,又能给Windows备份服务器使用。
-
网络要求适中:相比FC-SAN需要专用光纤网络,iSCSI跑在标准以太网上即可。我们用现有的10Gbps网络就能获得900MB/s以上的传输速率,完全满足业务需求。
重要提示:生产环境强烈建议将iSCSI流量隔离到独立VLAN或物理网络,避免与其他业务流量相互干扰。我们曾经因为存储网络拥塞导致数据库响应延迟飙升,后来单独划分网段才彻底解决。
2.2 环境准备清单
在开始配置前,请确保准备好以下要素:
| 组件 | 要求 | 备注 |
|---|---|---|
| 普安存储 | 已配置好LUN并开启iSCSI服务 | 需提前划分好容量和权限 |
| 服务器 | 安装Linux系统(推荐CentOS/RHEL 7+) | 内核需支持iscsi协议 |
| 网络 | 建议10Gbps专用网络 | 千兆网也可但性能受限 |
| 软件包 | iscsi-initiator-utils | 通过yum install直接安装 |
我们这次用的是CentOS 7.9系统,存储端是普安AS300系列,通过10G光纤交换机连接。特别要注意的是,存储设备上需要提前创建好LUN(逻辑单元号),并设置好CHAP认证信息(如果有的话)。
3. 详细配置流程
3.1 安装并配置iSCSI启动器
首先在Linux服务器上安装必要的软件包:
bash复制# 安装iscsi启动器工具
yum install -y iscsi-initiator-utils
# 查看是否安装成功
rpm -qa | grep iscsi
接下来配置启动器名称,这个名称需要与存储设备上的配置对应:
bash复制# 编辑配置文件
vi /etc/iscsi/initiatorname.iscsi
# 内容示例(名称根据实际修改):
InitiatorName=iqn.2023-08.com.example:server01
如果是生产环境,建议启用CHAP认证以提高安全性:
bash复制# 在同一个配置文件中添加:
node.session.auth.authmethod = CHAP
node.session.auth.username = your_username
node.session.auth.password = your_password
3.2 发现并登录存储设备
现在可以开始发现存储设备提供的iSCSI目标:
bash复制# 替换为普安存储的实际IP
iscsiadm -m discovery -t st -p 192.168.1.100
# 成功后会显示类似输出:
192.168.1.100:3260,1 iqn.2023-08.com.puan:storage.target
登录到发现的target:
bash复制iscsiadm -m node -T iqn.2023-08.com.puan:storage.target -p 192.168.1.100 -l
排坑经验:如果登录失败,首先检查防火墙是否放行了3260端口。我们曾经因为SELinux阻止连接折腾了半天,临时可以setenforce 0调试,但生产环境建议配置正确的SELinux策略。
3.3 磁盘识别与持久化配置
成功登录后,用以下命令查看新发现的磁盘:
bash复制lsblk
# 或者
fdisk -l
通常会看到新增的磁盘如/dev/sdb。为了让配置在重启后依然有效,需要设置自动登录:
bash复制iscsiadm -m node -T iqn.2023-08.com.puan:storage.target -p 192.168.1.100 --op update -n node.startup -v automatic
最后别忘了将配置保存:
bash复制service iscsid save
systemctl enable iscsid
4. 磁盘挂载与优化
4.1 分区格式化最佳实践
假设我们认到的磁盘是/dev/sdb,下面演示如何分区:
bash复制# 使用parted工具分区
parted /dev/sdb
(parted) mklabel gpt
(parted) mkpart primary xfs 0% 100%
(parted) quit
# 格式化XFS文件系统(适合大文件场景)
mkfs.xfs /dev/sdb1
# 对于小文件较多的场景,ext4可能更合适:
# mkfs.ext4 /dev/sdb1
创建挂载点并测试挂载:
bash复制mkdir /data
mount /dev/sdb1 /data
df -h
4.2 性能优化参数
在/etc/fstab中添加挂载项时,建议加入这些优化参数:
bash复制/dev/sdb1 /data xfs defaults,_netdev,noatime,nodiratime,discard 0 0
关键参数说明:
_netdev:声明这是网络设备,避免启动时因网络未就绪导致挂载失败noatime:禁止记录访问时间,减少磁盘写操作discard:启用SSD的TRIM功能(如果是固态存储)
对于高并发场景,还可以调整队列参数:
bash复制# 查看当前队列深度
cat /sys/block/sdb/queue/nr_requests
# 临时提高队列深度(根据硬件能力调整)
echo 128 > /sys/block/sdb/queue/nr_requests
5. 常见问题排查手册
5.1 连接类问题
症状1:发现target失败
- 检查网络连通性:
ping 192.168.1.100 - 确认防火墙规则:
iptables -L -n | grep 3260 - 存储端是否配置了ACL限制
症状2:登录后看不到磁盘
- 检查内核日志:
dmesg | grep scsi - 确认LUN映射是否正确
- 尝试重新扫描SCSI总线:
rescan-scsi-bus.sh -r
5.2 性能类问题
症状:IOPS忽高忽低
- 检查网络延迟:
ping -f 192.168.1.100 - 监控队列深度:
iostat -x 1 - 调整TCP参数可能有效:
bash复制echo 30 > /proc/sys/net/ipv4/tcp_fin_timeout echo 1 > /proc/sys/net/ipv4/tcp_tw_reuse
5.3 多路径配置(可选)
对于高可用环境,建议配置多路径IO(MPIO):
bash复制yum install -y device-mapper-multipath
mpathconf --enable --with_multipathd y
配置/etc/multipath.conf后,设备将显示为/dev/mapper/mpathX形式,自动实现链路冗余。
6. 维护与监控建议
长期运行中,这些监控命令非常实用:
bash复制# 查看会话状态
iscsiadm -m session -P 3
# 实时IO监控
iostat -xmt 2
# 网络质量检测
ethtool -S eth0 | grep drop
对于关键业务存储,建议部署监控脚本定期检查:
- 会话连接状态
- 网络丢包率
- 磁盘剩余空间
- IO延迟指标
我们实际使用中发现,定期(每周)重新登录一次target可以避免一些难以追踪的稳定性问题,可以通过cronjob实现:
bash复制0 3 * * 0 /usr/sbin/iscsiadm -m node -T iqn.2023-08.com.puan:storage.target -R
最后提醒一点:虽然iSCSI支持在线扩容,但修改LUN大小后,Linux端需要执行echo 1 > /sys/class/scsi_device/0\:0\:0\:0/device/rescan才能识别新容量,之后还要调整文件系统大小,这些操作建议在业务低峰期进行。
