先说结论:RLM的ISV配置和FlexNet的Vendor Daemon配置,干的是同一件事——让厂商自己的守护进程来管理具体的许可证签出/签入。但两者的设计思路完全不同。
这种差异不是术语替换那么简单,它直接影响你在部署、排错和日常运维时的操作方式。
先看一个最简单的对比。
FlexNet的写法:
text
SERVER license-server 001122334455 27000
VENDOR synopsys /opt/synopsys/snpslmdRLM的写法:
text
HOST license-server 001122334455 5053
ISV synopsys关键词不一样,但对应的层级关系是一样的:第一行定义服务器身份,第二行定义厂商守护进程。
但如果你以为只是把SERVER换成HOST、把VENDOR换成ISV就行了,那就想简单了。
FlexNet的vendor daemon(比如snpslmd、adskflex)是被lmgrd拉起来的子进程。lmgrd先启动,然后去读license文件里的VENDOR行,找到对应的二进制文件,把它启动起来。lmgrd和vendor daemon之间维持心跳,vendor daemon挂了,lmgrd会尝试重新拉起。
RLM的设计不一样。
RLM的ISV服务器更像是一个独立运行的服务。虽然也是由RLM主服务(rlm)来管理的,但在配置和操作层面,你可以把每个ISV当成一个独立实体来看待。从RLM v6.0开始,ISV服务器甚至不需要是一个可执行文件——你可以只放一个.set配置文件,平台无关,跨Linux、Windows、macOS直接复制就能用。
这意味着什么?FlexNet的vendor daemon必须和操作系统绑定,32位、64位、Windows、Linux各有各的二进制。而RLM的ISV用.set文件的话,一套配置走天下。
一个实际场景: 某软件厂商给你发了新的license文件,同时更新了vendor daemon版本。在FlexNet下,你要替换snpslmd二进制文件,注意32位/64位,还要给执行权限,重启lmgrd。在RLM下,如果用的是.set文件,替换配置文件就行了,不需要关心平台兼容性。

这是实操中差异最大的地方。
FlexNet的端口配置:
SERVER行指定lmgrd的端口,比如27000。VENDOR行默认不指定端口——vendor daemon每次启动时在操作系统分配的临时端口范围内随机选一个。这就是防火墙配置的噩梦。解决方案是在VENDOR行手动指定PORT=,把端口固定下来。
text
VENDOR synopsys /opt/synopsys/snpslmd PORT=27001但问题来了:如果你在同一台服务器上要跑多个vendor daemon(比如Synopsys和Cadence),你得给每个分配不同的端口,而且不能冲突。
RLM的端口配置:
HOST行指定RLM主服务端口,默认5053。ISV行可以单独指定端口:
text
ISV synopsys port=5055
ISV cadence port=5056每个ISV的端口独立配置,互不干扰。而且RLM的默认端口5053不像FlexNet的27000那么容易被其他服务抢占。
哪个更好? 从配置清晰度来说,RLM更直观:每个ISV一行,端口一目了然。FlexNet的vendor daemon端口如果不手动指定,默认动态,排查问题时经常需要去翻debug.log才能知道当前用的是哪个端口。
两者都支持通过选项文件做精细化控制:排除用户、预留许可、设置超时。
FlexNet的写法:
在VENDOR行末尾加上选项文件路径:
text
VENDOR synopsys /opt/synopsys/snpslmd /opt/flexnet/synopsys.opt或者用OPTIONS=语法:
text
VENDOR synopsys /opt/synopsys/snpslmd OPTIONS=/opt/flexnet/synopsys.optRLM的写法:
在ISV行用options=指定:
text
ISV synopsys options=/opt/rlm/synopsys.opt port=5055逻辑是一样的,只是参数名不同。但有一个细微差别: FlexNet如果不指定选项文件路径,vendor daemon会自动在license文件所在目录找vendor.opt(比如snpslmd.opt)。RLM不会自动找,必须显式指定。

FlexNet的高可用方案是三服务器冗余(Triad),需要三台服务器,license文件里有三行SERVER,每行对应一台。至少两台存活才能提供服务。
RLM支持更灵活的高可用配置。可以在HOST行配置多个主机地址,实现主备切换。具体细节涉及RLM的HOST行冗余语法,这里不展开,但核心区别是:FlexNet的Triad要求三台,RLM的主备可以两台起步。
运维层面的操作,两者的命令对应关系很直接:
| 操作 | FlexNet | RLM |
|---|---|---|
| 查看状态 | lmutil lmstat | rlmutil rlmstat |
| 停止服务 | lmutil lmdown | rlmutil rlmdown |
| 重读配置 | lmutil lmreread | rlmutil rlmreread |
| 检查license文件 | lmutil lmcksum | rlmutil rlmcksum |
命令名换了个前缀,用法逻辑是一样的。如果你熟悉FlexNet的命令行,切换到RLM几乎没有学习成本。
回到开头那句话:两者干的是同一件事,但设计思路不同。
FlexNet用VENDOR定义供应商守护进程,把它作为lmgrd的子进程来管理。RLM用ISV定义独立服务实体,从v6.0开始甚至可以不用二进制文件。
实操中最需要记住的三点:
如果你已经习惯FlexNet的配置方式,切换到RLM时不要被“换个名字”迷惑——理解“ISV是独立实体”这个核心差异,其他都是细节。