银河麒麟服务器V10 SP1 iSCSI实战:从配置陷阱到稳定运行的深度解析
第一次在银河麒麟V10 SP1上配置iSCSI存储时,我本以为这不过是又一个标准的Linux存储配置流程。直到连续三个深夜被紧急电话叫醒处理存储断开问题,才意识到国产化平台上的iSCSI有着独特的"脾气"。本文将分享那些官方文档不会告诉你的实战细节,特别是如何避开IQN命名陷阱、防火墙与SELinux的隐形阻碍,以及确保开机自动挂载的systemd服务改造技巧。
1. 环境准备:那些容易被忽视的预配置要点
银河麒麟V10 SP1作为国产化服务器操作系统,其内核模块加载机制与常规Linux发行版存在微妙差异。在开始iSCSI配置前,有三个关键检查点往往被大多数教程忽略:
内核模块预加载验证:
lsmod | grep -E 'iscsi|scsi|target'若输出为空,需要手动加载基础模块:
modprobe iscsi_target_mod modprobe target_core_mod modprobe configfs国产化平台特有的SELinux策略: 银河麒麟默认启用了增强型安全策略,这会导致targetcli的配置保存失败。临时解决方案:
setsebool -P target_use_nfs 1 semanage port -a -t target_port_t -p tcp 3260网络时间服务(NTP)的隐藏影响: iSCSI对时间同步极为敏感,麒麟V10默认的时间同步配置可能需要调整:
timedatectl set-ntp true systemctl restart chronyd提示:在国产化环境中,/etc/chrony.conf中的默认服务器地址可能需要替换为本地时间服务器
2. targetcli配置实战:避开IQN命名的那些坑
2.1 IQN命名的合规性陷阱
银河麒麟对iSCSI Qualified Name (IQN)的校验比RFC标准更为严格。以下是典型错误与正确示例:
错误示范:
iqn.2021-08.com.example:storage会导致麒麟系统报错"Invalid IQN format"
正确写法:
iqn.2021-08.cn.kylin:storage关键规则:
- 国家代码必须使用二级域名(.cn)
- 冒号后的命名段禁止包含特殊字符
- 总长度不超过128字节
2.2 存储后端配置的稳定性技巧
在/backstores/block创建存储对象时,直接使用裸设备路径可能引发权限问题。更可靠的做法:
# 先为设备创建稳定符号链接 ln -s /dev/sdc /dev/disk/by-id/iscsi_lun0 # 在targetcli中使用链接路径 /backstores/block> create dev=/dev/disk/by-id/iscsi_lun0 name=secure_storage2.3 ACL控制的精细化配置
麒麟V10的TPG(Target Portal Group)配置需要特别注意LUN映射顺序:
- 先创建initiator ACL
- 再设置LUN映射
- 最后配置CHAP认证
典型错误操作序列:
/iscsi/iqn.../tpg1/luns> create /backstores/block/secure_storage /iscsi/iqn.../tpg1/acls> create iqn.2021-08.cn.client:initiator会导致LUN对initiator不可见
正确顺序:
/iscsi/iqn.../tpg1/acls> create iqn.2021-08.cn.client:initiator cd iqn.../tpg1/acls/iqn.../initiator create attribute=generate_node_acls value=1 cd /iscsi/iqn.../tpg1/luns create /backstores/block/secure_storage3. 客户端连接:防火墙与多路径的隐藏陷阱
3.1 防火墙规则的精准控制
银河麒麟的firewalld默认配置会静默拦截iSCSI流量,仅开放3260端口远远不够。必须添加的规则组合:
firewall-cmd --permanent --add-port=3260/tcp firewall-cmd --permanent --add-port=860/tcp # iSNS firewall-cmd --permanent --add-port=3260/udp firewall-cmd --permanent --add-service=iscsi-target firewall-cmd --reload3.2 多路径配置的麒麟特调
麒麟V10的device-mapper-multipath存在已知的兼容性问题,需要特殊配置:
/etc/multipath.conf关键修改:
defaults { user_friendly_names yes path_grouping_policy multibus failback immediate no_path_retry 5 } devices { device { vendor "LIO-ORG" product "*" path_checker tur features "0" hardware_handler "0" prio const } }必须执行的后续操作:
systemctl restart multipathd multipath -r # 不重启服务的情况下重载配置3.3 连接稳定性增强参数
在/etc/iscsi/iscsid.conf中添加以下参数可显著改善国产硬件环境下的连接稳定性:
node.conn[0].timeo.noop_out_interval = 15 node.conn[0].timeo.noop_out_timeout = 15 node.session.initial_login_retry_max = 12 node.session.cmds_max = 1024 node.session.queue_depth = 644. 开机自动挂载:超越常规方案的可靠性设计
4.1 systemd单元文件的深度改造
银河麒麟默认的iscsi.service存在设计缺陷,需要创建覆盖文件:
/etc/systemd/system/iscsi.service.d/override.conf:
[Unit] After=network-online.target iscsid.service Requires=network-online.target [Service] TimeoutStartSec=300 ExecStartPre=/bin/sleep 10 ExecStart=/sbin/iscsiadm -m node --loginall=automatic ExecStop=/sbin/iscsiadm -m node --logoutall=automatic Restart=on-failure RestartSec=10s [Install] WantedBy=multi-user.target关键改进点:
- 增加网络就绪等待
- 添加启动前延迟避免竞争条件
- 设置合理的超时时间
- 启用故障自动重启
4.2 挂载参数的黄金组合
/etc/fstab中的标准配置在麒麟V10上可能引发启动死锁,推荐使用:
/dev/mapper/mpatha /iscsi_data xfs defaults,_netdev,x-systemd.requires=iscsi.service,x-systemd.device-timeout=300 0 0参数解析:
x-systemd.requires:确保挂载前iscsi服务就绪x-systemd.device-timeout:延长设备等待时间_netdev:经典的网络设备挂载标记
4.3 故障自愈机制实现
创建监控脚本/etc/iscsi/check_iscsi.sh:
#!/bin/bash TARGET_IQN="iqn.2021-08.cn.kylin:storage" SESSION=$(iscsiadm -m session | grep -o "${TARGET_IQN}") if [ -z "$SESSION" ]; then logger "iSCSI connection lost, attempting reconnect..." iscsiadm -m node -T ${TARGET_IQN} -p 192.168.1.100:3260 -l mount -a fi设置cron定时任务:
(crontab -l 2>/dev/null; echo "*/5 * * * * /etc/iscsi/check_iscsi.sh") | crontab -5. 性能调优:释放国产硬件的存储潜力
5.1 队列深度与IO线程优化
在/etc/iscsi/iscsid.conf中调整:
node.session.nr_sessions = 2 node.session.cmds_max = 256 node.session.queue_depth = 128 node.session.xmit_thread_priority = -20验证设置生效:
iscsiadm -m node -T ${TARGET_IQN} -p ${TARGET_IP} -o update -n node.session.queue_depth -v 1285.2 多路径负载均衡策略
麒麟V10推荐使用"service-time with RR"混合策略:
multipath -ll echo 'action "change path_grouping_policy multibus"' | tee /etc/multipath/conf.d/load_balance.conf systemctl restart multipathd5.3 内核参数终极调优
/etc/sysctl.conf添加:
# iSCSI TCP性能 net.ipv4.tcp_window_scaling = 1 net.ipv4.tcp_timestamps = 1 net.ipv4.tcp_sack = 1 net.ipv4.tcp_rmem = 4096 87380 16777216 net.ipv4.tcp_wmem = 4096 65536 16777216 # SCSI层优化 vm.swappiness = 10 blockdev --setra 4096 /dev/mapper/mpatha应用设置:
sysctl -p blockdev --report /dev/mapper/mpatha在经历多次生产环境故障后,我发现银河麒麟V10 SP1的iSCSI稳定性与三个因素强相关:内核模块加载顺序、网络时间同步精度、以及正确的systemd服务依赖链。某次升级后突然出现的存储断开问题,最终追踪到是chrony时间偏移超过50ms导致的iSCSI协议层拒绝服务——这个案例让我在之后的每台服务器上都严格部署了本地时间服务器。