1. 为什么需要iSCSI与LVM存储池在国产化服务器环境中存储管理一直是系统管理员最头疼的问题之一。记得我第一次接触银河麒麟SP3服务器时面对一堆物理磁盘和复杂的存储需求简直无从下手。直到掌握了iSCSI和LVM的组合方案才发现原来存储管理可以如此优雅。iSCSI协议就像给服务器装上了网络磁盘它把本地的SCSI协议通过TCP/IP网络传输只要IP能到达的地方存储设备就能被访问。这种设计带来了几个实实在在的好处突破物理限制再也不用担心服务器硬盘插槽不够用一个机柜的存储设备可以供整个机房共享灵活扩容当某个虚拟机需要更多空间时不用关机插硬盘直接通过网络分配集中管理所有存储资源集中在存储服务器上备份和监控都更方便而LVM逻辑卷管理则是解决存储空间动态调整的利器。传统分区一旦划定就难以修改但LVM可以把多个物理磁盘合并成一个大池子随时调整逻辑卷的大小在不影响服务的情况下添加新磁盘轻松创建快照备份在实际项目中我遇到过这样一个场景某政务云平台需要为不同部门分配存储空间各部门需求随时可能变化。通过iSCSILVM的方案我们实现了在存储服务器上创建大容量LVM存储池通过iSCSI将不同大小的逻辑卷分配给各部门后续根据需求动态调整容量完全不影响业务运行这种组合特别适合国产化环境中的这些情况需要为多个应用或租户隔离存储资源存储需求变化频繁的业务系统对存储可用性要求较高的关键业务需要实现存储资源池化的云平台2. 环境准备与软件安装在开始配置之前我们需要确保基础环境就位。根据我在多个项目中的经验准备工作做得好后续能省去80%的麻烦。硬件准备方面存储服务器建议至少16GB内存配备SSDHDD混合存储网络配置iSCSI流量建议使用独立网卡至少1Gbps带宽客户端普通服务器配置即可但要注意网络延迟软件检查清单# 检查系统版本 cat /etc/os-release # 确认内核版本 uname -r银河麒麟SP3通常已经内置了所需软件包但最好更新到最新版本sudo yum update -y防火墙配置是很多新手容易踩坑的地方iSCSI需要开放这些端口# 开放iSCSI默认端口3260 sudo firewall-cmd --permanent --add-port3260/tcp # 如果使用多路径还需要开放以下端口 sudo firewall-cmd --permanent --add-port860/tcp sudo firewall-cmd --permanent --add-port3260/tcp sudo firewall-cmd --reload服务端软件安装sudo yum install targetcli -y sudo systemctl enable target sudo systemctl start target客户端软件安装sudo yum install iscsi-initiator-utils lvm2 -y sudo systemctl enable iscsid sudo systemctl start iscsid在实际部署中我发现银河麒麟SP3对这些软件的支持非常稳定但要注意不同SP版本间可能有轻微差异生产环境建议使用固定IP而非DHCP如果遇到依赖问题可以配置本地yum源3. 创建和管理LVM存储池LVM的配置是存储管理的核心也是最能体现灵活性的部分。下面我分享一个真实项目的配置过程。第一步磁盘准备假设我们有一块新磁盘/dev/sdb# 使用gdisk分区 sudo gdisk /dev/sdb在交互界面中按n创建新分区然后输入t更改类型选择8e00(Linux LVM)。第二步创建物理卷(PV)sudo pvcreate /dev/sdb1 # 验证创建结果 sudo pvdisplay第三步创建卷组(VG)这里有个实用技巧建议根据业务用途命名VGsudo vgcreate vg_cloud /dev/sdb1 # 扩展VG容量当有新磁盘时 sudo vgextend vg_cloud /dev/sdc1第四步创建逻辑卷(LV)创建LV时需要考虑业务特点# 为数据库创建固定大小的LV sudo lvcreate -L 100G -n lv_oracle vg_cloud # 为普通存储创建动态扩容的LV sudo lvcreate -l 100%FREE -n lv_storage vg_cloudLVM日常管理命令# 查看VG剩余空间 sudo vgdisplay vg_cloud | grep Free # 扩展LV容量无需卸载 sudo lvextend -L 20G /dev/vg_cloud/lv_oracle # 缩减LV容量需先检查文件系统 sudo lvreduce -L -10G /dev/vg_cloud/lv_storage在实际项目中我总结出这些最佳实践为不同业务创建独立的VG便于隔离关键业务LV预留20%的扩展空间定期使用vgdisplay检查剩余空间重要操作前先做快照备份4. 配置iSCSI目标服务器iSCSI服务端的配置直接关系到存储服务的稳定性和性能。下面是我在政务云项目中的配置方法。进入targetcli管理界面sudo targetcli创建后端存储# 使用之前创建的LV作为后端存储 /backstores/block create cloud_disk /dev/vg_cloud/lv_storage创建iSCSI Target/iscsi create iqn.2024-08.com.example:server设置访问控制/iscsi/iqn.20...er/tpg1/acls create iqn.2024-08.com.example:client创建LUN映射/iscsi/iqn.20...er/tpg1/luns create /backstores/block/cloud_disk配置验证与保存# 查看完整配置 / ls # 保存配置 / saveconfig # 退出 / exit服务管理命令# 查看服务状态 sudo systemctl status target # 重启服务 sudo systemctl restart target在金融行业项目中我们还配置了CHAP认证增强安全性/iscsi/iqn.20...er/tpg1 set attribute authentication1 /iscsi/iqn.20...er/tpg1 set attribute generate_node_acls0 /iscsi/iqn.20...er/tpg1/acls/iqn.20...ent set auth useridusername /iscsi/iqn.20...er/tpg1/acls/iqn.20...ent set auth passwordpassword5. 客户端连接与多路径优化客户端配置的质量直接影响到最终的性能表现。下面分享我在性能调优方面的心得。基本连接步骤# 修改Initiator名称需与服务端ACL对应 sudo vi /etc/iscsi/initiatorname.iscsi # 发现远程Target sudo iscsiadm -m discovery -t st -p 192.168.1.100 # 登录Target sudo iscsiadm -m node -T iqn.2024-08.com.example:server -p 192.168.1.100 -l持久化配置# 设置开机自动连接 sudo iscsiadm -m node -T iqn.2024-08.com.example:server -p 192.168.1.100 --op update -n node.startup -v automatic多路径配置MPIO 在高可用环境中配置多路径至关重要# 安装多路径工具 sudo yum install device-mapper-multipath -y # 生成默认配置文件 sudo mpathconf --enable --with_multipathd y # 编辑配置文件 sudo vi /etc/multipath.conf典型的multipath.conf配置示例devices { device { vendor LIO-ORG product * path_grouping_policy failover path_selector round-robin 0 hardware_handler 1 alua failback immediate no_path_retry fail } }性能优化技巧网络层面使用独立网卡处理iSCSI流量考虑10Gbps或更高带宽启用Jumbo FrameMTU9000存储层面对高性能需求使用SSD后端存储调整调度算法为deadlineecho deadline /sys/block/sdX/queue/scheduler参数调优# 增加队列深度 echo 128 /sys/block/sdX/queue/nr_requests # 调整iSCSI超时参数 echo 30 /sys/class/iscsi_session/sessionX/timeout在最近的一个视频监控项目中通过优化多路径配置我们将存储吞吐量提升了40%关键指标对比如下配置项优化前优化后吞吐量(MB/s)320450IOPS50007500延迟(ms)8.25.66. 实战案例Oracle数据库存储配置在金融行业我们经常需要为Oracle数据库配置高性能存储。下面分享一个实际案例。需求背景 某银行核心系统需要100GB的快速存储用于数据文件50GB的普通存储用于归档日志高可用架构避免单点故障解决方案在存储服务器上创建专用VGsudo vgcreate vg_oracle /dev/sdd1 /dev/sde1创建两个性能不同的LV# 高速LV使用SSD sudo lvcreate -L 100G -n lv_oracle_data vg_oracle /dev/sdd1 # 普通LV使用HDD sudo lvcreate -L 50G -n lv_oracle_arch vg_oracle /dev/sde1通过iSCSI共享给数据库服务器# 在targetcli中 /backstores/block create oracle_data /dev/vg_oracle/lv_oracle_data /backstores/block create oracle_arch /dev/vg_oracle/lv_oracle_arch数据库服务器上的配置# 发现并连接iSCSI Target sudo iscsiadm -m discovery -t st -p 192.168.2.100 sudo iscsiadm -m node -l配置ASM磁盘# 使用oracleasm配置ASM磁盘 sudo oracleasm createdisk DATA /dev/sdb1 sudo oracleasm createdisk ARCH /dev/sdc1性能优化参数# 调整I/O调度器 echo deadline /sys/block/sdb/queue/scheduler # 增加队列深度 echo 256 /sys/block/sdb/queue/nr_requests # 禁用磁盘写入缓存确保数据安全 hdparm -W 0 /dev/sdb监控与维护# 实时监控iSCSI性能 sudo istats # 查看多路径状态 sudo multipath -ll # 检查LVM使用情况 sudo vgdisplay vg_oracle这个方案最终实现了数据库I/O延迟降低60%存储利用率提升35%RTO从4小时缩短到30分钟7. 常见问题排查与解决在实际运维中我遇到过各种稀奇古怪的问题。下面整理几个典型案例和解决方法。问题1客户端无法发现Target检查项# 确认服务端target服务运行 sudo systemctl status target # 检查防火墙设置 sudo firewall-cmd --list-ports # 测试网络连通性 ping 192.168.1.100 telnet 192.168.1.100 3260问题2连接速度慢优化建议# 检查MTU设置 ip link show | grep mtu # 调整TCP参数 echo 4096 /proc/sys/net/ipv4/tcp_rmem echo 4096 /proc/sys/net/ipv4/tcp_wmem问题3多路径失效恢复步骤# 重新扫描设备 sudo multipath -r # 检查多路径配置 sudo multipath -ll # 必要时重启服务 sudo systemctl restart multipathd问题4LVM扩容失败正确处理流程# 先扩展物理空间 sudo lvextend -L 10G /dev/vg01/lv01 # 再扩展文件系统ext4示例 sudo resize2fs /dev/vg01/lv01 # 对于xfs文件系统 sudo xfs_growfs /mount/point问题5性能突然下降排查方法# 查看iSCSI会话状态 sudo iscsiadm -m session -P 3 # 检查磁盘I/O状态 sudo iostat -x 1 # 查看网络流量 sudo iftop -i eth0在运维过程中我养成了这些好习惯任何配置变更前先做备份使用脚本自动化日常检查详细记录每次故障现象和解决方法定期review存储使用情况和性能指标8. 自动化运维与监控方案对于企业级环境手动管理显然不够高效。下面分享我们团队使用的自动化方案。配置自动化脚本#!/bin/bash # 自动扩展LV的脚本 VG$1 LV$2 SIZE$3 # 检查VG剩余空间 FREE$(vgs --units G --noheadings -o vg_free $VG | awk {print $1}) if (( $(echo $FREE $SIZE | bc -l) )); then echo Error: Not enough space in VG $VG exit 1 fi # 扩展LV lvextend -L ${SIZE}G /dev/$VG/$LV # 扩展文件系统 FS_TYPE$(blkid -o value -s TYPE /dev/$VG/$LV) case $FS_TYPE in ext4) resize2fs /dev/$VG/$LV ;; xfs) xfs_growfs /dev/$VG/$LV ;; *) echo Unsupported filesystem ;; esac监控指标设置基础监控项iSCSI会话状态多路径健康度LVM剩余空间磁盘I/O延迟Prometheus监控示例- job_name: iscsi static_configs: - targets: [localhost:9280] metrics_path: /probe params: module: [iscsi]日志分析策略# 关键日志文件 /var/log/messages /var/log/iscsiadm.log /var/log/multipathd.log # 使用journalctl查看systemd日志 journalctl -u target -f备份与恢复方案配置备份# 备份targetcli配置 sudo targetcli / saveconfig /etc/target/backup.json # 备份LVM元数据 sudo vgcfgbackup vg_cloud灾难恢复# 恢复targetcli配置 sudo targetcli / restoreconfig /etc/target/backup.json # 恢复LVM配置 sudo vgcfgrestore vg_cloud在实际生产环境中我们结合这些工具构建了完整的监控体系使用Grafana展示存储性能仪表盘通过AlertManager设置智能告警编写Ansible剧本实现批量配置开发Python工具自动化容量规划9. 安全加固与权限管理存储系统的安全性不容忽视。下面介绍我们在等保合规项目中的安全实践。认证加固CHAP认证配置# 服务端 /iscsi/iqn.20...er/tpg1 set attribute authentication1 /iscsi/iqn.20...er/tpg1/acls/iqn.20...ent set auth useridusername /iscsi/iqn.20...er/tpg1/acls/iqn.20...ent set auth passwordcomplexpass123 # 客户端 sudo vi /etc/iscsi/iscsid.conf修改以下参数node.session.auth.authmethod CHAP node.session.auth.username username node.session.auth.password complexpass123访问控制网络层面# 使用firewalld限制访问IP sudo firewall-cmd --permanent --add-rich-rulerule familyipv4 source address192.168.1.0/24 port protocoltcp port3260 accept服务端ACL# 只允许特定Initiator连接 /iscsi/iqn.20...er/tpg1/acls create iqn.2024-08.com.example:client加密传输 虽然iSCSI支持IPsec加密但在实际项目中我们发现加密会带来10-15%的性能下降内网环境通常使用VLAN隔离即可敏感数据建议在应用层加密审计日志# 启用详细日志 sudo vi /etc/rsyslog.conf 添加 local4.* /var/log/iscsi_audit.log # 配置target审计 sudo vi /etc/target/target.conf 设置 log_level info权限分离# 创建专门的存储管理账号 sudo useradd -m storageadmin sudo passwd storageadmin # 配置sudo权限 sudo visudo 添加 storageadmin ALL(root) NOPASSWD: /usr/bin/targetcli, /usr/sbin/iscsiadm在金融行业项目中我们还实施了这些安全措施定期轮换CHAP密码配置存储网络隔离实现基于角色的访问控制每季度进行安全审计