TDengine集群安装部署(图文结合版)

文章目录


一、简介

服务器配置 数量 4 个

组件 配置描述
CPU 4核
内存 16G
硬盘 500G
操作系统 CentOS Linux release 7.9.2009
网络 内网

TDengine集群安装部署(图文结合版)
一个完整的 TDengine 系统是运行在一到多个物理节点上的,逻辑上,它包含数据节点(dnode)、TDengine 应用驱动(taosc)以及应用(app)。系统中存在一到多个数据节点,这些数据节点组成一个集群(cluster)。应用通过 taosc 的 API 与 TDengine 集群进行互动。下面对每个逻辑单元进行简要介绍。

物理节点(pnode): pnode 是一独立运行、拥有自己的计算、存储和网络能力的计算机,可以是安装有OS的物理机、虚拟机或 Docker 容器。物理节点由其配置的 FQDN (Fully Qualified Domain Name)来标识。TDengine 完全依赖 FQDN 来进行网络通讯,如果不了解 FQDN,请看博文《一篇文章说清楚 TDengine 的 FQDN》

数据节点(dnode): dnode 是 TDengine 服务器侧执行代码 taosd 在物理节点上的一个运行实例,一个工作的系统必须有至少一个数据节点。dnode 包含零到多个逻辑的虚拟节点(vnode),零或者至多一个逻辑的管理节点(mnode)。dnode 在系统中的唯一标识由实例的 End Point (EP)决定。EP 是 dnode 所在物理节点的 FQDN (Fully Qualified Domain Name)和系统所配置的网络端口号(Port)的组合。通过配置不同的端口,一个物理节点(一台物理机、虚拟机或容器)可以运行多个实例,或有多个数据节点。

虚拟节点(vnode): 为更好的支持数据分片、负载均衡,防止数据过热或倾斜,数据节点被虚拟化成多个虚拟节点(vnode,图中 V2, V3, V4等)。每个 vnode 都是一个相对独立的工作单元,是时序数据存储的基本单元,具有独立的运行线程、内存空间与持久化存储的路径。一个 vnode 包含一定数量的表(数据采集点)。当创建一张新表时,系统会检查是否需要创建新的 vnode。一个数据节点上能创建的 vnode 的数量取决于该数据节点所在物理节点的硬件资源。一个 vnode 只属于一个 DB,但一个 DB 可以有多个 vnode。一个 vnode 除存储的时序数据外,也保存有所包含的表的 schema、标签值等。一个虚拟节点由所属的数据节点的EP,以及所属的 VGroup ID 在系统内唯一标识,由管理节点创建并管理。

管理节点(mnode): 一个虚拟的逻辑单元,负责所有数据节点运行状态的监控和维护,以及节点之间的负载均衡(图中 M)。同时,管理节点也负责元数据(包括用户、数据库、表、静态标签等)的存储和管理,因此也称为 Meta Node。TDengine 集群中可配置多个(开源版最多不超过 3 个) mnode,它们自动构建成为一个虚拟管理节点组(图中 M0, M1, M2)。mnode 间采用 master/slave 的机制进行管理,而且采取强一致方式进行数据同步, 任何数据更新操作只能在 Master 上进行。mnode 集群的创建由系统自动完成,无需人工干预。每个 dnode 上至多有一个 mnode,由所属的数据节点的EP来唯一标识。每个 dnode 通过内部消息交互自动获取整个集群中所有 mnode 所在的 dnode 的EP。

虚拟节点组(VGroup): 不同数据节点上的 vnode 可以组成一个虚拟节点组(vnode group)来保证系统的高可靠。虚拟节点组内采取 master/slave 的方式进行管理。写操作只能在 master vnode 上进行,系统采用异步复制的方式将数据同步到 slave vnode,这样确保了一份数据在多个物理节点上有拷贝。一个 vgroup 里虚拟节点个数就是数据的副本数。如果一个 DB 的副本数为 N,系统必须有至少 N 数据节点。副本数在创建DB时通过参数 replica 可以指定,缺省为 1。使用 TDengine 的多副本特性,可以不再需要昂贵的磁盘阵列等存储设备,就可以获得同样的数据高可靠性。虚拟节点组由管理节点创建、管理,并且由管理节点分配一个系统唯一的 ID,VGroup ID。如果两个虚拟节点的 vnode group ID 相同,说明他们属于同一个组,数据互为备份。虚拟节点组里虚拟节点的个数是可以动态改变的,容许只有一个,也就是没有数据复制。VGroup ID 是永远不变的,即使一个虚拟节点组被删除,它的ID也不会被收回重复利用。

