跳到主要内容

节点管理

组成 TDengine TSDB 集群的物理实体是 dnode (data node 的缩写),它是一个运行在操作系统之上的进程。在 dnode 中可以建立负责时序数据存储的 vnode (virtual node),在多节点集群环境下当某个数据库的 replica 为 3 时,该数据库中的每个 vgroup 由 3 个 vnode 组成;当数据库的 replica 为 1 时,该数据库中的每个 vgroup 由 1 个 vnode 组成。如果要想配置某个数据库为多副本,则集群中的 dnode 数量至少为 3。在 dnode 还可以创建 mnode (management node),单个集群中最多可以创建三个 mnode。在 TDengine TSDB 3.0.0.0 中为了支持存算分离,引入了一种新的逻辑节点 qnode (query node),qnode 和 vnode 既可以共存在一个 dnode 中,也可以完全分离在不同的 dnode 上。

创建数据节点

CREATE DNODE {dnode_endpoint | dnode_host_name PORT port_val}

其中 dnode_endpoint 是形成 hostname:port的格式。也可以分开指定 hostname 和 port。

实际操作中推荐先创建 dnode,再启动相应的 dnode 进程,这样该 dnode 就可以立即根据其配置文件中的 firstEP 加入集群。每个 dnode 在加入成功后都会被分配一个 ID。

查看数据节点

SHOW DNODES;

可以列出集群中所有的数据节点,所列出的字段有 dnode 的 ID, endpoint, status。

删除数据节点

DROP DNODE dnode_id [force] [unsafe]

注意删除 dnode 不等于停止相应的进程。实际中推荐先将一个 dnode 删除之后再停止其所对应的进程。

只有在线节点可以被删除。如果要强制删除离线节点,需要执行强制删除操作,即指定 force 选项。

当节点上存在单副本,并且节点处于离线,如果要强制删除该节点,需要执行非安全删除,即制定 unsafe,并且数据不可再恢复。

修改数据节点配置

ALTER DNODE dnode_id dnode_option

ALTER ALL DNODES dnode_option

对于支持动态修改的配置参数,您可以使用 ALTER DNODE 或 ALTER ALL DNODES 语法修改 dnode 中配置参数的值,自 v3.3.4.0 后,修改的配置参数将自动持久化,即便数据库服务重启后仍然生效。

对于一个配置参数是否支持动态修改,请您参考 taosd 参考手册

value 是参数的值,需要是字符格式。如修改 dnode 1 的日志输出级别为 debug。

ALTER DNODE 1 'debugFlag' '143';

补充说明

配置参数在 dnode 中被分为全局配置参数与局部配置参数,您可以查看 SHOW VARIABLES 或 SHOW DNODE dnode_id VARIABLES 中的 category 字段来确认配置参数属于全局配置参数还是局部配置参数。

  1. 局部配置参数:您可以使用 ALTER DNODE 或 ALTER ALL DNODES 来更新某一个 dnode 或全部 dnodes 的局部配置参数。
  2. 全局配置参数:全局配置参数要求各个 dnode 保持一致,所以您只可以使用 ALTER ALL DNODES 来更新全部 dnodes 的全局配置参数。

配置参数是否可以动态修改,有以下三种情况:

  1. 支持动态修改,立即生效
  2. 支持动态修改,重启生效
  3. 不支持动态修改

对于重启后生效的配置参数,您可以通过 SHOW VARIABLESSHOW DNODE dnode_id VARIABLES 看到修改后的值,但是需要重启数据库服务才使其生效。

添加管理节点

CREATE MNODE ON DNODE dnode_id

系统启动默认在 firstEP 节点上创建一个 MNODE,用户可以使用此语句创建更多的 MNODE 来提高系统可用性。一个集群最多存在三个 MNODE,一个 DNODE 上只能创建一个 MNODE。

查看管理节点

SHOW MNODES;

列出集群中所有的管理节点,包括其 ID,所在 DNODE 以及状态。

删除管理节点

DROP MNODE ON DNODE dnode_id;

删除 dnode_id 所指定的 DNODE 上的 MNODE。

创建查询节点

CREATE QNODE ON DNODE dnode_id;

