TDengine 高可用——双活方案

在这里插入图片描述

概述

部分用户因为部署环境的特殊性只能部署两台服务器,同时希望实现一定的服务高可用和数据高可靠。本文主要描述基于数据复制和客户端 Failover 两项关键技术的 TDengine 双活系统的产品行为,包括双活系统的架构、配置、运维等。TDengine 双活既可以用于前面所述资源受限的环境,也可用于在两套 TDengine 集群(不限资源)之间的灾备场景。双活是 TDengine Enterprise 特有功能,在 3.3.0.0 版本中第一次发布,建议使用最新版本。

双活系统的定义是:业务系统中有且仅有两台服务器,其上分别部署一套服务,在业务层看来这两台机器和两套服务是一个完整的系统,对其中的细节业务层不需要感知。双活中的两个节点通常被称为 Master-Slave,意为”主从“或”主备“,本文档中可能会出现混用的情况。

TDengine 双活系统的部署架构图如下,其中涉及到三个关键点:

  1. 由 Client Driver 实现对双系统的 Failover,即主节点宕机时的主从切换
  2. 由 taosX 从(当前的)主节点到从节点实现数据复制
  3. 由数据订阅的写接口在写入复制过来的数据时在 WAL 中加入特殊标记,由数据订阅的读接口在读取数据时自动过滤掉带有该特殊标记的数据,避免重复复制形成 infinite loop

注:下图中仅以一个单机版 TDengine 作为示例,但在实际部署中图中的一个 Host 也可以被任意节点数量的 TDengine 集群代替。
在这里插入图片描述

集群配置

双活对 TDengine 集群本身的配置没有任何要求,但对要在双活系统之间同步的数据库的 WAL 保留时长有一定要求,WAL 保留时长越大双活系统的容错率越高;如果备节点宕机时长超过主节点上的 WAL 保留时长,必定会导致备节点上有数据缺失;如果备节点宕机时长虽未超过主节点上的 WAL 保留时长,也有一定概率丢失数据,取决于接近的程度以及数据同步的速度。

客户端配置

目前只有 Java 连接器在 WebSocket 连接模式下支持双活,其配置示例如下

url = "jdbc:TAOS-WS://" + host + ":6041/?user=root&password=taosdata";
Properties properties = new Properties();
properties.setProperty(TSDBDriver.PROPERTY_KEY_SLAVE_CLUSTER_HOST, "192.168.1.11");
properties.setProperty(TSDBDriver.PROPERTY_KEY_SLAVE_CLUSTER_PORT, "6041");
properties.setProperty(TSDBDriver.PROPERTY_KEY_ENABLE_AUTO_RECONNECT, "true");
properties.setProperty(TSDBDriver.PROPERTY_KEY_RECONNECT_INTERVAL_MS, "2000");
properties.setProperty(TSDBDriver.PROPERTY_KEY_RECONNECT_RETRY_COUNT, "3");
connection = DriverManager.getConnection(url, properties);

其中的配置属性及含义如下表

属性名含义
PROPERTY_KEY_SLAVE_CLUSTER_HOST第二节点的主机名或者 ip,默认空
PROPERTY_KEY_SLAVE_CLUSTER_PORT第二节点的端口号,默认空
PROPERTY_KEY_ENABLE_AUTO_RECONNECT是否启用自动重连。仅在使用 WebSocket 连接时生效。true: 启用,false: 不启用。默认为 false。双活场景下请设置为 true
PROPERTY_KEY_RECONNECT_INTERVAL_MS重连的时间间隔,单位毫秒:默认 2000 毫秒,也就是 2 秒;最小值为 0,表示立即重试;最大值不做限制
PROPERTY_KEY_RECONNECT_RETRY_COUNT每节点最多重试次数:默认值为 3;最小值为 0,表示不进行重试;最大值不做限制

约束条件

  1. 应用程序不能使用订阅接口,如果配置了双活参数会导致创建消费者失败
  2. 不建议应用程序使用参数绑定的写入和查询方式,如果使用应用需要自己解决连接切换后的相关对象失效问题
  3. 在双活场景下,不建议用户应用程序显示调用 use database,应该在连接参数中指定 database
  4. 双活的两端集群必须同构(即数据库的命名和所有配置参数以及用户名密码和权限设置等完全相同)
  5. 只支持 WebSocket 连接模式

运维命令

