TDengine TSDB 企业版激活指南:从获取激活码到集群授权的完整流程
2026/9/14 8:10:18 网站建设 项目流程

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)

激活码是按机器签发的,因此第一步是采集集群各节点的机器身份信息:

  1. root用户打开 TDengine CLI:

    taos
  2. 执行以下 SQL,获取部署所需信息:

    SHOW CLUSTER MACHINES;

    示例输出如下:

    id | dnode_num | machine | version | ======================================================================= 3609687158593567855 | 1 | Bdw+qvOCyvAOc3SS5GIyEOIi | 3.3.6.13 |
  3. 将上述语句的完整输出复制后,连同以下信息一并提供给客户经理或授权代理商:

    • 公司名称;
    • 主要技术联系人的姓名与邮箱;
    • 使用环境(生产、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

  1. root用户打开 TDengine CLI:

    taos
  2. 将激活码应用到集群:

    ALTER CLUSTER 'activeCode' '<your-activation-code>';

此时 TDengine TSDB 企业版部署已完成授权。可执行以下 SQL 查看授权详情(含到期时间):

SHOW GRANTS\G;

方式二:TDengine TSDB Explorer

  1. root用户登录 TDengine TSDB Explorer,默认地址为http://127.0.0.1:6060
  2. 在左侧主菜单选择系统管理,打开许可证标签页,点击激活许可证
  3. 输入激活码,点击确定

重要:请确保激活码外侧没有单引号。在 Explorer 中若多输了引号,等价于把'code'整体当作激活码值传入,会导致校验失败。

验证授权结果

激活成功后,无论使用哪种方式,都应验证授权状态:

  • CLI 中执行SHOW GRANTS\G;,查看版本、到期时间与各配额项;
  • Explorer 的许可证标签页同样展示授权详情(含到期时间)。

源码解析:ALTER CLUSTER 'activeCode' 的完整处理链路

ALTER CLUSTER语句在 MNode 中由 mndProcessConfigClusterReq 处理,其核心流程为:

  1. 反序列化SMCfgClusterReq请求,记录option:%s, value:%s日志;

  2. 调用mndCheckOperPrivilege校验当前用户是否具备MND_OPER_CONFIG_CLUSTER操作权限——这就是必须使用root用户执行激活的原因;

  3. 通过mndAcquireCluster获取并拷贝当前SClusterObj集群对象;

  4. 依据配置项名称分发处理:

    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)等企业版集群级配置;

  5. 处理完成后,若审计级别达到AUDIT_LEVEL_CLUSTER,会通过auditRecord将本次alterCluster操作记入审计日志——激活操作在企业版审计体系中是可追溯的。

授权状态如何展示:GRANTS 系统表

SHOW GRANTS的取数逻辑注册在 mndGrant.c 的mndInitGrant中,通过mndAddShowRetrieveHandle(pMnode, TSDB_MGMT_TABLE_GRANTS, mndRetrieveGrant)绑定。在未授权(开源默认)时,mndRetrieveGrant 会输出一行默认值:产品名、unlimited(期限)、limitedfalseungranted(状态)等,这解释了为什么社区环境执行SHOW GRANTS时状态列显示ungranted

授权数据本身存储在系统表GRANTS中,其表结构由 GRANTS_SCHEMA 宏 定义,包含以下列:

列名含义
version授权/产品版本信息
expire_time授权到期时间(SHOW GRANTS\G中展示的到期时间来源)
service_time服务起始时间
expired是否已过期
state授权状态(如ungranted/已激活/被吊销等)
timeseries时间线数量配额
dnodesDNode 节点数量配额
cpu_coresCPU 核数配额
vnodesVNode 数量配额
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_GPTTDgpt 智能分析
TSDB_GRANT_XNODE/TSDB_GRANT_EXT_SOURCEXNode / 外部数据源联邦查询

这些配额项由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),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询