系统启动默认没有 QNODE,用户可以创建 QNODE 来实现计算和存储的分离。一个 dnode 上只能创建一个 QNODE。一个 dnode 的 supportVnodes 参数如果不为 0,同时又在其上创建上 QNODE,则在该 dnode 中既有负责存储管理的 vnode 又有负责查询计算的 qnode,如果还在该 dnode 上创建了 mnode,则一个 dnode 上最多三种逻辑节点都可以存在。但通过配置也可以使其彻底分离。将一个 dnode 的supportVnodes配置为 0,可以选择在其上创建 mnode 或者 qnode 中的一种,这样可以实现三种逻辑节点在物理上的彻底分离。

查看查询节点

SHOW QNODES;

列出集群中所有查询节点,包括 ID,及所在 dnode

删除查询节点

DROP QNODE ON DNODE dnode_id;

删除 ID 为 dnode_id 的 dnode 上的 qnode,但并不会影响该 dnode 的状态。

创建订阅节点

CREATE BNODE ON DNODE dnode_id [PROTOCOL protocol];

系统启动默认没有 BNODE,用户可以创建 BNODE 来启动订阅服务。一个 dnode 上只能创建一个 BNODE。protocol 为可选配置项,不提供时,默认为“mqtt”,后续会扩展其它协议。bnode 创建成功后,dnode 会启动子进程 taosmqtt,对外提供订阅服务。

查看订阅节点

SHOW BNODES;

列出集群中所有订阅节点,包括 ID,protocol,创建时间,及所在 dnode。

删除订阅节点

DROP BNODE ON DNODE dnode_id;

删除 ID 为 dnode_id 的 dnode 上的 bnode,此 dnode 上的 taosmqtt 子进程会退出,停止订阅服务。

关闭虚拟节点

CLOSE VNODE vgroup_id ON DNODE dnode_id;

关闭指定 dnode 上指定 vgroup 的 vnode。关闭操作会优雅地刷写数据并停止该 vnode 运行,但不删除任何数据文件。被关闭的 vnode 在 SHOW VNODES 中将显示为 offline 状态。

此命令需要超级用户权限。

使用说明

  • 被关闭的 vnode 不再参与数据读写和 Raft 复制,有效副本数减少
  • 如果关闭的是 leader 副本,将触发 Raft 重新选举(写入短暂不可用,通常 < 1s)
  • 关闭状态不跨 taosd 重启保留——重启后 vnode 自动恢复打开
  • 建议在操作后通过 SHOW VNODES 确认状态变更

示例

-- 关闭 dnode 1 上 vgroup 2 的 vnode
CLOSE VNODE 2 ON DNODE 1;

-- 确认状态
SHOW VNODES;

打开虚拟节点

OPEN VNODE vgroup_id ON DNODE dnode_id;

重新打开指定 dnode 上之前通过 CLOSE VNODE 关闭的 vnode,恢复其正常运行。打开后 vnode 将重新加入 Raft 复制组并参与数据读写。

此命令需要超级用户权限。

使用说明

  • 仅可对之前通过 CLOSE VNODE 关闭的 vnode 执行
  • 打开操作涉及 vnode 初始化和 WAL 回放,耗时取决于 WAL 大小
  • 打开后 vnode 需要追赶复制进度,期间可能暂时无法提供读服务

示例

-- 重新打开 dnode 1 上 vgroup 2 的 vnode
OPEN VNODE 2 ON DNODE 1;

-- 确认恢复
SHOW VNODES;

常见错误

错误信息原因解决方法
Vgroup does not existvgroupId 不存在执行 SHOW VGROUPS 确认
Vgroup not found on specified dnode该 vgroup 在指定 dnode 上没有副本执行 SHOW VGROUPS 确认副本分布
Vnode is already closedvnode 已处于关闭状态无需重复关闭
Vnode is not in closed statevnode 未关闭,无法执行 OPEN确认 vnode 是否已被 CLOSE,或是否已因重启自动恢复

查询集群状态

SHOW CLUSTER ALIVE;

查询当前集群的状态是否可用,返回值

  • 0:不可用
  • 1:完全可用
  • 2:部分可用(集群中部分节点下线,但其它节点仍可以正常使用)

修改客户端配置

如果将客户端也看作广义的集群的一部分,可以通过如下命令动态修改客户端配置参数。

ALTER LOCAL local_option

您可以使用以上语法更该客户端的配置参数,并且不需要重启客户端,修改后立即生效。

对于一个配置参数是否支持动态修改,请您参考以下页面:taosc 参考手册

连接级参数修改命令 SET TIMEZONESET FIRST_DAY_OF_WEEK 请参见 时区与自然时间单位

查看客户端配置

SHOW LOCAL VARIABLES;