TAOSC: taosc 是 TDengine 给应用提供的驱动程序(driver),负责处理应用与集群的接口交互,提供 C/C++ 语言原生接口,内嵌于 JDBC、C#、Python、Go、Node.js 语言连接库里。应用都是通过 taosc 而不是直接连接集群中的数据节点与整个集群进行交互的。这个模块负责获取并缓存元数据;将插入、查询等请求转发到正确的数据节点;在把结果返回给应用时,还需要负责最后一级的聚合、排序、过滤等操作。对于 JDBC、C/C++、C#、Python、Go、Node.js 接口而言,这个模块是在应用所处的物理节点上运行。同时,为支持全分布式的 RESTful 接口,taosc 在 TDengine 集群的每个 dnode 上都有一运行实例。

二、安装步骤

2.1服务端配置工作

2.1.1.查看服务器ip地址 ifconfig

TDengine集群安装部署(图文结合版)
TDengine集群安装部署(图文结合版)
TDengine集群安装部署(图文结合版)

2.1.2.修改hostname

TDengine集群安装部署(图文结合版)
TDengine集群安装部署(图文结合版)
TDengine集群安装部署(图文结合版)

2.1.3.配置hosts文件

TDengine集群安装部署(图文结合版)
TDengine集群安装部署(图文结合版)
taos02服务 与 taos03服务 同样在hosts文件 加入相同配置

2.2.客户端配置工作

2.2.1.不同系统安装客户端

Windows

TDengine集群安装部署(图文结合版)
TDengine集群安装部署(图文结合版)
安装完成后,配置hosts文件,默认在C:\Windows\System32\drivers\etc
TDengine集群安装部署(图文结合版)

测试是否配置成功
TDengine集群安装部署(图文结合版)

Linux

TDengine集群安装部署(图文结合版)
安装完成后,配置hosts文件
默认文件地址 /etc/hosts
TDengine集群安装部署(图文结合版)

2.2.2.修改taos.cfg 配置

Windows

默认文件地址在 C:\TDengine\cfg
TDengine集群安装部署(图文结合版)

Linux

默认文件地址 /etc/taos
TDengine集群安装部署(图文结合版)

2.3.服务端安装工作

2.3.1.开放端口

TDengine集群安装部署(图文结合版)
需要开放TCP/UDP 6030-6042

firewall-cmd --zone=public --add-port=6030-6042/tcp --permanent

firewall-cmd --zone=public --add-port=6030-6042/udp --permanent

命令含义:

–zone #作用域

–add-port=9200/tcp #添加端口,格式为:端口/通讯协议

–permanent #永久生效,没有此参数重启后失效

注意:添加端口后,必须用命令firewall-cmd --reload重新加载一遍才会生效

TDengine集群安装部署(图文结合版)
TDengine集群安装部署(图文结合版)
TDengine集群安装部署(图文结合版)

2.3.2.上传服务端安装包

并解压
TDengine集群安装部署(图文结合版)
解压安装包
TDengine集群安装部署(图文结合版)
进入解压后的安装包,执行install.sh文件进行安装
TDengine集群安装部署(图文结合版)
注意:这时候先不要启动taos服务

2.3.3.服务端修改taos.cfg

默认/etc/taos

服务端需修改firsEp 与fqdn
TDengine集群安装部署(图文结合版)
TDengine集群安装部署(图文结合版)
TDengine集群安装部署(图文结合版)
一定要修改的参数是firstEp和fqdn。在每个数据节点,firstEp需全部配置成一样,但fqdn一定要配置成其所在数据节点的值。其他参数可不做任何修改,除非你很清楚为什么要修改。

加入到集群中的数据节点dnode,涉及集群相关的下表参数必须完全相同,否则不能成功加入到集群中。
TDengine集群安装部署(图文结合版)

2.3.4.启动第一个taos服务

TDengine集群安装部署(图文结合版)

2.3.5.客户端测试连接

TDengine集群安装部署(图文结合版)

2.4.搭建集群

动态加入后续节点

