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
繁體地址,請注明出處:http://hk.pswp.cn/diannao/84251.shtml
英文地址,請注明出處:http://en.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)&…