前言
因为是集群,所以使用虚拟机创建了两个虚拟服务器,系统使用的是centos7。没用centos8,是因为服务器时钟同步会出问题。
集群相关概念介绍
1.什么是FQDN
FQDN(fully qualified domain name,完全限定域名)是internet上特定计算机或主机的完整域名。FQDN由两部分组成:主机名和域名。集群的每个节点是由End Point来唯一标识的,End Point是由FQDN外加Port组成,比如 h1.taosdata.com:6030。这样当IP发生变化的时候,我们依然可以使用FQDN来动态找到节点,不需要更改集群的任何配置。 当然如果本地配置了DNS服务器,就不用配置FQDN了。
2.新加入集群的dnode,配置项需要注意什么?
加入到集群中的数据节点dnode,涉及集群相关的下表11项参数必须完全相同。新节点要加入集群前,需先清理/var/lib/taos
的数据。注意两个独立的集群是无法合并为一个新的集群的。
3.什么是dnode、vnode、vgroup、Mnode?
-
dnode:代表一个tdengine实例,一个物理节点可以创建一个或多个dnode,一般只创建一个。通过将dnode进行虚拟化拆分为vnode和Mnode
-
vnode:负责存储实际数据,一个dnode中有多个vnode,可以设置副本数 -vgroup: 虚拟节点组,实现副本的管理。一个vgroup可以包含多个vnode。同一个vgroup组当中的vnode的数据是实时同步的。
-
Mnode:TDengine集群是由Mnode (taosd的一个模块,管理节点) 负责管理的,一个系统是必须有至少一个Mnode的,但可以有多个副本数。
APP通过taosc只要访问集群任意节点,就可以访问整个集群。
4.vnode的高可用
TDengine通过多副本的机制来提供系统的高可用性。vnode的副本数是与DB关联的,一个集群里可以有多个DB。创建数据库时,通过参数replica 指定副本数(默认为1)。replica大于等于2,才具有高可用,且副本数不能超出节点的个数。
5.Mnode的高可用
Mnode副本数由系统配置参数numOfMnodes
决定,有效范围为1-3
。为保证元数据的强一致性,Mnode副本之间是通过同步的方式进行数据复制的。
当集群中第一个数据节点启动时,该数据节点一定会运行一个Mnode实例,否则该数据节点dnode无法正常工作。如果numOfMnodes
配置为2,启动第二个dnode时,该dnode也将运行一个Mnode实例。为保证Mnode服务的高可用性,numOfMnodes必须设置为2或更大。
注意:
一个tdengine高可用系统,无论是vnode还是Mnode, 都必须配置多个副本。目前官方推荐的配置方式为双副本加Arbitrator
,这样可以提升系统的可用性。
6.负载均衡
有三种情况,将触发负载均衡,而且都无需人工干预。
- 当一个新数据节点添加进集群时,系统将自动触发负载均衡,一些节点上的数据将被自动转移到新数据节点上,无需任何人工干预。
- 当一个数据节点从集群中移除时,系统将自动把该数据节点上的数据转移到其他数据节点,无需任何人工干预。
- 如果一个数据节点过热(数据量过大),系统将自动进行负载均衡,将该数据节点的一些vnode自动挪到其他节点。
7.Arbitrator
副本数为偶数时,比如当一个 vnode group 里一半或超过一半的 vnode 不工作时,是无法从中选出 master 的。为了解决这个问题引入了arb,可以防止split brain
情形。
arb的原理是模拟一个 vnode 或 Mnode 在工作,但只简单的负责网络连接,不处理任何数据插入或访问。只要包含 Arbitrator 在内,超过半数的 vnode 或 Mnode 工作,那么该 vnode group 或 Mnode 组就可以正常的提供数据插入或查询服务。比如对于副本数为 2 的情形,如果一个节点 A 离线,但另外一个节点 B 正常,而且能连接到 Arbitrator,那么节点 B 就能正常工作。
三.规划物理节点
这里我用两台机器做数据的采集和存储,用FQDN
(Fully Qualified Domain Name,完全限定域名)来进行节点之间的通信。应用端无需配置集群节点IP/FQDN地址,而仅配置firstEP
实现集群寻址。
五.搭建过程
1.检查环境
- 清理环境 如果搭建集群的物理节点中,存有之前的测试数据,或者装过其他版本的 TDengine,请先将其删除,并清空所有数据。可执行如下命令:
rmtaos
rm -rf /var/log/taos
rm -rf /etc/taos
rm -rf /var/lib/taos/
-
关闭防火墙,开启对应的端口 关闭所有物理节点的防火墙,或者至少保证端口:
6030-6042
的TCP和UDP端口都是开放的 -
服务器的时钟同步 先安装
ntp
、ntpdate
:
yum -y install ntp ntpdate
同步服务器时钟:
ntpdate cn.pool.ntp.org
如下图,则代表同步成功:
2.配置节点的FQDN解析
规划集群所有物理节点的FQDN,将规划好的FQDN分别添加到每个物理节点的/etc/hostname
;修改每个物理节点的/etc/hosts
,将所有集群物理节点的IP与FQDN的对应添加好。
配置h1节点
cat /etc/hostname
cat /etc/hosts
配置h2节点
cat /etc/hostname
cat /etc/hosts
重启系统
- 在h1节点ping h2节点,看到fqdn解析成功。
ping h2.taosdata.com -c3
- 在h2节点ping h1节点,解析成功。
ping h1.taosdata.com -c3
-
在windows客户端,首先配置hosts,在以下路径打开hosts文件
-
添加h1、h2节点的fqdn解析
-
配置好以后,在终端ping h1、h2,解析成功
3.安装TDengine
在h1、h2两个节点安装TDengine Server,且版本必须是一致的。TDengine版本为TDengine-server-3.2.3.0-Linux-x64.tar.gz
,下载并存放到服务的/tmp
目录下,解压并安装。安装时,提示输入是否要加入一个已经存在的 TDengine 集群时,第一个物理节点直接回车创建新集群,后续物理节点则输入该集群任何一个在线的物理节点的 FQDN:端口号(默认 6030)。
- h1安装TDengine Server
tar -zxvf TDengine-server-3.2.3.0-Linux-x64.tar.gz
cd TDengine-server-3.2.3.0
./install.sh
安装完成后先不要启动服务
- h2安装TDengine Server
tar -zxvf TDengine-server-3.2.3.0-Linux-x64.tar.gz
cd TDengine-server-3.2.3.0
./install.sh
4.TDengine的配置
在所有的数据节点,firstEp需全部配置成一样的,但fqdn配置为每个数据节点本地的值。firstEp 是每个数据节点首次启动后连接的第一个数据节点。
- 配置h1节点
cd /etc/taos
vi taos.cfg
在taos.cfg中配置h1的参数,这里我们让h1作为第一个启动节点,所以firstEP配置为自己的。
- 启动taos
systemctl start taosd
systemctl status taosd
- 进入taos命令行
taos
- 配置h2的参数,firstEP要设置为h1的fqdn
- 添加后续节点
create dnode "h2.taosdata.com:6030";
注意:直接在h1节点删除h2节点,会导致h2节点的tdengine服务运行失败,如下图: 解决办法是,删除tdengine的运行数据,重新启动
rm -rf /var/lib/taos/* systemctl start taosd systemctl status taosd
再去主节点查看新添加的节点的信息,发现h2节点已经处于ready
状态
注意:运行h2节点的tdengine服务时,如果h1没放开6030-6042防火墙端口,会导致taos无法连接到命令行工具
六.集群管理与数据操作
- 在h1登录h1节点
taos -h h1.taosdata.com
- 在h2登录h1节点
taos -h h2.taosdata.com
- 删除节点
drop dnode 节点id;