主頁 > 資料庫 > CloudCanal對Online DDL 工具 GH-OST 和 PT-OSC 的支持

CloudCanal對Online DDL 工具 GH-OST 和 PT-OSC 的支持

2022-12-31 07:07:15 資料庫

簡介

CloudCanal 實作了對 Online DDL 工具如 GH-OST 和 PT-OSC 的支持,保證了對端實時同步源端的 Online DDL 操作,

本文以 MySQL -> MySQL 同步鏈路使用 GH-OST 為例,介紹 CloudCanal 是如何支持實時同步 GH-OST 產生的 DDL 的,

Online DDL 技術背景

市面上常用的兩款MySQL Online DDL 工具分別是 GH-OST 和 PT-OSC,CloudCanal 對他們都做了兼容處理使得用戶可以實時同步 Online DDL 工具產生的 DDL ,下面簡單介紹下他們的作業流程,以便于讀者理解后續章節的內容,

Online DDL 工具 PT-OSC 原理

PT-OSC 是較為常用的 Online DDL 工具,通過觸發器來同步增量資料,相較于 MySQL 原生的 Online DDL 性能得到了極大的提高,原理如下:

  • 對源表進行檢查
  • 創建一個與源表(origin)結構一致的空表,命名為 _origin_new
  • 根據alter引數修改新表的表結構
  • 在源表中創建三個觸發器:Delete / Update / Insert,將源表中的增刪改陳述句同步執行到新表中,同時將源表中的資料以資料塊的形式 copy 到新表
  • 將源表(origin)rename為 _origin_old,將 _origin_new rename 為 origin,然后洗掉舊表(可選)
  • 洗掉觸發器

總結:PT-OSC 是通過創建臨時表,并用觸發器將增量資料同步到新表,通過當前讀和事務來實作增量與全量的有序,不會阻塞讀寫操作,但運行程序中出現例外,無法從上一個位置繼續進行,需要從頭開始,

Online DDL 工具 GH-OST 原理

GH-OST 也是一款常用的 Online DDL 工具,采用讀取 binlog 日志的方式來同步增量資料,原理如下:

  • 對源表(origin)進行檢查
  • 在主/從節點中添加binlog日志監聽
  • 創建日志記錄表(_origin_ghc)和與源表結構一致的影子表(_origin_gho)
  • 根據alter引數修改影子表的表結構
  • 全量拷貝源表資料同時拷貝源表增量資料到影子表中,并記錄日志到日志記錄表中
  • 洗掉日志記錄表,將源表改名為 _origin_del, 將影子表改名為 origin,_origin_del 可選洗掉

總結: GH-OST 的性能與 PT-OSC 相近,相較于PT-OSC 的優點就在于其是不使用觸發器的,只異步讀取二進制日志,因此修改表定義的負載和正常的業務負載解耦開了,它不需要考慮被修改的表上的并發操作和競爭等,并且相較于 PT-OSC 的中斷從頭開始,GH-OST 可以從心跳日志中恢復到指定位置,

CloudCanal 技術點

前文中對 Online DDL 工具的原理中我們知道,無論采用哪種 Online DDL 工具,源端都會產生一些臨時表的創建和資料寫入,如果不做任何兼容處理,這會影響正常的遷移同步鏈路,

因此為了支持 GH-OST 和 PT-OSC 工具的使用,CloudCanal 在 MySQL 源端做了大量優化,完美的適配并優化了 GH-OST 和 PT-OSC 的 Online DDL 能力

同步臨時表資料

GH-OST 和 PT-OSC 工具都有一個共同的特點,其原理都是采用臨時表的方式來保證 DDL 與 DML 的并發操作,

CloudCanal 默認的表訂閱模式是只訂閱原表,不訂閱與原表相關的臨時表(訂閱表即同步該表的 DDL 與 DML 陳述句),而 CloudCanal 為了滿足對 Online DDL 工具的支持,在源資料端配置上新增了 extraDDL 引數來實作對臨時表的訂閱,

  • extraDDL引數
    • 可選引數:NONE / GHOST / PT
    • 作用:選擇 NONE 則不訂閱任何臨時表,選擇 GHOST / PT 則訂閱相應的默認臨時表