TDengine 双活系统提供了一些运维工具能够自动化 taosX 的配置、一键启动、重启和停止(单机环境上的)所有双活组件。

启动双活任务

taosx replica start

该命令用于启动双活中的数据复制任务,其所指定的两台主机上的 taosd 和 taosX 均为在线状态。

  1. 方法一
taosx replica start -f source_endpoint -t sink_endpoint [database...] 

在本机器所在的 taosx 服务中建立从 source_endpoint 到 sink_endpoint 的同步任务。运行该命令成功后,将打印 replica ID 到控制台(后续记为 id)。
其中输入参数 source_endpoint 和 sink_endpoiint 为必须,形如 td2:6030,示例如下

taosx replica start -f td1:6030 -t td2:6030 

该示例命令会自动创建除 information_schema、performance_schema、log、audit 库之外的同步任务,并持续监听新增的数据库,当 td1 和 td2 中新增同名数据库时可自动启动新增数据库的数据复制任务。需要说明的是:

  • 可以使用 http://td2:6041 指定该 endpoint 使用 websocket 接口(默认是原生接口)。
  • 可以使用 --new-database-checking-interval <SECONDS> 指定新增数据库的检查间隔,默认为 30 分钟。
  • 可以使用 --no-new-databases 禁用监听行为。
  • 也可以指定数据库同步:taosx replica start -f td1:6030 -t td2:6030 db1 仅创建指定的数据库同步任务。此时相当于配置了 --no-new-databases,不会开启新增数据库自动同步。
  1. 方法二
taosx replica start -i id [database...]

使用上面已经创建的 Replica ID (id) 以在该同步任务中增加其它数据库。

注意:

  1. 多次使用该命令,不会创建重复任务,仅将所指定的数据库增加到相应任务中。
  2. replica id 在一个 taosX 实例内是全局唯一的,与 source/sink 的组合无关
  3. 为便于记忆,replica id 为一个随机常用单词,系统自动将 source/sink 组合对应到一个词库中取得一个唯一可用单词。

查看任务状态

taosx replica status [id...]

返回当前机器上创建的双活同步任务列表和状态。可以指定一个或多个 replica id 获取其任务列表和状态。输出示例如下:

+---------+----------+----------+----------+------+-------------+----------------+
| replica | task | source   | sink     | database | status      | note           |
+---------+----------+----------+----------+------+-------------+----------------+
| a       | 2    | td1:6030 | td2:6030 | opc      | running     |                |
| a       | 3    | td2:6030 | td2:6030 | test     | interrupted | Error reason |

停止双活任务

taosx replica stop id [db...]

该命令作用如下:

  1. 停止指定 Replica ID 下所有或指定数据库的双副本同步任务。
  2. 使用 taosx replica stop id1 db1 表示停止 id1 replica 下 db1 的同步任务。
  3. --no-new-databases 选项启用时,不停止新增数据库监听任务,仅停止当前同步中的数据库。

重启双活任务

taosx replica restart id [db...]

该命令作用如下:

  1. 重启指定 Replica ID 下所有或指定数据库的双副本同步任务。
  2. 使用 taosx replica start id1 db1 仅重启指定数据库 db1 的同步任务。

查看同步进度

taosx replica diff id [db....]

该命令能够输出当前双副本同步任务中订阅的 Offset 与最新 WAL 的差值(不代表行数),例如:

+---------+----------+----------+----------+-----------+---------+---------+------+
| replica | database | source   | sink     | vgroup_id | current | latest  | diff |
+---------+----------+----------+----------+-----------+---------+---------+------+
| a       | opc      | td1:6030 | td2:6030 | 2         | 17600   | 17600   | 0    |
| a       | opc      | td2:6030 | td2:6030 | 3         | 17600   | 17600   | 0    |

删除双活任务

taosx replica remove id [--force]

删除当前所有双活同步任务。正常情况下要想删除同步任务,需要先 stop 该任务;但当 --force 启用时,会强制停止并清除任务。

--no-new-databases 选项启用时,不会删除新增数据库同步任务,仅删除当前数据库的同步任务。当 taosx 重启后,如果删除的数据库任务对应的数据库仍然存在,则会继续创建同步任务;不重启 taosx 或者不更新双活监听任务时,也不会再新建这些数据库的同步任务。

更新双活新增数据库检查间隔

taosx replica update id --new-database-checking-interval <SECONDS>

更新双活新增数据库的检查间隔,单位为秒。

