跳至主要内容 跳至导航 跳至页脚

订阅与许可证

了解 account、rdc 和 renet 如何处理机器槽位、仓库许可证和计划限制。

订阅与许可证

Rediacc 许可证管理分为三个组成部分:

  • account 签署权利并追踪使用情况
  • rdc 进行身份验证、请求许可证、将其交付给机器并在运行时强制执行
  • renet(机器上的运行时)在本地验证已安装的许可证,无需调用账户服务器

本页说明这些部分如何在本地部署中协同工作。

许可证的作用

许可证管理控制两件不同的事情:

  • 通过浮动许可证进行机器访问核算
  • 通过仓库许可证进行仓库运行时授权

这两者相关联,但它们不是同一个制品。

许可证的工作原理

account 是计划、合同覆盖、机器槽位状态和每月仓库许可证发放的真实来源。

rdc 在您的工作站上运行。它将您登录到账户服务器,请求所需的许可证,并通过 SSH 将其安装到远程机器上。当您运行仓库命令时,rdc 确保所需许可证已就位,并在机器上的运行时验证它们。

正常流程如下:

  1. 您使用 rdc subscription login 进行身份验证
  2. 您运行仓库命令,例如 rdc repo createrdc repo uprdc repo down
  3. 如果所需许可证缺失或已过期,rdcaccount 请求
  4. rdc 将签名的许可证写入机器
  5. 许可证在机器上本地验证,操作继续进行

有关工作站与服务器的分工,请参阅 rdc vs renet;有关仓库生命周期本身,请参阅 仓库

对于自动化和 AI 代理,请使用范围受限的订阅令牌而非浏览器登录:

rdc subscription login --token "$REDIACC_TOKEN"

您也可以直接通过环境注入令牌,使 CLI 无需任何交互式登录步骤即可发放和刷新仓库许可证:

export REDIACC_TOKEN="rdt_..."
export REDIACC_ACCOUNT_SERVER="https://www.rediacc.com/account"

机器槽位和仓库许可证

机器槽位(服务器端)

机器槽位追踪在服务器端强制执行。当 CLI 发放仓库许可证时,账户服务器会检查订阅的机器槽位配额。每个自助服务计划(Community、Professional、Business)都包含一个机器槽位;多机器部署属于需要与合作伙伴协商配置的 Enterprise 方案。槽位从该机器上最后一次仓库许可证发放起保持 5 小时,不活跃后自动释放。由于槽位仅在您积极进行配置操作时才被占用,一个槽位在一个月内仍可覆盖多台机器。

该上限读取自您的订阅记录,而不是硬编码的计划常量,因此协商确定的激活数量一旦写入订阅便立即生效。计划层级只决定它的初始值。

发放和续期的执行方式不同,这个区别很重要:

  • 发放新许可证会在上限处被阻止。 如果所有槽位都已占用,请求会以 MAX_MACHINES_REACHED 失败,并且不会配置任何东西。
  • 续期已有许可证永远不会被阻止。 在所有槽位都已占用时进行续期的机器会继续运行,其槽位会被记录为超出限制。您可以在门户的机器页面、rdc subscription status 的输出以及许可证状态 API 的 overLimitCount 字段中看到这一点。当该机器重新回到限制之内时,该标记会自动清除。

续期被有意设计成较宽松的一条路。续订自己已经持有的许可证的机器并不构成新增容量,拒绝它只会让一套早已付过费的基础设施停止备份。仍然被阻止的是新增容量本身。

机器上不存储任何机器许可证文件。槽位强制执行在服务器的发放时间进行。

仓库许可证

仓库许可证是针对一台机器上的一个仓库的签名许可证。它是机器上唯一存储的许可证文件,按数据存储和签名密钥分别组织:

/var/lib/rediacc/license/repos/{guid}/{keyId}.json
/var/lib/rediacc/license/datastores/{datastoreId}/repos/{guid}/{keyId}.json

位于机器默认存储上的仓库使用第一个路径。位于命名数据存储中的仓库使用第二个路径,其中 {datastoreId} 是该数据存储创建时获得的身份。正是这种划分范围的方式,让数据存储的分叉能被如实计量:分叉出来的数据存储会获得一个全新的身份,因此其中的仓库起初没有任何许可证,在第一次执行需要许可证的操作时报告 missing,并各自获得新发放的许可证。如果某个仓库的许可证中写的数据存储与它实际所在的数据存储不符,它会以 identity_mismatch 快速失败,而不是自动重新发放,这正是阻止许可证文件被横向复制的机制。