启动taos02服务,并且把taos02加入集群
TDengine集群安装部署(图文结合版)
TDengine集群安装部署(图文结合版)
启动taos03服务,并且把taos03加入集群
TDengine集群安装部署(图文结合版)
TDengine集群安装部署(图文结合版)
则集群部署完成

2.5.扩展

TDengine通过多副本的机制来提供系统的高可用性,包括vnode和mnode的高可用性。

2.5.1.Vnode高可用

TDengine通过多副本的机制来提供系统的高可用性,包括vnode和mnode的高可用性。

vnode的副本数是与DB关联的,一个集群里可以有多个DB,根据运营的需求,每个DB可以配置不同的副本数。创建数据库时,通过参数replica 指定副本数(缺省为1)。如果副本数为1,系统的可靠性无法保证,只要数据所在的节点宕机,就将无法提供服务。集群的节点数必须大于等于副本数,否则创建表时将返回错误"more dnodes are needed"。比如下面的命令将创建副本数为3的数据库demo:

CREATE DATABASE demo replica 3;

一个DB里的数据会被切片分到多个vnode group,vnode group里的vnode数目就是DB的副本数,同一个vnode group里各vnode的数据是完全一致的。为保证高可用性,vnode group里的vnode一定要分布在不同的数据节点dnode里(实际部署时,需要在不同的物理机上),只要一个vgroup里超过半数的vnode处于工作状态,这个vgroup就能正常的对外服务。

一个数据节点dnode里可能有多个DB的数据,因此一个dnode离线时,可能会影响到多个DB。如果一个vnode group里的一半或一半以上的vnode不工作,那么该vnode group就无法对外服务,无法插入或读取数据,这样会影响到它所属的DB的一部分表的读写操作。

因为vnode的引入,无法简单地给出结论:“集群中过半数据节点dnode工作,集群就应该工作”。但是对于简单的情形,很好下结论。比如副本数为3,只有三个dnode,那如果仅有一个节点不工作,整个集群还是可以正常工作的,但如果有两个数据节点不工作,那整个集群就无法正常工作了。

2.5.2.Mnode高可用

TDengine集群是由mnode (taosd的一个模块,管理节点) 负责管理的,为保证mnode的高可用,可以配置多个mnode副本,副本数由系统配置参数numOfMnodes决定,有效范围为1-3。为保证元数据的强一致性,mnode副本之间是通过同步的方式进行数据复制的。

一个集群有多个数据节点dnode,但一个dnode至多运行一个mnode实例。多个dnode情况下,哪个dnode可以作为mnode呢?这是完全由系统根据整个系统资源情况,自动指定的。用户可通过CLI程序taos,在TDengine的console里,执行如下命令:

SHOW MNODES;

来查看mnode列表,该列表将列出mnode所处的dnode的End Point和角色(master, slave, unsynced 或offline)。当集群中第一个数据节点启动时,该数据节点一定会运行一个mnode实例,否则该数据节点dnode无法正常工作,因为一个系统是必须有至少一个mnode的。如果numOfMnodes配置为2,启动第二个dnode时,该dnode也将运行一个mnode实例。

为保证mnode服务的高可用性,numOfMnodes必须设置为2或更大。因为mnode保存的元数据必须是强一致的,如果numOfMnodes大于2,复制参数quorum自动设为2,也就是说,至少要保证有两个副本写入数据成功,才通知客户端应用写入成功。

注意:一个TDengine高可用系统,无论是vnode还是mnode, 都必须配置多个副本。

2.5.3.负载均衡

有三种情况,将触发负载均衡,而且都无需人工干预。

(1)当一个新数据节点添加进集群时,系统将自动触发负载均衡,一些节点上的数据将被自动转移到新数据节点上,无需任何人工干预。

(2)当一个数据节点从集群中移除时,系统将自动把该数据节点上的数据转移到其他数据节点,无需任何人工干预。

(2)如果一个数据节点过热(数据量过大),系统将自动进行负载均衡,将该数据节点的一些vnode自动挪到其他节点。

当上述三种情况发生时,系统将启动各个数据节点的负载计算,从而决定如何挪动。

【提示】负载均衡由参数balance控制,它决定是否启动自动负载均衡。

更多关于集群部署相关知识 http://https://www.taosdata.com/cn/documentation/cluster#prepare

上一篇:三分钟梳理TDengine安装部署的逻辑


下一篇:TDengine 助力曲靖卷烟厂有效提升时序数据存取效率