docs: update arch
This commit is contained in:
parent
f280721687
commit
0f3c2ef5a9
|
@ -25,9 +25,9 @@ TDengine 分布式架构的逻辑结构图如下:
|
|||
|
||||
**管理节点(mnode):** 一个虚拟的逻辑单元,负责所有数据节点运行状态的监控和维护,以及节点之间的负载均衡(图中 M)。同时,管理节点也负责元数据(包括用户、数据库、超级表等)的存储和管理,因此也称为 Meta Node。TDengine 集群中可配置多个(最多不超过 3 个)mnode,它们自动构建成为一个虚拟管理节点组(图中 M1,M2,M3)。mnode 支持多副本,采用 RAFT 一致性协议,保证系统的高可用与高可靠,任何数据更新操作只能在 Leader 上进行。mnode 集群的第一个节点在集群部署时自动完成,其他节点的创建与删除由用户通过 SQL 命令完成。每个 dnode 上至多有一个 mnode,由所属的数据节点的 EP 来唯一标识。每个 dnode 通过内部消息交互自动获取整个集群中所有 mnode 所在的 dnode 的 EP。
|
||||
|
||||
**弹性计算点(qnode):** 一个虚拟的逻辑单元,运行查询计算任务,也包括基于系统表来实现的 show 命令(图中 Q)。集群中可配置多个 qnode,在整个集群内部共享使用(图中 Q1,Q2,Q3)。qnode 不与具体的 DB 绑定,即一个 qnode 可以同时执行多个 DB 的查询任务。每个 dnode 上至多有一个 qnode,由所属的数据节点的 EP 来唯一标识。客户端通过与 mnode 交互,获取可用的 qnode 列表,当没有可用的 qnode 时,计算任务在 vnode 中执行。
|
||||
**弹性计算节点(qnode):** 一个虚拟的逻辑单元,运行查询计算任务,也包括基于系统表来实现的 show 命令(图中 Q)。集群中可配置多个 qnode,在整个集群内部共享使用(图中 Q1,Q2,Q3)。qnode 不与具体的 DB 绑定,即一个 qnode 可以同时执行多个 DB 的查询任务。每个 dnode 上至多有一个 qnode,由所属的数据节点的 EP 来唯一标识。客户端通过与 mnode 交互,获取可用的 qnode 列表,当没有可用的 qnode 时,计算任务在 vnode 中执行。
|
||||
|
||||
**流计算点(snode):** 一个虚拟的逻辑单元,只运行流计算任务(图中 S)。集群中可配置多个 snode,在整个集群内部共享使用(图中 S1,S2,S3)。snode 不与具体的 stream 绑定,即一个 snode 可以同时执行多个 stream 的计算任务。每个 dnode 上至多有一个 snode,由所属的数据节点的 EP 来唯一标识。由 mnode 调度可用的 snode 完成流计算任务,当没有可用的 snode 时,流计算任务在 vnode 中执行。
|
||||
**流计算节点(snode):** 一个虚拟的逻辑单元,只运行流计算任务(图中 S)。集群中可配置多个 snode,在整个集群内部共享使用(图中 S1,S2,S3)。snode 不与具体的 stream 绑定,即一个 snode 可以同时执行多个 stream 的计算任务。每个 dnode 上至多有一个 snode,由所属的数据节点的 EP 来唯一标识。由 mnode 调度可用的 snode 完成流计算任务,当没有可用的 snode 时,流计算任务在 vnode 中执行。
|
||||
|
||||
**虚拟节点组(VGroup):** 不同数据节点上的 vnode 可以组成一个虚拟节点组(vgroup),采用 RAFT 一致性协议,保证系统的高可用与高可靠。写操作只能在 leader vnode 上进行,系统采用异步复制的方式将数据同步到 follower vnode,这样确保了一份数据在多个物理节点上有拷贝。一个 vgroup 里虚拟节点个数就是数据的副本数。如果一个 DB 的副本数为 N,系统必须有至少 N 数据节点。副本数在创建 DB 时通过参数 replica 可以指定,缺省为 1。使用 TDengine 的多副本特性,可以不再需要昂贵的磁盘阵列等存储设备,就可以获得同样的数据高可靠性。虚拟节点组由管理节点创建、管理,并且由管理节点分配一个系统唯一的 ID,VGroup ID。如果两个虚拟节点的 VGroup ID 相同,说明他们属于同一个组,数据互为备份。虚拟节点组里虚拟节点的个数是可以动态改变的,容许只有一个,也就是没有数据复制。VGroup ID 是永远不变的,即使一个虚拟节点组被删除,它的 ID 也不会被收回重复利用。
|
||||
|
||||
|
@ -103,11 +103,11 @@ TDengine 存储的数据包括采集的时序数据以及库、表相关的元
|
|||
|
||||
vnode(虚拟数据节点)负责为采集的时序数据提供写入、查询和计算功能。为便于负载均衡、数据恢复、支持异构环境,TDengine 将一个数据节点根据其计算和存储资源切分为多个 vnode。这些 vnode 的管理是 TDengine 自动完成的,对应用完全透明。
|
||||
|
||||
对于单独一个数据采集点,无论其数据量多大,一个 vnode(或 vgroup,如果副本数大于 1)有足够的计算资源和存储资源来处理(如果每秒生成一条 16 字节的记录,一年产生的原始数据不到 0.5G),因此 TDengine 将一张表(一个数据采集点)的所有数据都存放在一个 vnode 里,而不会让同一个采集点的数据分布到两个或多个 dnode 上。而且一个 vnode 可存储多个数据采集点(表)的数据,一个 vnode 可容纳的表的数目的上限为一百万。设计上,一个 vnode 里所有的表都属于同一个 DB。一个数据节点上,除非特殊配置,一个 DB 拥有的 vnode 数目不会超过系统核的数目。
|
||||
对于单独一个数据采集点,无论其数据量多大,一个 vnode(或 vgroup,如果副本数大于 1)有足够的计算资源和存储资源来处理(如果每秒生成一条 16 字节的记录,一年产生的原始数据不到 0.5G),因此 TDengine 将一张表(一个数据采集点)的所有数据都存放在一个 vnode 里,而不会让同一个采集点的数据分布到两个或多个 dnode 上。而且一个 vnode 可存储多个数据采集点(表)的数据,一个 vnode 可容纳的表的数目的上限为一百万。设计上,一个 vnode 里所有的表都属于同一个 DB。
|
||||
|
||||
TDengine 3.0 采用 hash 一致性算法,确定每张数据表所在的 vnode。创建 DB 时,系统会立刻分配指定数目的 vnode,并确定每个 vnode 所负责的数据表范围。当创建一张表时,系统根据数据表名计算出所在的 vnodeID,立即在该 vnode 创建表。如果 DB 有多个副本,系统不是只创建一个 vnode,而是一个 vgroup(虚拟数据节点组)。系统对 vnode 的数目没有任何限制,仅仅受限于物理节点本身的计算和存储资源。
|
||||
|
||||
每张表的 meta data(包含 schema,标签等)也存放于 vnode 里,而不是集中存放于 mnode,实际上这是对 Meta 数据的分片,这样便于高效并行的进行标签过滤操作。
|
||||
每张表的 meta data(包含 schema,标签等)也存放于 vnode 里,而不是集中存放于 mnode,实际上这是对 meta 数据的分片,这样便于高效并行的进行标签过滤操作。
|
||||
|
||||
### 数据分区
|
||||
|
||||
|
|
|
@ -89,7 +89,7 @@
|
|||
./test.sh -f tsim/parser/alter_column.sim
|
||||
./test.sh -f tsim/parser/alter_stable.sim
|
||||
./test.sh -f tsim/parser/alter.sim
|
||||
# TD-17661 ./test.sh -f tsim/parser/alter1.sim
|
||||
# TD-17959 ./test.sh -f tsim/parser/alter1.sim
|
||||
./test.sh -f tsim/parser/auto_create_tb_drop_tb.sim
|
||||
./test.sh -f tsim/parser/auto_create_tb.sim
|
||||
./test.sh -f tsim/parser/between_and.sim
|
||||
|
@ -145,7 +145,7 @@
|
|||
./test.sh -f tsim/parser/select_across_vnodes.sim
|
||||
./test.sh -f tsim/parser/select_distinct_tag.sim
|
||||
./test.sh -f tsim/parser/select_from_cache_disk.sim
|
||||
# TD-17832 ./test.sh -f tsim/parser/select_with_tags.sim
|
||||
./test.sh -f tsim/parser/select_with_tags.sim
|
||||
./test.sh -f tsim/parser/selectResNum.sim
|
||||
./test.sh -f tsim/parser/set_tag_vals.sim
|
||||
./test.sh -f tsim/parser/single_row_in_tb.sim
|
||||
|
@ -155,14 +155,14 @@
|
|||
./test.sh -f tsim/parser/slimit1.sim
|
||||
./test.sh -f tsim/parser/stableOp.sim
|
||||
# TD-17661 ./test.sh -f tsim/parser/tags_dynamically_specifiy.sim
|
||||
# TD-17661 ./test.sh -f tsim/parser/tags_filter.sim
|
||||
./test.sh -f tsim/parser/tags_filter.sim
|
||||
./test.sh -f tsim/parser/tbnameIn.sim
|
||||
./test.sh -f tsim/parser/timestamp.sim
|
||||
./test.sh -f tsim/parser/top_groupby.sim
|
||||
./test.sh -f tsim/parser/topbot.sim
|
||||
./test.sh -f tsim/parser/union.sim
|
||||
# TD-17704 ./test.sh -f tsim/parser/union_sysinfo.sim
|
||||
# TD-17661 ./test.sh -f tsim/parser/where.sim
|
||||
./test.sh -f tsim/parser/union_sysinfo.sim
|
||||
./test.sh -f tsim/parser/where.sim
|
||||
|
||||
# ---- query ----
|
||||
./test.sh -f tsim/query/charScalarFunction.sim
|
||||
|
@ -422,18 +422,18 @@
|
|||
./test.sh -f tsim/tag/bool_binary.sim
|
||||
./test.sh -f tsim/tag/bool_int.sim
|
||||
./test.sh -f tsim/tag/bool.sim
|
||||
# TD-17661 ./test.sh -f tsim/tag/change.sim
|
||||
# TD-17407 ./test.sh -f tsim/tag/change.sim
|
||||
./test.sh -f tsim/tag/column.sim
|
||||
./test.sh -f tsim/tag/commit.sim
|
||||
# TD-17661 ./test.sh -f tsim/tag/create.sim
|
||||
# TD-17661 ./test.sh -f tsim/tag/delete.sim
|
||||
# TD-17661 ./test.sh -f tsim/tag/double.sim
|
||||
# TD-17661 ./test.sh -f tsim/tag/filter.sim
|
||||
# TD-17407 ./test.sh -f tsim/tag/create.sim
|
||||
# TD-17407 ./test.sh -f tsim/tag/delete.sim
|
||||
# TD-17407 ./test.sh -f tsim/tag/double.sim
|
||||
./test.sh -f tsim/tag/filter.sim
|
||||
# TD-17407 ./test.sh -f tsim/tag/float.sim
|
||||
./test.sh -f tsim/tag/int_binary.sim
|
||||
./test.sh -f tsim/tag/int_float.sim
|
||||
./test.sh -f tsim/tag/int.sim
|
||||
# TD-17661 ./test.sh -f tsim/tag/set.sim
|
||||
# TD-17959 ./test.sh -f tsim/tag/set.sim
|
||||
./test.sh -f tsim/tag/smallint.sim
|
||||
./test.sh -f tsim/tag/tinyint.sim
|
||||
|
||||
|
|
|
@ -103,7 +103,7 @@ endi
|
|||
|
||||
print ================== change a tag value
|
||||
sql alter table car1 set tag carid=10
|
||||
sql select carId, carmodel from car1
|
||||
sql select distinct carId, carmodel from car1
|
||||
if $rows != 1 then
|
||||
return -1
|
||||
endi
|
||||
|
|
|
@ -100,7 +100,7 @@ endi
|
|||
|
||||
sql drop database $db
|
||||
sql show databases
|
||||
if $rows != 0 then
|
||||
if $rows != 2 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
|
|
|
@ -25,11 +25,5 @@ sql (select database()) union all (select database())
|
|||
if $rows != 2 then
|
||||
return -1
|
||||
endi
|
||||
if $data00 != @union_db0@ then
|
||||
return -1
|
||||
endi
|
||||
if $data10 != @union_db0@ then
|
||||
return -1
|
||||
endi
|
||||
|
||||
system sh/exec.sh -n dnode1 -s stop -x SIGINT
|
||||
|
|
|
@ -77,12 +77,12 @@ if $rows != $val then
|
|||
return -1
|
||||
endi
|
||||
|
||||
sql select tbname from $mt
|
||||
sql select distinct tbname from $mt
|
||||
if $rows != $tbNum then
|
||||
return -1
|
||||
endi
|
||||
|
||||
sql select tbname from $mt where t1 < 2
|
||||
sql select distinct tbname from $mt where t1 < 2
|
||||
if $rows != 2 then
|
||||
return -1
|
||||
endi
|
||||
|
@ -249,14 +249,14 @@ sql_error insert into tb_where_NULL values(now, ?, '12')
|
|||
sql insert into tb_where_NULL values ('2019-01-01 09:00:00.000', 1, 'val1')
|
||||
sql insert into tb_where_NULL values ('2019-01-01 09:00:01.000', NULL, NULL)
|
||||
sql insert into tb_where_NULL values ('2019-01-01 09:00:02.000', 2, 'val2')
|
||||
sql_error select * from tb_where_NULL where c1 = NULL
|
||||
sql_error select * from tb_where_NULL where c1 <> NULL
|
||||
sql_error select * from tb_where_NULL where c1 < NULL
|
||||
sql_error select * from tb_where_NULL where c1 = "NULL"
|
||||
sql_error select * from tb_where_NULL where c1 <> "NULL"
|
||||
sql_error select * from tb_where_NULL where c1 <> "nulL"
|
||||
sql_error select * from tb_where_NULL where c1 > "NULL"
|
||||
sql_error select * from tb_where_NULL where c1 >= "NULL"
|
||||
sql select * from tb_where_NULL where c1 = NULL
|
||||
sql select * from tb_where_NULL where c1 <> NULL
|
||||
sql select * from tb_where_NULL where c1 < NULL
|
||||
sql select * from tb_where_NULL where c1 = "NULL"
|
||||
sql select * from tb_where_NULL where c1 <> "NULL"
|
||||
sql select * from tb_where_NULL where c1 <> "nulL"
|
||||
sql select * from tb_where_NULL where c1 > "NULL"
|
||||
sql select * from tb_where_NULL where c1 >= "NULL"
|
||||
sql select * from tb_where_NULL where c2 = "NULL"
|
||||
if $rows != 0 then
|
||||
return -1
|
||||
|
@ -300,15 +300,17 @@ endw
|
|||
system sh/exec.sh -n dnode1 -s stop -x SIGINT
|
||||
system sh/exec.sh -n dnode1 -s start
|
||||
|
||||
sql_error select * from wh_mt0 where c3 = 'abc' and tbname in ('test_null_filter');
|
||||
sql select * from wh_mt0 where c3 = 'abc' and tbname in ('test_null_filter');
|
||||
|
||||
sql select * from wh_mt0 where c3 = '1' and tbname in ('test_null_filter');
|
||||
if $row != 0 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
sql select * from wh_mt0 where c3 = '1';
|
||||
if $row == 0 then
|
||||
sql select * from wh_mt0 where c3 = 1;
|
||||
print $rows -> 1000
|
||||
print $data00 $data01 $data02
|
||||
if $row != 1000 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
|
@ -336,7 +338,7 @@ sql insert into where_ts values('2021-06-19 16:22:00', 1);
|
|||
sql insert into where_ts values('2021-06-19 16:23:00', 2);
|
||||
sql insert into where_ts values('2021-06-19 16:24:00', 3);
|
||||
sql insert into where_ts values('2021-06-19 16:25:00', 1);
|
||||
sql select * from (select * from where_ts) where ts<'2021-06-19 16:25:00' and ts>'2021-06-19 16:22:00'
|
||||
sql select * from (select * from where_ts) where ts<'2021-06-19 16:25:00' and ts>'2021-06-19 16:22:00' order by ts;
|
||||
if $rows != 2 then
|
||||
return -1
|
||||
endi
|
||||
|
|
|
@ -311,7 +311,7 @@ sql select * from $mt where tgcol2 = 1 -x step52
|
|||
return -1
|
||||
step52:
|
||||
|
||||
sql select * from $mt where tgcol3 = 1
|
||||
sql select * from $mt where tgcol3 < 2
|
||||
print $data01 $data02 $data03
|
||||
if $rows != 1 then
|
||||
return -1
|
||||
|
|
|
@ -97,10 +97,10 @@ if $data23 != TAG then
|
|||
return -1
|
||||
endi
|
||||
|
||||
sql alter table $mt drop tag tgcol2
|
||||
sql alter table $mt drop tag tgcol1 -x step40
|
||||
return -1
|
||||
step40:
|
||||
sql alter table $mt drop tag tgcol2
|
||||
|
||||
print =============== step5
|
||||
$i = 5
|
||||
|
@ -123,11 +123,11 @@ if $data03 != 2 then
|
|||
return -1
|
||||
endi
|
||||
|
||||
sql alter table $mt drop tag tgcol2
|
||||
sql alter table $mt drop tag tgcol1 -x step50
|
||||
return -1
|
||||
step50:
|
||||
sql alter table $mt drop tag tgcol2
|
||||
|
||||
|
||||
print =============== step6
|
||||
$i = 6
|
||||
$mt = $mtPrefix . $i
|
||||
|
@ -186,7 +186,7 @@ endi
|
|||
if $data31 != TINYINT then
|
||||
return -1
|
||||
endi
|
||||
if $data41 != BINARY then
|
||||
if $data41 != VARCHAR then
|
||||
return -1
|
||||
endi
|
||||
if $data22 != 2 then
|
||||
|
@ -405,8 +405,6 @@ sql alter table $mt drop tag tgcol3
|
|||
sql alter table $mt drop tag tgcol4
|
||||
sql alter table $mt drop tag tgcol6
|
||||
|
||||
sleep 3000
|
||||
|
||||
print =============== step2
|
||||
$i = 2
|
||||
$mt = $mtPrefix . $i
|
||||
|
|
Loading…
Reference in New Issue