告别U盘传文件!手把手教你用iSCSI在CentOS 7上搭建共享磁盘(保姆级图文教程)
最近在开发一个需要多台虚拟机协作的项目时,频繁遇到大文件传输的困扰。每次用U盘或scp命令传输几个GB的Docker镜像都让人抓狂——速度慢不说,还经常因为网络波动中断。直到发现了iSCSI这个神器,才彻底解决了我的痛点。今天就把这套零成本、高性能的跨主机磁盘共享方案完整分享给大家,从环境准备到安全卸载,每个步骤都配有详细截图和避坑指南。
1. 环境准备与基础概念
1.1 为什么选择iSCSI?
在虚拟化环境中,我们常遇到这些场景:
- 两台服务器需要共享同一套代码库
- 开发机需要直接访问测试机的数据库文件
- 团队协作时保持设计素材的实时同步
传统解决方案各有局限:
- NFS/Samba:适合小文件,大文件性能差
- rsync:需要手动触发同步
- 云存储:产生额外费用且受网络影响
iSCSI的独特优势在于:
- 块级存储:客户端识别为本地磁盘,支持分区格式化
- TCP/IP传输:利用现有网络基础设施
- 低延迟:千兆网络下实测传输速度可达110MB/s
- 跨平台:Windows/Linux/macOS全支持
1.2 实验环境规划
建议使用两台CentOS 7虚拟机进行测试:
- 服务端:192.168.1.100(分配20GB虚拟磁盘)
- 客户端:192.168.1.101
生产环境建议使用独立网卡和交换机组建iSCSI专用网络
所需软件包:
# 服务端 yum install -y targetcli lvm2 # 客户端 yum install -y iscsi-initiator-utils2. 服务端配置详解
2.1 存储空间准备
首先为共享磁盘创建LVM卷(比直接使用裸磁盘更灵活):
pvcreate /dev/sdb vgcreate vg_shared /dev/sdb lvcreate -L 10G -n lv_data vg_shared验证创建结果:
lvs输出示例:
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert lv_data vg_shared -wi-a----- 10.00g2.2 targetcli交互式配置
启动配置工具:
targetcli按步骤执行:
- 创建存储后端
/backstores/block create shared_disk /dev/vg_shared/lv_data - 创建iSCSI Target
/iscsi create iqn.2024-08.local.iscsi:server - 设置ACL(客户端认证)
/iscsi/iqn.2024-08.local.iscsi:server/tpg1/acls create iqn.2024-08.local.iscsi:client - 配置监听端口
/iscsi/iqn.2024-08.local.iscsi:server/tpg1/portals create 192.168.1.100
最终配置结构应如下所示:
o- / ..................................................................... [...] o- backstores .......................................................... [...] | o- block ............................................. [Storage Objects: 1] | | o- shared_disk ................... [/dev/vg_shared/lv_data (10.0GiB) write-thru activated] o- iscsi ............................................................... [Targets: 1] o- iqn.2024-08.local.iscsi:server ................................... [TPGs: 1] o- tpg1 .................................................. [no-gen-acls, no-auth] o- acls ......................................................... [ACLs: 1] | o- iqn.2024-08.local.iscsi:client ................................ [Mapped LUNs: 1] o- luns ......................................................... [LUNs: 1] | o- lun0 ...................... [block/shared_disk (/dev/vg_shared/lv_data)] o- portals ....................................................... [Portals: 1] o- 192.168.1.100:3260 ............................................... [OK]2.3 防火墙与SELinux设置
放行iSCSI端口:
firewall-cmd --permanent --add-port=3260/tcp firewall-cmd --reload调整SELinux策略:
setsebool -P daemons_use_tcp_port=1 semanage port -a -t iscsi_port_t -p tcp 32603. 客户端连接实战
3.1 发起端配置
修改initiator名称(与服务端ACL匹配):
echo "InitiatorName=iqn.2024-08.local.iscsi:client" > /etc/iscsi/initiatorname.iscsi发现服务端存储:
iscsiadm -m discovery -t st -p 192.168.1.100正常应返回:
192.168.1.100:3260,1 iqn.2024-08.local.iscsi:server3.2 连接与挂载
建立连接:
iscsiadm -m node -T iqn.2024-08.local.iscsi:server -p 192.168.1.100 -l查看新增磁盘(通常为/dev/sdX):
lsblk示例输出:
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 50G 0 disk ├─sda1 8:1 0 1G 0 part /boot └─sda2 8:2 0 49G 0 part ├─centos-root 253:0 0 45G 0 lvm / └─centos-swap 253:1 0 4G 0 lvm [SWAP] sdb 8:16 0 10G 0 disk # 这就是iSCSI磁盘格式化并挂载:
mkfs.xfs /dev/sdb mkdir /mnt/shared mount /dev/sdb /mnt/shared3.3 开机自动连接
配置自动登录:
iscsiadm -m node -T iqn.2024-08.local.iscsi:server -p 192.168.1.100 --op update -n node.startup -v automatic添加到fstab实现自动挂载:
echo "/dev/sdb /mnt/shared xfs _netdev 0 0" >> /etc/fstab4. 高级配置与故障排查
4.1 多路径I/O配置(可选)
当使用双网卡提高可靠性时:
yum install -y device-mapper-multipath mpathconf --enable --with_multipathd y配置示例(/etc/multipath.conf):
devices { device { vendor "LIO-ORG" product "*" path_grouping_policy multibus path_checker tur features "0" hardware_handler "0" failback immediate } }4.2 常见问题解决
问题1:连接时报错"Could not login to [target]"
- 检查服务端ACL名称是否匹配
- 确认防火墙规则已放行
- 查看/var/log/messages中的错误详情
问题2:写入速度慢
- 使用jumbo frames(需交换机支持):
ifconfig eth0 mtu 9000 - 调整队列深度:
echo 64 > /sys/block/sdb/queue/nr_requests
问题3:安全卸载流程
umount /mnt/shared iscsiadm -m node -T iqn.2024-08.local.iscsi:server -p 192.168.1.100 -u iscsiadm -m node -T iqn.2024-08.local.iscsi:server -p 192.168.1.100 -o delete4.3 性能监控命令
查看实时IO状态:
iostat -x /dev/sdb 2检查连接状态:
iscsiadm -m session -P 3网络质量测试(服务端执行):
iperf3 -s # 客户端执行 iperf3 -c 192.168.1.100这套方案在我团队内部已经稳定运行半年,最直观的感受是:
- Docker镜像构建时间从原来的15分钟缩短到3分钟
- 团队成员再也不用互相催着同步代码
- 数据库备份文件可以直接编辑验证