{keyId} 是一个 16 位十六进制指纹(对签名服务器的 Ed25519 公钥取 SHA-256 后的前 8 个字节)。由多个账户宇宙管理的仓库(例如生产环境和 bench 部署到同一台机器上)会在其 {guid} 目录下为每个签名密钥保留一个文件。该机器的 renet 构建只会验证其内置密钥、或链接到该密钥的委托证书能够验证的那个文件;其他宇宙的文件则处于无效状态。切换宇宙永远不会使许可证失效:新宇宙中的第一个操作会为该宇宙签发一次许可证(返回 missing 结果时会自动签发),此后两者会共存。

用于:

  • rdc repo createrdc repo forkrdc repo commit,在配置前验证(先在没有身份证明的情况下预发放,创建完成后再带上身份证明重新发放,因为检查发生时仓库尚不存在)
  • rdc repo resizerdc repo expandrdc repo mergerdc repo promote包括到期在内的完整验证
  • 备份传输,包括到期在内的完整验证rdc repo pushrdc repo pullrdc repo migrate 以及计划备份
  • rdc repo uprdc repo up --allrdc repo exec 以及机器重启时的仓库自动启动,验证时同时跳过到期和委托证书有效期窗口
  • rdc repo downrdc repo delete 以及列出仓库之类的只读命令完全不需要许可证

上述所有情形都会强制执行签名、密钥绑定、机器绑定、仓库绑定以及每一项委托证书约束。最后一组放宽的只是那两个时间窗口,因此过期的许可证或失效的证书永远不会妨碍您运行或关停自己的数据。

仓库许可证绑定到机器和目标仓库。每个许可证包含机器 ID、仓库 GUID、订阅 ID、计划限制和到期时间。对于加密仓库,Rediacc 还验证底层卷的 LUKS 身份。

多个订阅可以共存于同一台机器上。每个仓库都携带自己的许可证和自己的订阅上下文。

集群

集群功能作为 Enterprise 协议的一部分,通过我们的合作伙伴销售。它不是自助计划中的选项,下面各节讲的是它如何计量,而不是如何购买。

一个节点就是一台机器。 集群本身没有独立的许可证身份。集群中的每个节点都是一台装有 Renet Agent 的普通机器,其计数方式与独立机器完全相同。

没有合并计算。 五节点集群不会共用一个集群槽位。每个节点在首次有仓库放置到它上面时占用自己的槽位,该槽位与其他槽位遵循同样的 5 小时浮动规则:从该节点上最后一次仓库许可证发放起保持 5 小时,之后自动释放。

搭建集群是免费的,放置仓库才会计量。 创建集群、加入节点、安装分布式存储层以及搭建 Kubernetes 控制平面都不消耗槽位。计量从仓库落到某个节点上时才开始。

集群分叉会按仓库重新计量。 分叉整个集群会让分叉出的数据存储获得新的身份,因此分叉中的每个仓库都会在首次被触及时(在它实际运行的那个节点上)获得自己的许可证。普通迁移则相反:在机器之间移动仓库会把它的许可证一并带走并继续通过验证,因为它的存储身份没有任何变化。

集群上的续期遵循上文的宽松占用规则。 节点会在无人值守的情况下续订自己的许可证,因此规模已超出激活数量的集群仍会继续运行,并报告超出限制的节点,而不是在半夜让备份失败。新增节点则仍会在上限处被阻止。

集群规模是谈出来的,不是勾选出来的。集群的激活数量在订单中约定,由您的合作伙伴直接写入订阅。请通过 联系我们 开始这一沟通。

默认限制

仓库大小取决于权利级别:

  • Community:最多 10 GB
  • 付费计划:计划或合同限制

付费计划默认限制为:

计划浮动许可证仓库大小每月仓库许可证发放次数委托证书默认/最大有效期
Community110 GB10015d / 30d
Professional1100 GB2,000+60d / 120d
Business1500 GB5,000+90d / 180d
Enterprise定制1 TB+15,000+120d / 365d

