在虚拟化环境和AI开发中,显卡资源就像电力供应一样关键。想象一下,你正在用Citrix处理3D设计,或者用Horizon跑深度学习训练,突然因为许可服务器宕机导致所有vGPU资源被回收——这就像手术做到一半突然断电,不仅影响工作效率,还可能造成数据丢失。
我遇到过最惨痛的案例是某动画渲染农场,因为单点许可服务器故障,导致200多台渲染节点停工6小时,直接经济损失超过50万。这就是为什么我们需要双活高可用架构:当主服务器挂掉时,备服务器能在秒级自动接管,用户甚至感受不到切换过程。
NVIDIA的FlexNet许可服务本身支持主备模式,但配置不当反而会成为新的单点故障。下面这些真实场景你肯定遇到过:
别急着跑安装脚本,先检查这些基础配置。我建议采用物理机+虚拟机混合部署方案:
bash复制# 最低配置要求
vCPU: 4核
内存: 8GB
磁盘: 100GB (建议单独挂载/data分区)
网络: 万兆双网卡绑定
时钟同步是许可服务的命脉,用这个命令检查NTP状态:
bash复制timedatectl status | grep -i synchronized
# 输出应为"System clock synchronized: yes"
90%的安装失败都栽在SELinux上。永久关闭不是最佳实践,应该采用针对性策略:
bash复制# 查看当前SELinux状态
getenforce
# 临时设置为宽松模式
setenforce 0
# 创建自定义策略模块
ausearch -c 'flexnetls' --raw | audit2allow -M my-flexnet
semodule -i my-flexnet.pp
防火墙需要放行这些关键端口:
bash复制firewall-cmd --permanent --add-port=7070/tcp # 主通信端口
firewall-cmd --permanent --add-port=8080/tcp # 管理界面
firewall-cmd --permanent --add-port=27000-27009/udp # 许可心跳
firewall-cmd --reload
官方提供的压缩包其实内藏玄机。解压前先用这个命令检查完整性:
bash复制tar -tf nvidia_cp.gz | grep -E 'install.sh|bin/'
安装时推荐使用静默模式+日志重定向:
bash复制chmod +x install.sh
./install.sh -i silent -f response.properties > /var/log/nvidia_install.log 2>&1
安装后必做的三项验证:
bash复制systemctl status flexnetls-nvidia
bash复制ss -lntp | grep -E '7070|8080'
bash复制curl -I http://localhost:8080 | grep "200 OK"
从NVIDIA官方获取license.dat后,千万别直接使用。先用这个命令检查MAC地址绑定:
bash复制grep "SERVER this_host" license.dat | awk '{print $2}'
实际部署中我推荐使用浮动MAC地址方案:
bash复制nmcli con mod ens192 ethernet.cloned-mac-address 00:50:56:XX:XX:XX
主备配置不是简单填IP就行,这些参数决定故障切换速度:
properties复制# 主服务器配置(NVLIC-1)
BackupURI = http://NVLIC-2:7070/fne/bin/capability
HeartbeatInterval = 30 # 秒级检测
FailoverTimeout = 120 # 2分钟内完成切换
关键检查点:
bash复制telnet NVLIC-2 7070
bash复制openssl s_client -connect NVLIC-1:7070 | grep "Verify return code"
单纯的端口检测不够可靠,我自研了这个深度检查脚本:
bash复制#!/bin/bash
API_URL="http://localhost:8080/api/v1/status"
RESPONSE=$(curl -s $API_URL | jq -r '.cluster_state')
if [ "$RESPONSE" == "ACTIVE" ]; then
exit 0
else
systemctl try-restart flexnetls-nvidia
exit 1
fi
配置为cron任务每分钟执行:
bash复制* * * * * /usr/local/bin/check_vgpu_license.sh >> /var/log/ha_check.log
不要直接关机,用这些更贴近真实故障的方式:
bash复制iptables -A INPUT -p tcp --dport 7070 -j DROP
bash复制stress-ng --cpu 4 --timeout 300s
观察备节点接管时的关键指标:
bash复制grep "Taking over" /var/opt/flexnetls/nvidia/logs/flexnetls.log
故障恢复后,需要手动触发回切以避免脑裂:
bash复制curl -X POST http://NVLIC-1:8080/api/v1/cluster/failback
验证数据同步状态:
bash复制diff /var/opt/flexnetls/nvidia/data/ NVLIC-2:/var/opt/flexnetls/nvidia/data/
默认配置会快速吃满磁盘,修改logrotate配置:
bash复制cat > /etc/logrotate.d/flexnetls <<EOF
/var/opt/flexnetls/nvidia/logs/*.log {
daily
rotate 30
compress
delaycompress
missingok
notifempty
create 644 root root
}
EOF
用Prometheus+Grafana搭建监控看板,关键metrics:
示例exporter配置:
yaml复制scrape_configs:
- job_name: 'vgpu_license'
static_configs:
- targets: ['NVLIC-1:8080', 'NVLIC-2:8080']
metrics_path: '/api/v1/metrics'
时间不同步陷阱:主备服务器时差超过5分钟会导致许可失效,现在我都用chrony配置微秒级同步
bash复制chronyc sources | grep "^\^\*"
DNS解析坑:绝对不要用主机名配置BackupURI,我在某次DNS故障后全部改用IP+hosts绑定
bash复制echo "192.168.99.54 NVLIC-2" >> /etc/hosts
内存泄漏:长期运行后服务可能占用10GB+内存,加入定时重启策略
bash复制0 3 * * * systemctl restart flexnetls-nvidia
证书过期:每年记得更新SSL证书,否则所有客户端会突然断开
bash复制openssl x509 -in /var/opt/flexnetls/nvidia/cert.pem -noout -dates