导读:8月3日,TDengine 发布了 v2.0 版本,这次更新最大的亮点是,我们将分布式集群功能开源。开源后,引起了很大反响,又连续几天在 GitHub 趋势榜排名第一。不少关注TDengine的朋友都发出感叹:你们竟然敢将用户最为刚需的功能开源。我想说,我们不但敢开源集群功能,而且敢负责手把手教会你使用。现将我们安装、管理集群的文档发布出来,整个过程极其之简单,欢迎大家使用。

多个taosd的运行实例可以组成一个集群,以保证TDengine的高可靠运行,并提供水平扩展能力。要了解TDengine 2.0的集群管理,需要对集群的基本概念有所了解,请看TDengine 2.0整体架构一章。而且在安装集群之前,请按照《立即开始》一章安装并体验过单节点功能。

图 1 TDengine架构示意图

集群的每个节点是由End Point来唯一标识的,End Point是由FQDN(Fully Qualified Domain Name)外加Port组成,比如 h1.taosdata.com:6030。一般FQDN就是服务器的hostname,可通过Linux命令hostname -f获取。端口是这个节点对外服务的端口号,缺省是6030,但可以通过taos.cfg里配置参数serverPort进行修改。一个节点可能配置了多个hostname, TDengine会自动获取第一个,但也可以通过taos.cfg里配置参数fqdn进行指定。如果习惯IP地址直接访问,可以将参数fqdn设置为本节点的IP地址。

TDengine的集群管理极其简单,除添加和删除节点需要人工干预之外,其他全部是自动完成,最大程度的降低了运维的工作量。本章对集群管理的操作做详细的描述。

准备工作

第一步:如果搭建集群的节点中,存有之前的测试数据、装过1.X的版本,或者装过其他版本的TDengine,请先将其删除,并清空所有数据,具体步骤请参考博客《TDengine多种安装包的安装和卸载》

第二步:建议关闭防火墙,至少保证端口:6030 - 6042的TCP和UDP端口都是开放的。强烈建议先关闭防火墙,集群搭建完毕之后,再来配置端口;

第三步:在所有节点安装TDengine,且版本必须是一致的,但不要启动taosd

第四步:检查、配置所有节点的FQDN:

  1. 每个节点上执行命令hostname -f,查看和确认所有节点的hostname是不相同的;
  2. 每个节点上执行ping host, 其中host是其他节点的hostname, 看能否ping通其它节点; 如果不能ping通,需要检查网络设置, 或/etc/hosts文件,或DNS的配置。如果无法ping通,是无法组成集群的。
  3. 每个节点的FQDN就是输出的hostname外加端口号,比如h1.taosdata.com:6030

第五步:修改TDengine的配置文件(所有节点的文件/etc/taos/taos.cfg都需要修改)。假设准备启动的第一个节点End Point为 h1.taosdata.com:6030, 那么以下几个参数与集群相关:

// firstEp 是每个节点启动后连接的第一个节点firstEp               h1.taosdata.com:6030// 配置本节点的FQDN,如果本机只有一个hostname, 无需配置fqdn                  h1.taosdata.com// 配置本节点的端口号,缺省是6030serverPort            6030// 副本数为偶数的时候,需要配置,请参考《Arbitrator的使用》的部分arbitrator            ha.taosdata.com:6042

一定要修改的参数是firstEp, 其他参数可不做任何修改,除非你很清楚为什么要修改。

启动第一个节点

按照《立即开始》里的指示,启动第一个节点h1.taosdata.com,然后执行taos, 启动taos shell,从shell里执行命令"show dnodes;",如下所示:

Welcome to the TDengine shell from Linux, Client Version:2.0.0.0Copyright (c) 2017 by TAOS Data, Inc. All rights reserved.taos> show dnodes; id |       end_point    | vnodes | cores | status | role |      create_time        |=====================================================================================  1 |  h1.taos.com:6030  |      0 |     2 |  ready |  any | 2020-07-31 03:49:29.202 |Query OK, 1 row(s) in set (0.006385s)taos>

上述命令里,可以看到这个刚启动的这个节点的End Point是:h1.taos.com:6030

启动后续节点

将后续的节点添加到现有集群,具体有以下几步:

  1. 按照"立即开始“一章的方法在每个节点启动taosd。
  2. 在第一个节点,使用CLI程序taos, 登录进TDengine系统, 执行命令:CREATE DNODE "h2.taos.com:6030"; 将新节点的End Point (准备工作中第四步获知的) 添加进集群的EP列表。"fqdn:port"需要用双引号引起来,否则出错。请注意将示例的“h2.taos.com:6030" 替换为这个新节点的End Point。
  3. 然后执行命令SHOW DNODES;查看新节点是否被成功加入。如果该被加入的节点处于离线状态,请做两个检查查看该节点的taosd是否正常工作,如果没有正常运行,需要先检查为什么查看该节点taosd日志文件taosdlog.0里前面几行日志(一般在/var/log/taos目录),看日志里输出的该节点fqdn以及端口号是否为刚添加的End Point。如果不一致,需要将正确的End Point添加进去。