特定合同限制可以为特定客户提高或降低这些值。委托证书有效期还受 subscription.expiresAt + 3 day grace 的硬性上限约束,因此按月计费的订阅自然会获得与计费周期对齐的证书。完整规则请参阅 许可链与委托 - 有效期策略

免费试用与 Community 回退

新注册用户会自动开始 Professional 或 Business 计划的 14 天免费试用。注册时会收集信用卡信息,但首次扣费只会在试用结束时发生,因此在此之前取消不会产生任何费用。每位客户仅可使用一次试用。

Community 是始终存在的免费基础计划。新账户已不能直接注册使用该计划;相反,只要订阅结束(无论是试用期内取消、日后取消付费计划,还是扣款失败),账户就会回退到 Community。回退到 Community 后,您将保留 1 台机器、每个仓库 10 GB 以及每月 100 次设置的额度。在试用制模型上线之前创建的账户会保留其现有的 Community 权限。

限制的执行方式在最关键之处仍然宽松:订阅结束后,正在运行的仓库(updowndelete、自动启动)仍会继续正常工作。除此之外还有两条不同的规则,把它们混为一谈正是 60 天宽限期看起来前后不一致的原因:

  • 需要账户服务器的操作在订阅失效后无法进行,因为服务器会拒绝签名。这包括 createfork 以及任何许可证刷新或续期。订阅一旦失效,就不会再配置出任何新东西。
  • 只需要一张有效的已安装许可证的操作会一直工作到该许可证硬性到期为止,全程无需服务器参与。这包括对您已有仓库执行 resizeexpand,以及备份传输(pushpull、计划备份)。仓库主许可证在订阅结束日期之后 60 天硬性到期,60 天宽限期正是由此而来。分叉的许可证寿命则短得多,上限为 7 天,这也是分叉密集的机器为何依赖下文所述自助续期的原因。

因此,失效的订阅会立刻阻止您扩充机器规模,并在 60 天后阻止您扩充其中的仓库。

虚拟机迁移宽限期

当托管提供商将虚拟机迁移到不同的物理硬件时,机器 ID 会改变(它派生自 DMI UUID、/etc/machine-id 和 NIC MAC 地址等硬件标识符)。仓库许可证绑定到机器 ID,因此迁移通常会使所有许可证失效。

为了透明地处理这个问题,仓库许可证包含一个 40 天的机器 ID 宽限期。如果机器 ID 不匹配但许可证是在 40 天内发放的,许可证仍然被接受。由于许可证每 30 天刷新一次,下次刷新会自动绑定到新的机器 ID。

实际上:

  • 虚拟机迁移,机器 ID 改变:仓库保持运行(在 40 天窗口内)
  • 下一个 rdc 操作用新机器 ID 刷新许可证
  • 无需手动干预
  • 使用 rdc machine status <machine> --system --licenses 检查机器 ID 和许可证状态

Edge 渠道账户运行在 Community 计划上,限制为 2 倍(20 GB 仓库、每月 200 次设置、2 台机器)。付费计划仅在 Stable 渠道提供。详情请参阅 发布渠道

仓库创建、启动、停止和重启期间发生的情况

创建和分叉仓库

创建或分叉仓库时:

  1. rdc 确保您的订阅令牌可用(如需要则触发设备代码身份验证)
  2. rdc 从账户服务器预发放仓库许可证(此时服务器检查机器槽位配额和月度发放限制)
  3. 预发放的仓库许可证被写入机器并在本地验证(签名、机器 ID、仓库 GUID、到期和大小限制)
  4. 成功创建后,rdc 用仓库身份证明(LUKS UUID 或存储指纹)重新发放仓库许可证

该账户支持的发放计入您的月度仓库许可证发放使用量。每个许可证包含账户持有人的电子邮件和公司名称,renet 验证许可证时会记录这些信息。

启动、停止和删除仓库

rdc 验证机器上安装的仓库许可证,但跳过到期检查。签名、机器 ID、仓库 GUID 和身份仍会被验证。即使订阅过期,用户也不会被锁定无法操作其仓库。

调整和扩展仓库

rdc 执行包括到期和大小限制在内的完整仓库许可证验证。

机器重启和自动启动

自动启动使用与 rdc repo up 相同的规则:跳过到期,因此仓库总是可以自由重启。

仓库许可证使用长期有效性模型:

  • refreshRecommendedAt 是软刷新点
  • hardExpiresAt 是阻塞点

