掘金 后端 ( ) • 2024-03-22 16:59

前言

因为是集群,所以使用虚拟机创建了两个虚拟服务器,系统使用的是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的数据。注意两个独立的集群是无法合并为一个新的集群的。 image.png

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只要访问集群任意节点,就可以访问整个集群。 image.png

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实现集群寻址。

物理节点 节点IP hostname h1 192.168.174.131 h1.taosdata.com h2 192.168.174.130 h2.taosdata.com

五.搭建过程

1.检查环境

  • 清理环境 如果搭建集群的物理节点中,存有之前的测试数据,或者装过其他版本的 TDengine,请先将其删除,并清空所有数据。可执行如下命令:
rmtaos

rm -rf /var/log/taos 
rm -rf /etc/taos
rm -rf /var/lib/taos/
  • 关闭防火墙,开启对应的端口 关闭所有物理节点的防火墙,或者至少保证端口:6030-6042的TCP和UDP端口都是开放的

  • 服务器的时钟同步 先安装ntpntpdate

yum -y install ntp ntpdate

同步服务器时钟:

ntpdate cn.pool.ntp.org

如下图,则代表同步成功: image.png

2.配置节点的FQDN解析

规划集群所有物理节点的FQDN,将规划好的FQDN分别添加到每个物理节点的/etc/hostname;修改每个物理节点的/etc/hosts,将所有集群物理节点的IP与FQDN的对应添加好。

配置h1节点

cat /etc/hostname

image.png

cat /etc/hosts

image.png

配置h2节点

cat /etc/hostname

image.png

cat /etc/hosts

image.png

重启系统

  • 在h1节点ping h2节点,看到fqdn解析成功。
ping h2.taosdata.com -c3

image.png

  • 在h2节点ping h1节点,解析成功。
ping h1.taosdata.com -c3

image.png

  • windows客户端,首先配置hosts,在以下路径打开hosts文件 image.png

  • 添加h1、h2节点的fqdn解析 image.png

  • 配置好以后,在终端ping h1、h2,解析成功 image.png

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

image.png

安装完成后先不要启动服务

  • h2安装TDengine Server
tar -zxvf TDengine-server-3.2.3.0-Linux-x64.tar.gz

cd TDengine-server-3.2.3.0

./install.sh

image.png

4.TDengine的配置

在所有的数据节点,firstEp需全部配置成一样的,但fqdn配置为每个数据节点本地的值。firstEp 是每个数据节点首次启动后连接的第一个数据节点。

  • 配置h1节点
cd /etc/taos

vi taos.cfg

在taos.cfg中配置h1的参数,这里我们让h1作为第一个启动节点,所以firstEP配置为自己的。 image.png

  • 启动taos
systemctl start taosd

systemctl status taosd

image.png

  • 进入taos命令行
taos

image.png

  • 配置h2的参数,firstEP要设置为h1的fqdn image.png
  • 添加后续节点
create dnode "h2.taosdata.com:6030";

image.png

注意:直接在h1节点删除h2节点,会导致h2节点的tdengine服务运行失败,如下图: image.png 解决办法是,删除tdengine的运行数据,重新启动

rm -rf /var/lib/taos/*
systemctl start taosd
systemctl status taosd

image.png

再去主节点查看新添加的节点的信息,发现h2节点已经处于ready状态 image.png

注意:运行h2节点的tdengine服务时,如果h1没放开6030-6042防火墙端口,会导致taos无法连接到命令行工具

六.集群管理与数据操作

  • 在h1登录h1节点
taos -h h1.taosdata.com
  • 在h2登录h1节点
taos -h h2.taosdata.com
  • 删除节点
drop dnode 节点id;