推荐使用步骤

  1. 假定在机器 A 上运行,需要首先使用 taosx replica start 来配置 taosX,其输入参数是待同步的源端和目标端服务器地址,在完成配置后会自动启动同步服务和任务。此处假定 taosx 服务使用标准端口,同步任务使用原生连接。
  2. 在机器 B 上的步骤相同
  3. 在完成对两台机器的服务启动后,双活系统即可提供服务
  4. 在已经完成配置后,如果想要再次启动双活系统,请使用 restart 子命

异常情况

如果宕机恢复时间超出了 WAL 的保存时长,可能会出现丢数据的情况。此时双活系统中自带的 taosX 服务的自动数据同步无法处理。需要人工判断出哪些数据丢失,然后启动额外的 taosX 任务来复制丢失的数据。

访问官网

更多内容欢迎访问 TDengine 官网

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.pswp.cn/diannao/84251.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

与 JetBrains 官方沟通记录(PyCharm 相关问题反馈)

#工作记录 沟通记录&#xff1a; Subject: Feedback on Terminal and Environment Activation Issues in PyCharm : PY-81233 沟通进度&#xff1a; 【笔记】记一次PyCharm的问题反馈_the polyglot context is using an implementation th-CSDN博客 【笔记】与PyCharm官方沟通…

前端实战:用 JavaScript 模拟文件选择器,同步实现图片预览与 Base64 转换

代码 function 仙盟插件_通用_图片_上传(人间通道id,检验关卡img,仙界指引id){const 人间通道 document.getElementById(人间通道id);const 检验关卡 document.getElementById(检验关卡img);const 仙界指引 document.getElementById(仙界指引id);人间通道.addEventListener(…

数据库设计文档撰写攻略

数据库设计文档撰写攻略 一、数据库设计文档的核心价值二、数据库设计文档的核心框架与内容详解2.1 文档基础信息2.2 需求分析与设计原则2.2.1 业务需求概述2.2.2 设计原则 2.3 数据模型设计2.3.1 概念模型&#xff08;ER 图&#xff09;2.3.2 逻辑模型&#xff08;表结构设计&…

3D个人简历网站 7.联系我

3D个人简历网站 7.联系我 修改Contact.jsx // 从 react 库导入 useRef 和 useState hooks import { useRef, useState } from "react";/*** Contact 组件&#xff0c;用于展示联系表单&#xff0c;处理用户表单输入和提交。* returns {JSX.Element} 包含联系表单的 …

AI大模型从0到1记录学习numpy pandas day25

第 3 章 Pandas 3.1 什么是Pandas Pandas 是一个开源的数据分析和数据处理库&#xff0c;它是基于 Python 编程语言的。 Pandas 提供了易于使用的数据结构和数据分析工具&#xff0c;特别适用于处理结构化数据&#xff0c;如表格型数据&#xff08;类似于Excel表格&#xff09;…

一些可以优化JavaScript性能的工具或库汇总

在 JavaScript 性能优化方面,有许多实用的工具和库可以帮助你分析、监控和提升代码性能。以下是一些常用的工具和库分类整理: 一、性能分析工具 这些工具用于诊断性能瓶颈,定位问题代码。 Chrome DevTools Performance 面板:分析运行时性能,记录函数执行时间、内存使用、…

Linux | tmux | 无法复制粘贴

问题&#xff1a;在Linux中使用tmux时&#xff0c;总是没法使用复制粘贴功能&#xff1b; 解决: 如果希望直接用鼠标选择并复制&#xff08;类似普通终端&#xff09;&#xff0c;可以&#xff1a; 在 ~/.tmux.conf 中添加&#xff1a;sh set -g mouse on;重新加载 tmux 配置…

行贿罪案件(公安侦查阶段)询问笔录发问提纲

一、基本情况核实 与行贿对象&#xff08;受贿人&#xff09;的关系&#xff1f;何时通过何种方式认识&#xff1f;日常交往频率及主要内容&#xff1f; 是否具备国家工作人员身份或其他特定主体资格&#xff1f;是否属于被追诉单位的直接责任人员&#xff1f; 二、行贿动机与…

活到老学到老-Spring参数校验注解Validated /Valid

通过 Validated 和 Valid可以对请求的进行参数校验。 1.核心对比&#xff1a; 特性Valid (JSR-303)Validated (Spring)来源Java标准规范Spring框架扩展分组校验不支持支持&#xff08;通过groups属性&#xff09;嵌套路径自动处理级联校验需配合Valid生效应用范围方法参数、属…

【笔记】JetBrains 数据迁移与符号链接操作

数据迁移与符号链接操作 一、备份原始数据 使用 robocopy 命令备份 C 盘中的源文件夹&#xff0c;确保原始数据完整备份。 robocopy "C:\Users\love\AppData\Local\JetBrains" "E:\Downloads\Other\JetBrains" /E确保备份路径足够存储空间。 二、复制文…

使用 Terraform 创建 Azure Databricks 工作区

使用 Terraform 创建 Azure Databricks Terraform 是一种基础设施即代码(IaC)工具,允许用户通过声明式配置文件来管理和部署云资源。Azure Databricks 是一个基于 Apache Spark 的分析平台,专为数据工程和数据科学设计。通过 Terraform,可以自动化 Azure Databricks 的创…

【zookeeper】--部署3.6.3

文章目录 下载解压创建data和logs配置文件1)创建目录并且编辑 zoo.cfg2)接下来将 node01 的 ZooKeeper 所有文件拷贝至 node02 和 node03。推荐从 node02 和 node03 拷贝4&#xff09;最后 vim /etc/profile 配置环境变量&#xff0c;环境搭建结束。配完环境变量后 source /etc…