按照上述步骤可以源源不断的将新的节点加入到集群。

提示:

  • firstEp这个参数仅仅在该节点第一次加入集群时有作用,加入集群后,该节点会保存最新的mnode的End Point列表,不再依赖这两个参数。
  • 两个没有配置firstEp参数的dnode启动后,会独立运行起来。这个时候,无法将其中一个节点加入到另外一个节点,形成集群。无法将两个独立的集群合并成为新的集群

节点管理

添加节点

执行CLI程序taos, 使用root账号登录进系统, 执行:

CREATE DNODE "fqdn:port"; 

将新节点的End Point添加进集群的EP列表。"fqdn:port"需要用双引号引起来,否则出错。一个节点对外服务的fqdn和port可以通过配置文件taos.cfg进行配置,缺省是自动获取。

删除节点

执行CLI程序taos, 使用root账号登录进TDengine系统,执行:

DROP DNODE "fqdn:port";

其中fqdn是被删除的节点的FQDN,port是其对外服务器的端口号

查看节点

执行CLI程序taos,使用root账号登录进TDengine系统,执行:

SHOW DNODES;

它将列出集群中所有的dnode,每个dnode的fqdn:port, 状态(ready, offline等),vnode数目,还未使用的vnode数目等信息。在添加或删除一个节点后,可以使用该命令查看。

查看虚拟节点组

为充分利用多核技术,并提供scalability,数据需要分片处理。因此TDengine会将一个DB的数据切分成多份,存放在多个vnode里。这些vnode可能分布在多个dnode里,这样就实现了水平扩展。一个vnode仅仅属于一个DB,但一个DB可以有多个vnode。vnode的是mnode根据当前系统资源的情况,自动进行分配的,无需任何人工干预。

执行CLI程序taos,使用root账号登录进TDengine系统,执行:

SHOW VGROUPS;

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,那如果仅有一个节点不工作,整个集群还是可以正常工作的,但如果有两个节点不工作,那整个集群就无法正常工作了。

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, 都必须配置多个副本。

负载均衡

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

  • 当一个新节点添加进集群时,系统将自动触发负载均衡,一些节点上的数据将被自动转移到新节点上,无需任何人工干预。
  • 当一个节点从集群中移除时,系统将自动把该节点上的数据转移到其他节点,无需任何人工干预。
  • 如果一个节点过热(数据量过大),系统将自动进行负载均衡,将该节点的一些vnode自动挪到其他节点。

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

节点离线处理

如果一个节点离线,TDengine集群将自动检测到。有如下两种情况:

  • 改节点离线超过一定时间(taos.cfg里配置参数offlineThreshold控制时长),系统将自动把该节点删除,产生系统报警信息,触发负载均衡流程。如果该被删除的节点重现上线时,它将无法加入集群,需要系统管理员重新将其添加进集群才会开始工作。
  • 离线后,在offlineThreshold的时长内重新上线,系统将自动启动数据恢复流程,等数据完全恢复后,该节点将开始正常工作。

注意:如果一个虚拟节点组(包括mnode组)里每个节点都处于离线或unsynced状态,必须等该虚拟节点组里的所有节点都上线、都能交换状态信息后,才能选出Master,该虚拟节点组才能对外提供服务。比如整个集群有3个节点,副本数为3,如果3个节点都宕机,然后2个节点重启,是无法工作的,只有等3个节点都重启成功,才能对外服务。

Arbitrator的使用

如果副本数为偶数,当一个vnode group里一半或超过一半的vnode不工作时,是无法从中选出master的。同理,一半或超过一半的mnode不工作时,是无法选出mnode的master的,因为存在“split brain”问题。为解决这个问题,TDengine引入了arbitrator的概念。Arbitrator模拟一个vnode或mnode在工作,但只简单的负责网络连接,不处理任何数据插入或访问。只要包含arbitrator在内,超过半数的vnode或mnode工作,那么该vnode group或mnode组就可以正常的提供数据插入或查询服务。比如对于副本数为2的情形,如果一个节点A离线,但另外一个节点B正常,而且能连接到arbitrator, 那么节点B就能正常工作。

TDengine安装包里带有一个执行程序tarbitrator, 找任何一台Linux服务器运行它即可。该程序对系统资源几乎没有要求,只需要保证有网络连接即可。该应用的命令行参数-p可以指定其对外服务的端口号,缺省是6042。配置每个taosd实例时,可以在配置文件taos.cfg里将参数arbitrator设置为arbitrator的End Point。如果该参数配置了,当副本数为偶数数,系统将自动连接配置的arbitrator。


点击了解更多,搭建你的TDengine集群吧。