如果仓库许可证已过时但仍在硬到期之前,运行时可以继续。一旦达到硬到期,rdc 必须为调整或扩展操作刷新它。

其他仓库操作

列出仓库、检查仓库信息和挂载等操作不需要任何许可证验证。

检查状态和刷新许可证

人工登录:

rdc subscription login

自动化或 AI 代理登录:

rdc subscription login --token "$REDIACC_TOKEN"

对于非交互式环境,设置 REDIACC_TOKEN 是最简单的选项。令牌应仅限于代理所需的订阅和仓库许可证操作。

显示账户支持的订阅状态:

rdc subscription status

显示一台机器的机器激活详情:

rdc subscription status -m hostinger

显示一台机器上已安装的仓库许可证详情:

rdc subscription status -m hostinger

刷新机器上某个仓库的许可证:

rdc subscription refresh -m hostinger --repo my-app

--repo ref 必须能在本地 rdc 配置中解析。在机器上发现但本地配置中缺少的仓库将被拒绝:它会被报告为失败,且不会自动分类。

首次使用时,找不到可用仓库许可证的已授权仓库或备份操作可以自动触发账户授权移交。CLI 打印授权 URL,在交互式终端中尝试打开浏览器,并在授权和发放成功后重试一次操作。

在非交互式环境中,CLI 不等待浏览器批准。相反,它告诉您使用 rdc subscription login --token ...REDIACC_TOKEN 提供范围受限的令牌。

有关机器首次设置,请参阅 机器设置

许可证自助续期

上面讲的一切都假设您就坐在键盘前。计划备份并不是这样,自助续期正是为这种场景而存在的。

计划备份按严格层级验证,因此需要一张尚未过期的许可证。而分叉的许可证上限是 7 天。您的机器按设计不持有任何账户凭据,所以在有自助续期之前,一个分叉的备份会在它创建一周后悄无声息地停下来,就在凌晨三点。

机器如何在不持有令牌的情况下续期

Rediacc 发放或续期的每一张许可证都带有 renewalUrl,即签发该许可证的账户服务器上续期端点的完整地址。机器从自己已安装的许可证中读取这个地址,因此永远不需要有人告诉它账户服务器在哪里。

接着机器把已安装的许可证提交回该端点。许可证本身就是凭据:它是签名的,服务器验证该签名,全程不涉及任何 API 令牌。服务器返回一张带有新有效期窗口的许可证,机器安装并重新验证之后,才算完成本次续期。

续期是一次覆盖整台机器的操作:

sudo renet license renew

仓库会按签发它们的服务器分组,因此同时服务于两个账户宇宙的机器只需分别联系每一方一次。锁文件可防止两次续期同时运行,--jitter 则把原本会在整点一起醒来的机器群错开。

服务器在三种情况下会拒绝续期,每一种含义都不同:

拒绝情形含义
订阅已失效、被暂停或已过宽限期计费问题。订阅重新生效后,续期会自行恢复
委托证书已过期或被撤销本地部署配置问题。请在您的本地部署服务器上续期该证书,之后机器即可正常续期
机器身份不再匹配且 40 天宽限期已过该许可证属于另一台机器。请从当前机器上下文重新发放

一次拒绝不会终止整轮运行。某个失效的仓库不会阻止同一台机器上其他仓库的续期。

计划备份会自行续期

Rediacc 写入的每个备份单元都会先执行一次续期:

ExecStartPre=-<renet> license renew --jitter 45s

开头的 - 是有意标记为尽力而为。被拒绝的续期、网络抖动,或者尚不认识该命令的旧版 Renet Agent,都绝不应该拖垮备份本身。备份照常运行,许可证则在可能时顺路完成续期。

备份被阻止时

如果许可证检查确实拒绝了某次备份,机器会把它记录下来。这个标记是无人值守备份已停止复制数据的唯一信号,因此会被显著地呈现出来:

rdc machine status <machine> --licenses

backups 列会显示 BLOCKED 及其原因,同样的信息还会作为错误打印在表格下方,以免淹没在三十个仓库之中。renewed 列显示最近一次无人值守续期的结果,包括服务器给出的拒绝代码(如果有),这正是判断该去处理计费问题还是本地部署证书问题的依据。

一次成功的续期会清除该标记,一次通过许可证检查的备份也会。无需手动确认或重置任何东西。