RxJS 核心操作符详细用法示例

1. Observable 详细用法 Observable 是 RxJS 的核心概念&#xff0c;代表一个可观察的数据流。 创建和订阅 Observable import { Observable } from "rxjs";// 1. 创建Observable const myObservable new Observable(subscriber > {// 发出三个值subscriber.n…

QGrphicsScen画布网格和QGrphicsItem对齐到网格

#include <QGraphicsScene> #include <QPainter> #include <QWheelEvent> #include <QGraphicsView> class MyGraphicsView : public QGraphicsView { public:MyGraphicsView(QGraphicsScene* scene) : QGraphicsView(scene){}protected:// 重写滚轮事…

深入解析自然语言处理中的语言转换方法

在数字化浪潮席卷全球的今天&#xff0c;自然语言处理&#xff08;Natural Language Processing&#xff0c;NLP&#xff09;作为人工智能领域的核心技术之一&#xff0c;正深刻地改变着我们与机器交互的方式。其中&#xff0c;语言转换方法更是 NLP 的关键组成部分&#xff0c…

VRRP虚拟路由器协议的基本概述

目录 vrrp是什么&#xff1f; VRRP的一些概念与专有名词 VRRP的Master选举规则&#xff1a; 尾声 vrrp是什么&#xff1f; vrrp全名virtual router redundance protocol&#xff0c;虚拟路由器冗余协议 VRRP的一些概念与专有名词 1&#xff09;VRRP设备&#xff1a;运行VRRP…

数据结构 -- 交换排序(冒泡排序和快速排序)

冒泡排序 基于“交换”的排序&#xff1a;根据序列中两个元素关键字的比较结果来对换这两个记录在序列中的位置 //交换 void swap(int &a,int &b){int temp a;a b;b temp; }//冒泡排序 void BubbleSort(int A[],int n){for(int i0;i<n-1;i){bool flag false; …

多模态AI终极形态?GPT-5与Stable Diffusion 3的融合实验报告

多模态AI终极形态&#xff1f;GPT-5与Stable Diffusion 3的融合实验报告 系统化学习人工智能网站&#xff08;收藏&#xff09;&#xff1a;https://www.captainbed.cn/flu 文章目录 多模态AI终极形态&#xff1f;GPT-5与Stable Diffusion 3的融合实验报告摘要引言技术架构对…

ajax中get和post的区别,datatype返回的数据类型有哪些?

GET 请求 和 POST 请求 是 HTTP 协议中常用的两种请求方法&#xff0c;它们主要的区别在于&#xff1a; GET 请求&#xff1a; 数据传输方式&#xff1a;数据通过 URL 传递&#xff0c;通常是附加在 URL 后面的查询字符串中&#xff0c;例如 https://example.com/page?nameJoh…

101 alpha_59

(0 - (1 * (rank((sum(returns, 10) / sum(sum(returns, 2), 3))) * rank((returns * cap))))) 0 - (1 * A * B) A rank((sum(returns, 10) / sum(sum(returns, 2), 3)))B rank((returns * cap)) sum(returns, 10)&#xff1a;计算过去 10 期收益率的总和sum(returns, 2)&…