TDengine TSDB 企业版激活指南:从获取激活码到集群授权的完整流程
【免费下载链接】TDengineHigh-performance, scalable time-series database designed for Industrial IoT (IIoT) scenarios项目地址: https://gitcode.com/GitHub_Trending/tde/TDengine
本篇指南讲解如何通过激活码(activeCode)对 TDengine TSDB 企业版部署完成授权,覆盖「获取机器信息 → 申请激活码 → 激活集群 → 验证授权」的完整闭环,并结合源码说明激活码与机器绑定、ALTER CLUSTER 'activeCode'命令在 MNode 中的处理链路。读完后,你可以独立完成企业版激活操作,并理解授权数据的存储结构与机器码(machine ID)的底层生成机制。
前提条件
执行激活操作前,请确认满足以下条件:
- 已向 TDengine 或授权代理商购买 TDengine TSDB 企业版;
- 已在拟授权的实际机器上安装并部署 TDengine TSDB 企业版(激活码与机器绑定,机器信息发生变化后需重新申请)。
第一步:获取机器信息(SHOW CLUSTER MACHINES)
激活码是按机器签发的,因此第一步是采集集群各节点的机器身份信息:
以
root用户打开 TDengine CLI:taos执行以下 SQL,获取部署所需信息:
SHOW CLUSTER MACHINES;示例输出如下:
id | dnode_num | machine | version | ======================================================================= 3609687158593567855 | 1 | Bdw+qvOCyvAOc3SS5GIyEOIi | 3.3.6.13 |将上述语句的完整输出复制后,连同以下信息一并提供给客户经理或授权代理商:
- 公司名称;
- 主要技术联系人的姓名与邮箱;
- 使用环境(生产、PoC 或测试);
- 期望的授权期限。
客户经理或代理商将向你提供用于激活的激活码。
机器码从哪里来:tGetMachineId 与机器绑定机制
SHOW CLUSTER MACHINES输出中的machine字段即节点的机器码(machine ID),它由tGetMachineId接口生成。从源码结构看,该接口在多个关键路径中被调用:
- 节点管理侧:节点管理模块 在节点加入集群时通过
tGetMachineId(&machineId)获取本机机器码; - 元数据同步侧:dmFile.c 中先调用
tGetMachineId取机器码,再调用generateEncryptCode(key, machineId, &encryptCode)生成与机器码绑定的加密码并落盘,用于跨节点核对授权状态; - MNode 侧:mndDnode.c 同样依赖
tGetMachineId校验节点身份。
配合 tgrant.h 中声明的checkAndGetCryptKey(encryptCode, machineId, key)与generateEncryptCode(key, machineId, encryptCode)两个函数可以推断:激活码在签发时被加密并与目标机器码绑定,激活时服务端会用本机机器码反向校验,因此换机部署必须重新申请激活码。这也是激活前必须先采集SHOW CLUSTER MACHINES输出的根本原因。
第二步:将激活码应用到集群
收到激活码后,可以选择 TDengine CLI 或 TDengine TSDB Explorer 两种方式完成激活。
方式一:TDengine CLI
以
root用户打开 TDengine CLI:taos将激活码应用到集群:
ALTER CLUSTER 'activeCode' '<your-activation-code>';
此时 TDengine TSDB 企业版部署已完成授权。可执行以下 SQL 查看授权详情(含到期时间):
SHOW GRANTS\G;方式二:TDengine TSDB Explorer
- 以
root用户登录 TDengine TSDB Explorer,默认地址为http://127.0.0.1:6060; - 在左侧主菜单选择系统管理,打开许可证标签页,点击激活许可证;
- 输入激活码,点击确定。
重要:请确保激活码外侧没有单引号。在 Explorer 中若多输了引号,等价于把
'code'整体当作激活码值传入,会导致校验失败。
验证授权结果
激活成功后,无论使用哪种方式,都应验证授权状态:
- CLI 中执行
SHOW GRANTS\G;,查看版本、到期时间与各配额项; - Explorer 的许可证标签页同样展示授权详情(含到期时间)。
源码解析:ALTER CLUSTER 'activeCode' 的完整处理链路
ALTER CLUSTER语句在 MNode 中由 mndProcessConfigClusterReq 处理,其核心流程为:
反序列化
SMCfgClusterReq请求,记录option:%s, value:%s日志;调用
mndCheckOperPrivilege校验当前用户是否具备MND_OPER_CONFIG_CLUSTER操作权限——这就是必须使用root用户执行激活的原因;通过
mndAcquireCluster获取并拷贝当前SClusterObj集群对象;依据配置项名称分发处理:
if (strncmp(cfgReq.config, GRANT_ACTIVE_CODE, TSDB_DNODE_CONFIG_LEN) == 0) { #ifdef TD_ENTERPRISE if (0 != (code = mndProcessConfigGrantReq(pMnode, pReq, &cfgReq))) { goto _exit; } #else code = TSDB_CODE_OPS_NOT_SUPPORT; goto _exit; #endif }其中
GRANT_ACTIVE_CODE即字符串常量"activeCode"(定义见 tgrant.h)。可以看到:该分支仅在定义了TD_ENTERPRISE编译宏的企业版构建中才会执行真正的授权处理(mndProcessConfigGrantReq),开源构建下会直接返回TSDB_CODE_OPS_NOT_SUPPORT。同一入口还处理SoD(职责分离,separation_of_duties)与MAC(强制访问控制,mandatory_access_control)等企业版集群级配置;处理完成后,若审计级别达到
AUDIT_LEVEL_CLUSTER,会通过auditRecord将本次alterCluster操作记入审计日志——激活操作在企业版审计体系中是可追溯的。
授权状态如何展示:GRANTS 系统表
SHOW GRANTS的取数逻辑注册在 mndGrant.c 的mndInitGrant中,通过mndAddShowRetrieveHandle(pMnode, TSDB_MGMT_TABLE_GRANTS, mndRetrieveGrant)绑定。在未授权(开源默认)时,mndRetrieveGrant 会输出一行默认值:产品名、unlimited(期限)、limited、false、ungranted(状态)等,这解释了为什么社区环境执行SHOW GRANTS时状态列显示ungranted。
授权数据本身存储在系统表GRANTS中,其表结构由 GRANTS_SCHEMA 宏 定义,包含以下列:
| 列名 | 含义 |
|---|---|
version | 授权/产品版本信息 |
expire_time | 授权到期时间(SHOW GRANTS\G中展示的到期时间来源) |
service_time | 服务起始时间 |
expired | 是否已过期 |
state | 授权状态(如ungranted/已激活/被吊销等) |
timeseries | 时间线数量配额 |
dnodes | DNode 节点数量配额 |
cpu_cores | CPU 核数配额 |
vnodes | VNode 数量配额 |
storage_size | 存储容量配额 |
此外,mndDef.h 中定义了GRANT_STATE_REASON_ALTER = 1状态原因(对应alter activeCode 'revoked' or 'xxx'),说明激活码支持通过同一入口进行吊销/变更操作。而 tgrant.h 中的GRANT_EXPIRE_VALUE (31556995201LL)(约等于 1000 年的毫秒级时间跨度)被用作"永久授权"的到期时间表示。
激活码解锁哪些企业能力:EGrantType 一览
tgrant.h 中的EGrantType枚举列出了激活码所对应的全部企业版授权维度,也即SHOW GRANTS各配额项背后的功能开关:
| 枚举值 | 对应能力 |
|---|---|
TSDB_GRANT_ALL | 全功能授权 |
TSDB_GRANT_TIMESERIES/TSDB_GRANT_STABLE/TSDB_GRANT_TABLE | 时间线 / 超级表 / 普通表数量配额 |
TSDB_GRANT_DNODE/TSDB_GRANT_CPU_CORES/TSDB_GRANT_VNODE/TSDB_GRANT_STORAGE | 节点数 / CPU 核数 / VNode 数 / 存储容量配额 |
TSDB_GRANT_AUDIT | 审计日志 |
TSDB_GRANT_VIEW | 视图 |
TSDB_GRANT_QUERY_TIME | 查询时长限制 |
TSDB_GRANT_SUBSCRIPTION | 数据订阅(TMQ) |
TSDB_GRANT_STREAMS | 流计算任务数 |
TSDB_GRANT_MULTI_TIER | 多层架构部署 |
TSDB_GRANT_SHARED_STORAGE/TSDB_GRANT_MOUNT | 共享存储 / 存储挂载 |
TSDB_GRANT_ACTIVE_ACTIVE/TSDB_GRANT_DUAL_REPLICA_HA | 双活 / 双副本高可用 |
TSDB_GRANT_DB_ENCRYPTION | 数据库级加密 |
TSDB_GRANT_TD_GPT | TDgpt 智能分析 |
TSDB_GRANT_XNODE/TSDB_GRANT_EXT_SOURCE | XNode / 外部数据源联邦查询 |
这些配额项由grantCheck/grantCheckEx/grantCheckExpire等接口在各功能入口处做运行时校验,激活码写入后相应配额生效。
多实例场景:License Center(ELS + CLS)
单集群使用上述激活码流程即可;若需统一管理多个 TSDB / IDMP 实例的额度与槽位(quota & slot),建议使用 License Center(ELS + CLS)完成授权管理,详见:
- License Center 参考手册;
- License Center 部署与激活。
注意事项与常见问题
- 必须使用 root 执行:
ALTER CLUSTER属于集群级配置操作,源码中通过MND_OPER_CONFIG_CLUSTER权限点拦截,普通用户执行会被拒绝; - 激活码与机器强绑定:机器码由
tGetMachineId基于本机环境生成并经加密码机制校验,迁移到新机器或更换硬件后,原激活码不再适用,需重新采集SHOW CLUSTER MACHINES输出并申请; - 集群级生效:
ALTER CLUSTER 'activeCode'作用于整个集群而非单个 DNode,多节点集群只需在任一节点执行一次; - 验证授权:激活后务必执行
SHOW GRANTS\G(或查看 Explorer 的许可证页签),确认state为已激活状态并核对expire_time到期时间; - 社区版不可用:从源码编译条件看,
activeCode分支依赖TD_ENTERPRISE宏,开源版构建执行该语句将返回不支持错误,激活流程仅对企业版安装包有意义。
【免费下载链接】TDengineHigh-performance, scalable time-series database designed for Industrial IoT (IIoT) scenarios项目地址: https://gitcode.com/GitHub_Trending/tde/TDengine
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考