在集群的操作机上执行命令为什么会出现权限被拒绝_如何使用 TDengine 2.0 最新开源的集群功能?相关推荐

  1. 在集群的操作机上执行命令为什么会出现权限被拒绝_进制型IP泛站群的操作方法...

    一直以来,站群都是快速获取排名和网站流量最快捷的方法之一,虽然很多做白帽的SEO人员对此存有偏见,但无论外人怎么看待,不可否认的是泛站群的价值一直都在. 之前我曾在马海祥博客跟分享过一篇<如何设 ...

  2. java jsch_java - 使用JSch在远程计算机上执行命令

    SSH是访问远程计算机,传输数据和执行远程命令的一种简单而安全的方法.除了基础的交互模式外,还有许多依赖于ssh Client/Server架构的工具可以实现自动化执行远程任务.我们可以找到ssh客户 ...

  3. java jsch jar_使用JSch从Java在远程计算机上执行命令

    SSH是任何一种every-day工具Linux系统管理工作.这是访问网络上的远程计算机,传输数据和执行远程命令的一种简单而安全的方法.除了交互模式之外,还有许多工具可以使依赖于现有技术的远程任务实现 ...

  4. php写ssh命令行_php使用ssh2来操作服务器执行命令

    方法一(推荐)private function runSSH($cmdstr) { //服务器信息 $host   = '172.18.0.1'; $user   = 'root'; $passwd  ...

  5. 我写了一个脚本,可在“任意”服务器上执行命令!

    冰河之前维护着上千台服务器组成的服务器集群,如果每次需要在服务器上执行命令的时候,都要手动登录每台服务器进行操作的话,那也太麻烦了.你想想,如果在上千台服务器的集群中,每台服务器中只需要简单的执行一个 ...

  6. PowerShell 远程管理之启用和执行命令

    PowerShell 2.0的远程管理功能很强大,为了方便读者学习这里首先介绍学习环境的设置,便于读者在理解原理的同时有相对形象的体验.在本文中,将会分别介绍了如何启用和禁用powershell的远程 ...

  7. 使用ansible执行命令时出现Failed to connect to the host via ssh错误

    在部署ansible时出现了以下错误: Failed to connect to the host via ssh: Warning: Permanently added '127.0.0.1' (E ...

  8. Linux| |Linux下执行各种命令所需要的权限

    Linux下执行命令所需要的权限 1.进入目录 进入目录需要x(执行)权限 测试方法:创建三个目录dir1,dir2,dir3 使用chmod命令,去掉第1个目录用户的r(读)权限,去掉第2个目录用户 ...

  9. Zookeeper之Linux分布式集群搭建及客户端shell命令操作

    一.准备至少三台Linux服务器及对应的jdk环境 1.服务器及jdk环境准备 服务器:至少三台Linux服务器 JDK环境:三台Linux服务器上都需要安装好jdk环境(jdk环境安装参考我的博客: ...

最新文章

  1. Build SSCLI20 under VS2008 full Document (完全手册)
  2. SQL中变量的赋值-select
  3. Spring boot 启动后执行特定的操作
  4. xshell突然连接不上虚拟机解决办法
  5. 文巾解题 45. 跳跃游戏 II
  6. js获取浏览器活跃页面,切换tab页状态
  7. Love:程序猿的方式~【情人节520—我爱你】~动画加音效 → 那些年最浪漫的表白(帮你得到你的她)
  8. oracle 更新记录语句,Oracle语句自动判断是要更新记录还是要插入记录
  9. Git常用命令——远程操作
  10. kafka 的安装部署
  11. Linux安装Swift开发环境
  12. MySql 手动执行主从备份
  13. python应用系列教程——python使用scapy监听网络数据包、按TCP/IP协议进行解析
  14. 你连 HTTPS 原理都不懂,还讲“中间人攻击”?
  15. Java贪吃蛇大作战
  16. 一篇教你随意下载网易云音乐歌曲的博客!
  17. linux下用impdp导入dmp文件
  18. 为什么没有黑客攻击棋牌游戏
  19. Pytest全栈自动化测试指南-入门
  20. ubuntu22.04 在笔记本上切换核显驱动出现的字体模糊或屏幕模糊现象的解决方法

热门文章

  1. 从营销手段到商业新基建,“以旧换新”还有多少价值等待挖掘?
  2. python编程,外星人飞船
  3. swift python_单从语法角度讲,Swift 完爆 Java Python 和 C#吗?
  4. python基础教程:函数作用域
  5. python调用其他文件的类和函数
  6. python支持的几种并发方式进行简单的总结
  7. php 多维数组按值排序,按子值对php多维数组排序
  8. 用ssh远程登录服务器时,怎么直接以root用户登录?(需要修改配置,如果不想修改,可以先用普通用户登录再su切换到root用户)
  9. 牛客 华为机试(我的代码记录)
  10. python PyQt5如何绘制矩形框?(画框/绘框)