CloudCanal 針對臨時表訂閱采用的是兩種模式:自動訂閱臨時表模式和自動同步元資料模式

  • 自動訂閱臨時表:CloudCanal 會自動根據 extraDDL 引數將默認的臨時表加入到訂閱表集合中,隨后讀取binlog日志時將不會過濾掉臨時表的所有變更事件,保證了對端資料源表結構與資料的最終一致性
  • 自動同步元資料:CloudCanal 會自動過濾臨時表,在讀取binlog日志時不會執行 Online DDL 的操作,在 Online DDL 執行完畢后發送最新的表結構,期間的 DML 陳述句也會同步發送到對端,保證對端資料源表結構與資料的最終一致性

由于各資料源對同步資料的消費并不相同,如訊息佇列只需要決議 Online DDL 后的表結構即可,無需訂閱臨時表,因此我們需要根據對端資料源的消費模式做出不同的處理,

DDL 決議與轉換

不同資料源的 DDL 陳述句會有所差異,CloudCanal 對不同資料源 DDL 陳述句的決議和轉換做了大量的優化,

  1. 決議:將 DDL 陳述句決議為操作型別,如 CREATE ,DROP,ALTER 等
  2. 拆分過濾:若 DDL 陳述句不為單條操作,則拆分為多條 DDL 陳述句,根據訂閱表集合和binlog位點記錄過濾重復執行的 DDL 陳述句與去除無需同步的陳述句后,重新合成新的 DDL 陳述句
  3. 轉換:將過濾好的 DDL 陳述句轉換為對端資料源的方言

下圖演示了CloudCanal對DDL陳述句的一些處理:

容錯機制

當 CloudCanal 在同步 Online DDL 時,任務有可能在兩個層面上被中斷:Online DDL 工具層面和 CloudCanal任務層面

  • Online DDL 工具中斷:由于 PT-OSC 和 GH-OST 的原理不同,Online DDL 程序中斷的恢復方案也有所不同

    • PT-OSC:Online DDL 程序中出現例外中斷,重新執行 Online DDL 操作會丟棄之前的所有操作,從頭開始再次執行
    • GH-OST:Online DDL 程序中出現例外中斷,重新執行 Online DDL 操作會讀取ghc日志心跳表,從日志中的未完成位點開始繼續執行,在此程序中,CloudCanal只需讀取binlog日志,照常執行 Online DDL 的所有操作即可保證資料的最終一致性
  • CloudCanal任務中斷:由于 CloudCanal 良好的異步消費特性,CloudCanal的任務中斷與 Online DDL 的執行并不相關,當 CloudCanal 任務中斷后,重啟任務會根據位點記錄繼續執行binlog日志中的事件,保證了資料的最終一致性,

使用示例

前置條件

  • 安裝 GH-OST
  • 登入 CloudCanal SaaS版,使用參見 快速上手檔案
  • 準備一個 MySQL 資料庫,對端資料庫(以 MySQL -> MySQL 為例)