离线行为和到期

许可证验证在机器本地进行。您不需要联系账户服务器来操作您的仓库。

这意味着:

  • 运行中的环境不需要在每个命令上都有实时账户连接
  • 即使许可证过期,所有仓库也可以随时启动、停止和删除,用户永远不会被锁定无法操作自己的仓库
  • 配置操作(createfork)需要预发放的仓库许可证,增长操作(resizeexpand)需要有效的仓库许可证
  • 真正过期的仓库许可证必须在调整或扩展之前被替换,可以通过工作站上的 rdc 完成,也可以由机器自行续期完成
  • 许可证签名通过嵌入的公钥进行验证,签名验证无法被禁用

恢复行为

自动恢复有意保持在较窄的范围:

  • missingrdc 可能会在需要时授权账户访问、批量刷新仓库许可证并重试一次
  • expiredrdc 可能会批量刷新仓库许可证并重试一次
  • machine_mismatch:快速失败并告诉您从当前机器上下文重新发放
  • repository_mismatch:快速失败并告诉您明确刷新仓库许可证
  • sequence_regression:作为仓库许可证完整性或状态问题快速失败
  • invalid_signature:作为仓库许可证完整性或状态问题快速失败
  • identity_mismatch:快速失败,仓库身份与已安装许可证不匹配
  • cert_expired:在成长类操作(createforkresize)和备份传输(pushpull)上会快速失败;repo up 和自动启动仍可正常运行,这与宽松的许可证到期模型一致。请续期该委托证书
  • cert_invalid:快速失败,委托证书未通过约束检查(主密钥签名无效、订阅/计划不匹配、超出容量上限,或序列号超过 maxTotalIssuances)。请在修复相应限制后重新签发证书

这些快速失败情况不会自动消耗账户支持的刷新或发放调用。

阅读这份清单时有两点需要注意:

  • missing 并不总是问题。在刚分叉出来的数据存储中首次触及某个仓库时,它同样是正常结果,而且正是它让这次分叉得以计量:许可证被发放,槽位被占用,操作继续进行。identity_mismatch 则是有意为之的反面情形,让从其他数据存储复制过来的许可证文件快速失败,而不是被悄悄重新发放。
  • 这份清单描述的是从您工作站发起的恢复。自行续期的机器有它自己的结果,这些结果由 rdc machine status <machine> --licenses 报告,而不是作为命令失败抛出,因为计划备份没有任何人可以告知。

本地部署的委托证书

对于本地部署和隔离网络部署,这会变得复杂。上游账户服务器颁发委托证书,授权您的本地部署实例使用自己的 Ed25519 密钥签署许可证。该证书约束本地部署在其计划限制内运行,并创建防篡改的证书链。

订阅所有者的关键注意事项:

  • 每个订阅只能有一个有效证书。 每个本地部署实例根据自身本地账本执行每月和每台机器的配额,因此多实例会成倍增加有效配额且无法对账。需要生产 + 预发布 + 灾备环境的客户必须为每个实例购买单独的订阅。
  • 基于层级的默认有效期(15d / 60d / 90d / 120d)和上限(30d / 120d / 180d / 365d)—请参阅上方的限制表。
  • 通过客户门户自助管理。 组织所有者和管理员可以在 /account/delegation-certs 创建、续期和撤销委托证书。所有客户均可查看该页面,无论计划层级如何,仅限制不同。
  • 自动续期通过一键引导支持,为本地部署生成一个范围为 delegation:renew 的 API 令牌用于上游续期调用。
  • 隔离网络续期通过已签名的续期请求清单支持,本地部署管理员下载后离线传输到上游,上游处理后颁发新证书。

操作设置请参阅 本地部署安装 - 隔离网络部署的许可,加密设计请参阅 许可链与委托

每月仓库许可证发放次数

此指标统计当前 UTC 日历月内成功的账户支持仓库许可证发放活动。

包括:

  • 首次仓库许可证发放
  • 返回新签名许可证的成功仓库许可证刷新

不包括:

  • 未更改的批量条目
  • 失败的发放尝试
  • 在发放前被拒绝的未追踪仓库

如果您需要面向客户的使用情况和近期仓库许可证发放历史视图,请使用账户门户。如果您需要机器端检查,请使用 rdc subscription status -mrdc subscription status -m