CREATE TABLE `ghost_test`.`abc` (
  `id` int NOT NULL,
  `name` varchar(30) DEFAULT NULL,
  `cdata` datetime DEFAULT NULL,
  `udata` datetime DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3;
  • 登錄 CloudCanal 平臺 ,添加源端與目標端資料源

任務創建

  • 任務管理 -> 任務創建,
  • 測驗連接并選擇 目標 資料庫,
  • 選擇增量同步任務和需要訂閱的表與欄位,并創建任務
  • 增量任務中,功能串列 -> 引數修改 -> 源資料源配置 -> 引數 extraDDL 設定為 GHOST

創建并且啟動任務,當任務正常執行到增量階段時,此時我們可以利用資料生成工具和Online DDL工具對源端資料庫觸發一些增量DML變更和DDL變更,然后查看CloudCanal是否能正常實時同步這些DML和DDL事件,

使用 Online DDL 工具修改表結構

  • 首先使用資料生成工具實時隨機生成資料,增刪改比例為(4:4:3)

  • 在大量寫入資料的同時,使用 GH-OST 工具執行 DDL 陳述句:ALTER TABLE ADD COLUMN aaa VARCHAR(30) NOT NULL AFTER id,在我們的測驗例子中,有 DML 陳述句的同時使用 GH-OST 執行 DDL 陳述句,源端總計寫入14147 條資料和1條DDL,
[root@zjx local] ./gh-ost --debug --user="{資料庫用戶名}" --password="{資料庫密碼}" --host="{資料庫主機IP}" --port="{資料庫埠號}" --database="ghost_test" --table="abc" --initially-drop-ghost-table --initially-drop-old-table --allow-on-master --alter="ADD COLUMN aaa varchar(30) NOT NULL AFTER id" --execute

確認同步結果

CloudCanal會自動完成源端實時DML和DDL事件的同步,在執行完源端事件寫入之后,我們確認下同步結果,

  • 更改后的源對端 表結構一致


  • 源對端進行資料校驗 資料一致

總結:由上可知,在 CloudCanal 中使用 GH-OST 工具執行 Online DDL 指令,源表完成表結構修改后,CloudCanal 將源表的表結構成功同步到了目標端資料表中,

常見問題

CloudCanal 支持的同步鏈路

目前 CloudCanal 支持使用 Online DDL 工具的鏈路為:

  • MySQL -> MySQL
  • MySQL -> PostgreSQL
  • MySQL -> Greenplum
  • MySQL -> Kafka
  • MySQL -> RocketMQ
  • MySQL -> RabbitMQ

不支持同步的 DDL 陳述句

使用 Online DDL 工具執行的 DDL 陳述句中不支持 RENAME 原表與臨時表的操作,如上述用例中,ALTER 陳述句若改為 RENAME TABLE ghost_test.abc TO ghost_test.ccc,那么 Online DDL 工具后續的 RENAME TABLE ghost_test.abc TO ghost_test._abc_del, ghost_test._abc_gho TO ghost_test.abc 操作就會失敗,致使 Online DDL 操作失敗,

總結

本文主要介紹了 Online DDL 工具的使用并展示了 CloudCanal 對 Online DDL 工具的實時同步能力,得益于 GH-OST、PT-OSC 優秀的表結構修改性能和 CloudCanal 強大的同步能力,基本能滿足企業在日常執行 DDL 的業務中,資料表的 DML 執行和資料同步性能要求

轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/541022.html

標籤:其它

上一篇:工業資料分析為什么要用FusionInsight MRS IoTDB?

下一篇:一次SQL調優 聊一聊 SQLSERVER 資料頁

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • GPU虛擬機創建時間深度優化

    **?桔妹導讀:**GPU虛擬機實體創建速度慢是公有云面臨的普遍問題,由于通常情況下創建虛擬機屬于低頻操作而未引起業界的重視,實際生產中還是存在對GPU實體創建時間有苛刻要求的業務場景。本文將介紹滴滴云在解決該問題時的思路、方法、并展示最終的優化成果。 從公有云服務商那里購買過虛擬主機的資深用戶,一 ......

    uj5u.com 2020-09-10 06:09:13 more
  • 可編程網卡芯片在滴滴云網路的應用實踐

    **?桔妹導讀:**隨著云規模不斷擴大以及業務層面對延遲、帶寬的要求越來越高,采用DPDK 加速網路報文處理的方式在橫向縱向擴展都出現了局限性。可編程芯片成為業界熱點。本文主要講述了可編程網卡芯片在滴滴云網路中的應用實踐,遇到的問題、帶來的收益以及開源社區貢獻。 #1. 資料中心面臨的問題 隨著滴滴 ......

    uj5u.com 2020-09-10 06:10:21 more
  • 滴滴資料通道服務演進之路

    **?桔妹導讀:**滴滴資料通道引擎承載著全公司的資料同步,為下游實時和離線場景提供了必不可少的源資料。隨著任務量的不斷增加,資料通道的整體架構也隨之發生改變。本文介紹了滴滴資料通道的發展歷程,遇到的問題以及今后的規劃。 #1. 背景 資料,對于任何一家互聯網公司來說都是非常重要的資產,公司的大資料 ......

    uj5u.com 2020-09-10 06:11:05 more
  • 滴滴AI Labs斬獲國際機器翻譯大賽中譯英方向世界第三

    **桔妹導讀:**深耕人工智能領域,致力于探索AI讓出行更美好的滴滴AI Labs再次斬獲國際大獎,這次獲獎的專案是什么呢?一起來看看詳細報道吧! 近日,由國際計算語言學協會ACL(The Association for Computational Linguistics)舉辦的世界最具影響力的機器 ......

    uj5u.com 2020-09-10 06:11:29 more
  • MPP (Massively Parallel Processing)大規模并行處理

    1、什么是mpp? MPP (Massively Parallel Processing),即大規模并行處理,在資料庫非共享集群中,每個節點都有獨立的磁盤存盤系統和記憶體系統,業務資料根據資料庫模型和應用特點劃分到各個節點上,每臺資料節點通過專用網路或者商業通用網路互相連接,彼此協同計算,作為整體提供 ......

    uj5u.com 2020-09-10 06:11:41 more
  • 滴滴資料倉庫指標體系建設實踐

    **桔妹導讀:**指標體系是什么?如何使用OSM模型和AARRR模型搭建指標體系?如何統一流程、規范化、工具化管理指標體系?本文會對建設的方法論結合滴滴資料指標體系建設實踐進行解答分析。 #1. 什么是指標體系 ##1.1 指標體系定義 指標體系是將零散單點的具有相互聯系的指標,系統化的組織起來,通 ......

    uj5u.com 2020-09-10 06:12:52 more
  • 單表千萬行資料庫 LIKE 搜索優化手記

    我們經常在資料庫中使用 LIKE 運算子來完成對資料的模糊搜索,LIKE 運算子用于在 WHERE 子句中搜索列中的指定模式。 如果需要查找客戶表中所有姓氏是“張”的資料,可以使用下面的 SQL 陳述句: SELECT * FROM Customer WHERE Name LIKE '張%' 如果需要 ......

    uj5u.com 2020-09-10 06:13:25 more
  • 滴滴Ceph分布式存盤系統優化之鎖優化

    **桔妹導讀:**Ceph是國際知名的開源分布式存盤系統,在工業界和學術界都有著重要的影響。Ceph的架構和演算法設計發表在國際系統領域頂級會議OSDI、SOSP、SC等上。Ceph社區得到Red Hat、SUSE、Intel等大公司的大力支持。Ceph是國際云計算領域應用最廣泛的開源分布式存盤系統, ......

    uj5u.com 2020-09-10 06:14:51 more
  • es~通過ElasticsearchTemplate進行聚合~嵌套聚合

    之前寫過《es~通過ElasticsearchTemplate進行聚合操作》的文章,這一次主要寫一個嵌套的聚合,例如先對sex集合,再對desc聚合,最后再對age求和,共三層嵌套。 Aggregations的部分特性類似于SQL語言中的group by,avg,sum等函式,Aggregation ......

    uj5u.com 2020-09-10 06:14:59 more
  • 爬蟲日志監控 -- Elastc Stack(ELK)部署

    傻瓜式部署,只需替換IP與用戶 導讀: 現ELK四大組件分別為:Elasticsearch(核心)、logstash(處理)、filebeat(采集)、kibana(可視化) 下載均在https://www.elastic.co/cn/downloads/下tar包,各組件版本最好一致,配合fdm會 ......

    uj5u.com 2020-09-10 06:15:05 more
最新发布
  • day02-2-商鋪查詢快取

    功能02-商鋪查詢快取 3.商鋪詳情快取查詢 3.1什么是快取? 快取就是資料交換的緩沖區(稱作Cache),是存盤資料的臨時地方,一般讀寫性能較高。 快取的作用: 降低后端負載 提高讀寫效率,降低回應時間 快取的成本: 資料一致性成本 代碼維護成本 運維成本 3.2需求說明 如下,當我們點擊商店詳 ......

    uj5u.com 2023-04-20 08:33:24 more
  • MySQL中binlog備份腳本分享

    關于MySQL的二進制日志(binlog),我們都知道二進制日志(binlog)非常重要,尤其當你需要point to point災難恢復的時侯,所以我們要對其進行備份。關于二進制日志(binlog)的備份,可以基于flush logs方式先切換binlog,然后拷貝&壓縮到到遠程服務器或本地服務器 ......

    uj5u.com 2023-04-20 08:28:06 more
  • day02-短信登錄

    功能實作02 2.功能01-短信登錄 2.1基于Session實作登錄 2.1.1思路分析 2.1.2代碼實作 2.1.2.1發送短信驗證碼 發送短信驗證碼: 發送驗證碼的介面為:http://127.0.0.1:8080/api/user/code?phone=xxxxx<手機號> 請求方式:PO ......

    uj5u.com 2023-04-20 08:27:27 more
  • 快取與資料庫雙寫一致性幾種策略分析

    本文將對幾種快取與資料庫保證資料一致性的使用方式進行分析。為保證高并發性能,以下分析場景不考慮執行的原子性及加鎖等強一致性要求的場景,僅追求最終一致性。 ......

    uj5u.com 2023-04-20 08:26:48 more
  • sql陳述句優化

    問題查找及措施 問題查找 需要找到具體的代碼,對其進行一對一優化,而非一直把關注點放在服務器和sql平臺 降低簡化每個事務中處理的問題,盡量不要讓一個事務拖太長的時間 例如檔案上傳時,應將檔案上傳這一步放在事務外面 微軟建議 4.啟動sql定時執行計劃 怎么啟動sqlserver代理服務-百度經驗 ......

    uj5u.com 2023-04-20 08:26:35 more
  • 云時代,MySQL到ClickHouse資料同步產品對比推薦

    ClickHouse 在執行分析查詢時的速度優勢很好的彌補了MySQL的不足,但是對于很多開發者和DBA來說,如何將MySQL穩定、高效、簡單的同步到 ClickHouse 卻很困難。本文對比了 NineData、MaterializeMySQL(ClickHouse自帶)、Bifrost 三款產品... ......

    uj5u.com 2023-04-20 08:26:29 more
  • sql陳述句優化

    問題查找及措施 問題查找 需要找到具體的代碼,對其進行一對一優化,而非一直把關注點放在服務器和sql平臺 降低簡化每個事務中處理的問題,盡量不要讓一個事務拖太長的時間 例如檔案上傳時,應將檔案上傳這一步放在事務外面 微軟建議 4.啟動sql定時執行計劃 怎么啟動sqlserver代理服務-百度經驗 ......

    uj5u.com 2023-04-20 08:25:13 more
  • Redis 報”OutOfDirectMemoryError“(堆外記憶體溢位)

    Redis 報錯“OutOfDirectMemoryError(堆外記憶體溢位) ”問題如下: 一、報錯資訊: 使用 Redis 的業務介面 ,產生 OutOfDirectMemoryError(堆外記憶體溢位),如圖: 格式化后的報錯資訊: { "timestamp": "2023-04-17 22: ......

    uj5u.com 2023-04-20 08:24:54 more
  • day02-2-商鋪查詢快取

    功能02-商鋪查詢快取 3.商鋪詳情快取查詢 3.1什么是快取? 快取就是資料交換的緩沖區(稱作Cache),是存盤資料的臨時地方,一般讀寫性能較高。 快取的作用: 降低后端負載 提高讀寫效率,降低回應時間 快取的成本: 資料一致性成本 代碼維護成本 運維成本 3.2需求說明 如下,當我們點擊商店詳 ......

    uj5u.com 2023-04-20 08:24:03 more
  • day02-短信登錄

    功能實作02 2.功能01-短信登錄 2.1基于Session實作登錄 2.1.1思路分析 2.1.2代碼實作 2.1.2.1發送短信驗證碼 發送短信驗證碼: 發送驗證碼的介面為:http://127.0.0.1:8080/api/user/code?phone=xxxxx<手機號> 請求方式:PO ......

    uj5u.com 2023-04-20 08:23:11 more