國產分布式數據庫災備高可用實現

最近在進行核心業務系統的切換演練測試,就在想一個最佳的分布式數據庫高可用部署方案是如何保證數據不丟、系統可用的,做到故障時候可切換、可回切,并且業務數據的一致性。本文簡要介紹了OceanBase數據庫和GoldenDB數據庫在災備高可用的部署方案,以參考。


在生產環境數據庫相關的變更操作時,可能因為DML或DDL操作導致數據被篡改或者表結構不可逆,此時需要數據庫提供一種高可用機制和能力恢復到變更前的時點,以保證業務的連續性。主要有兩種思路,一種是閃回功能將數據恢復到變更操作的時點;另一種是延遲復制,備節點和主節點之間的數據復制設置一個延遲時間,主節點出現邏輯上的誤操作時,利用備節點延遲同步來恢復數據。

1)閃回功能

國產數據庫中很多已支持閃回功能,比如TiDB、GaussDB、OpenGauss、OceanBase等。以GaussDB為例在Ustore引擎中閃回功能,通過參數enable_recyclebin控制回收站的實時打開和關閉。并通過recyclebin_retention_time參數設置回收站對象保留時間,超過該時間的回收站對象將被自動清理。

2)延遲復制

在主備部署架構的數據庫中,基本都能實現延遲復制功能,像MySQL、OpenGauss這樣的單實例數據庫。比如在OpenGauss數據庫中的延遲復制,允許將回放延時一段指定的時間后進行回放,提供一份可查詢一段時間之前的數據副本;在MySQL數據庫中通過MASTER_DELAY來配置主節點和備節點的復制延遲。

在集中式主備架構的延遲復制實現基礎之上,分布式數據庫在架構上如何實現延遲復制以保證高可用。對于分布式架構的難點之一是如何確保故障場景下各個分片之間的數據一致性。對于國產分布式數據庫OceanBase、GoldenDB以及TiDB等,已經有不少成熟的方案。本文將重點介紹OceanBase數據庫的物理備庫方案和GoldenDB數據庫的DRSP災備集群方案,不僅僅實現了延遲復制功能,而且滿足災備切換方案的多樣性和靈活性,如異地災備方案和孤島驗證方案。

1、OceanBase數據庫物理備庫方案

OceanBase數據庫支持多副本的高可用容災方案,同時也支持基于物理備庫的準實時熱備份方案。當生產主庫出現故障時,備庫可以接管服務,最大限度降低服務停機時間,減少可能帶來的數據損失。從V4.1.0版本開始,OceanBase數據庫按照租戶粒度提供物理備庫能力,分為主租戶和備租戶:主租戶是業務運行的租戶,提供完整的數據庫服務能力;備租戶只提供容災和只讀服務能力。

OceanBase的物理備庫主要通過日志傳輸服務和日志存儲服務來完成日志的傳輸及存儲,并通過日志回放服務來保證主備租戶數據的一致,其中:

  • 日志傳輸服務在主租戶和備租戶之間實時同步 Redo 日志。當前OceanBase數據庫物理備庫僅提供異步同步模式。
  • 日志存儲服務為物理備庫提供高可用、高可靠的日志存儲和讀寫能力。
  • 備租戶寫入日志存儲服務的日志會通過日志回放服務實時或延后地應用到內存的MemStore之中,以保證主租戶和備租戶的數據完全一致。
1.1 物理備庫的部署方案

OceanBase物理備庫的部署方案中,可以按照集群中主租戶和備租戶進行不同的組合,主租戶和備租戶可以在同一個集群中,也可以在不同的集群中。典型的部署方案有幾種:

  1. 集群中僅有主租戶或備租戶:包括多個OceanBase集群,業務租戶在一個集群,備租戶在另外一個集群,中間采用異步復制的方式,滿足異地容災的高可用需求;
  2. 集群中既有主租戶又有備租戶:多中心多活的部署架構,不同地域之間的集群互為主備;
  3. 主租戶和備租戶在同一個集群中:主備租戶在同一個集群中進行管理,適用于數據庫變更或升級的場景,又不需要增加額外的管理集群資源。

在這里插入圖片描述

第三種部署架構適合租戶在升級或者數據庫變更操作前,在備租戶中保留一份數據庫快照,將被租戶的同步暫停。業務在主租戶上進行升級變更等操作,如果變更異常,將備租戶切換為主租戶對外提供服務,以保證業務的連續性。

1.2 物理備庫的日志傳輸

物理備庫通過日志傳輸服務在主租戶和備租戶之間實時同步Redo日志,備租戶既可以通過主租戶的日志歸檔來獲取日志,也可以通過網絡直連主租戶所在的集群來獲取日志。

  • 基于日志歸檔的物理備庫:主租戶開啟日志歸檔將日志歸檔到目標存儲(OSS/NFS)中,備租戶恢復歸檔日志實現數據同步;需要主租戶和備租戶開啟歸檔模式。
  • 基于網絡傳輸的物理備庫:備租戶直接通過網絡連接主租戶或其他備租戶讀取日志,類似于MySQL數據庫的復制方式。

在這里插入圖片描述

在基于網絡傳輸的部署模式下,備租戶從主租戶讀取的日志,既可以是主租戶的在線日志,也可以是主租戶的歸檔日志。同時這種模式下支持集群級別的限速。

1)暫停或開啟日志同步

#登錄備租戶或所在集群的sys租戶,執行命令暫停租戶日志同步
ALTER SYSTEM RECOVER STANDBY [TENANT = tenant_name] CANCEL ;
#登錄備租戶或所在集群的sys租戶,執行命令開啟租戶日志同步
ALTER SYSTEM RECOVER STANDBY [TENANT = tenant_name] UNTIL UNLIMITED;

需要注意的是,暫停日志同步后,備租戶不會再從主租戶同步任何日志,盡量避免因暫停日志同步而導致的備租戶日志斷流。

2)查看日志同步進度

#執行SQL查看備租戶同步進度
SELECT TENANT_NAME, TENANT_ID, TENANT_ROLE, SCN_TO_TIMESTAMP(SYNC_SCN) 
FROM oceanbase.DBA_OB_TENANTS WHERE TENANT_NAME = 'standby_tenant';
+----------------+-----------+-------------+----------------------------+
| TENANT_NAME    | TENANT_ID | TENANT_ROLE | SCN_TO_TIMESTAMP(SYNC_SCN) |
+----------------+-----------+-------------+----------------------------+
| standby_tenant |      1004 | STANDBY     | 2023-04-14 16:38:53.938774 |
+----------------+-----------+-------------+----------------------------+
1 row in set

3)設置同步限速

適用于集群之間備租戶同步限速

  • standby_fetch_log_bandwidth_limit:用于設置備租戶所在集群中,可用于備租戶從主租戶或源端租戶進行日志同步的所有帶寬的總和。
  • _server_standby_fetch_log_bandwidth_limit:用于設置備租戶所在集群的單個 OBServer 節點中,可用于備租戶從主租戶或源端租戶進行日志同步的帶寬。
1.3 日志存儲服務

OceanBase數據庫中日志存儲服務使用Paxos協議實現高可用,其中主租戶和備租戶中的日志存儲服務使用了不同的工作模式:

  • APPEND模式:主租戶上使用APPEND模式。在該模式下,主租戶日志流的Leader會接收事務、DDL等上層模塊寫入的數據,并將這些數據在主租戶的多個副本之間使用 Paxos 協議進行同步并持久化。
  • RAW_WRITE模式:備租戶上使用RAW_WRITE模式。在該模式下,備租戶日志流的Leader拒絕任何上層模塊直接寫入的數據,僅允許通過日志傳輸服務從主租戶同步物理日志,且這些物理日志的內容、LSN、SCN等信息均由主租戶生成。

在數據同步過程中,每一條日志都會在主租戶上生成一組唯一的LSN和SCN值。其中,LSN用于定位這條日志在存儲服務中的物理位置信息;SCN用于代表這條日志在存儲服務中的時序關系,上層服務可以使用SCN值對多個日志流之間的日志進行定序。

另外,無論是主租戶還是備租戶,在Paxos Group日志流副本中都會有LEADER和FOLLOWER兩種角色。對于主租戶,其業務數據是在日志流的Leader節點上寫入,再同步給所有Follower節點;對于備租戶,日志流的Leader節點主要負責通過日志傳輸服務從主租戶同步日志,并將同步過來的日志再同步給Paxos Group中的Follower節點。

1.4 主租戶和備租戶切換

OceanBase數據庫的主租戶和備租戶可以通過SwitchOver和Failover操作動態改變租戶角色:

  • Switchover:在用戶計劃內對租戶角色進行變更。執行 Switchover操作后,主租戶會與對應的備租戶會交換租戶角色,整個過程數據不丟失RPO = 0,執行時間一般為秒級。
#將主租戶切換為備租戶
ALTER SYSTEM SWITCHOVER TO STANDBY TENANT = tenant_name;
#將備租戶切換為主租戶
ALTER SYSTEM SWITCHOVER TO PRIMARY TENANT = tenant_name;
  • Failover:在主租戶出現無法恢復的故障時所做的切換行為。執行Failover操作后,對應的備租戶角色會變換成主。同時,如果對主租戶故障前一直正常同步的備租戶執行Failover操作,則執行Failover操作后,一般會產生百毫秒級別的數據損失,執行時間一般為秒級。
#將備租戶切換為主租戶
ALTER SYSTEM ACTIVATE STANDBY TENANT = tenant_name;

Failover操作需要在操作執行完成后達到數據一致的狀態,故系統會選擇所有日志流的同步位點中SCN最小的值作為Failover的執行位點。執行Failover操作后,租戶下的所有日志流都會統一回退到該位點。

2、GoldenDB數據庫

在這里插入圖片描述

GoldenDB分布式數據庫除了支持同一套集群多中心的部署架構外,還支持DRSP的災備部署方案。DRSP高可用架構包括生產庫和災備庫/應急庫,生產庫是正常對外提供服務的GoldenDB集群;災備庫正常情況不提供服務,從生產庫復制數據的GoldenDB系統,用于提供災難、應急等場景下的緊急啟動能力,代替生產庫提供服務。如果所示,DRSP災備集群運行有三種模式:

  1. 數據同步模式:元數據、GTM數據、數據節點分別從源端生產庫同步到目標端災備庫,可通過配置延時時間讓同步過來的數據延時應用到災備庫上。
  2. 數據恢復模式:應用、檢查、修復同步過來的數據,使最終數據滿足分布式一致性要求。
  3. 服務模式:啟用災備集群,對外提供服務,,提供GoldenDB系統絕大部分正常功能。

這種部署方案的優點是生產集群和災備集群單獨維護,故障互不影響。相比較異地故障切換或者災備孤島演練,在切換方案上更為迅速靈活。相對應的缺點就是需要單獨維護兩套系統,增加了運維的復雜度。

2.1 不同模式切換

1)數據同步模式

正常情況下,生產庫處于服務模式,此時災備庫應當進入延時復制模式(sync模式)接入生產庫。執行以下命令進入延時復制模式:

sh AllControl.sh -sync 1 -delay_time=

delay_time填寫延時應用的時間,單位為秒;如果不需要延時則填0

2)數據恢復模式

當生產庫發生故障或誤操作時,需要切換至災備庫進行接管,此時災備庫應當先進入數據恢復模式(recovery模式)恢復數據,再切換至服務模式對外提供服務。

  • 命令退出延時復制模式
sh AllControl.sh -stopsync 1
  • 指定需要回放到的時刻或GTID
#指定回放時刻
sh bat_mod_relaytime.sh 1 "RELAY_TIME"
#回放所有relay log
sh bat_mod_relaytime.sh 1 ""
#指定回放的GTID

三種場景中記錄下的回放時刻在回切時會作為生產庫元數據同步的起始時刻

  • 進入災備庫數據恢復模式
sh AllControl.sh -recover 1

3)數據服務模式

數據恢復完成后,通過以下步驟切換至服務模式

sh AllControl.sh -service 1

當災備庫不再需要服務時,執行命令退出服務模式

2.2 災備庫回切

當災備庫服務一段時間以后,需要將服務回切至生產庫,要求生產庫數據和災備庫基本一致。此時可以將生產庫和災備庫角色對調,將生產庫接入當前已服務的災備庫中,從災備庫同步數據。停止災備庫業務,等待生產庫同步數據完成后啟動生產庫,由生產庫提供服務。

  • 登錄生產庫某一管理節點服務器,將生產庫退出服務模式
sh AllControl.sh -stopservice 1
  • 生產庫集群1停服
sh start_stop_service.sh -stop_dbproxy 1
  • 修改元數據同步起始時刻,回滾生產庫集群至一致性時刻,并進行分片數據一致性校驗
sh bat_mod_laststamp.sh "1" "2024-01-01 10:00:00"
其中1為集群ID,"2024-01-01 10:00:00"為元數據同步起始時刻,該時刻根據災備庫進行恢復時設置的恢復時間確定
  • purge生產庫完成回滾且主備數據一致的分片
  • 生產庫進入延時復制模式
sh AllControl.sh -sync 1 -delay_time=0
  • 逐步停掉災備庫上的業務,讓proxy上所有事務都提交。禁用災備庫集群1,停止該集群綁定的所有proxy進程。
  • 生產庫退出復制模式并進入服務模式
  • 災備庫退出服務模式并進入延遲復制模式
2.3 災備演練場景回切

在災備孤島等演練場景下,災備站點和生產站點孤島隔離,演練結束后,需要將災備站點的數據回滾到演練前的時刻。GoldenDB數據庫的DRSP復制方案中提供了閃回功能,將數據閃回到災備庫恢復之后,提供服務之前的一個時刻。

  1. 快照持久化:針對災備庫,在災備庫執行服務模式起連接實例之前,將當前災備庫的快照點持久化到RDB庫。為后續的閃回提供服務。
  2. 閃回:將災備庫服務模式下產生的業務恢復至快照點,方法是執行性反向sql,所以災備庫服務期間,如果有DDL,可能會失敗。此時根據實際情況,看是否需要備份恢復。
  3. 備機回放檢查:閃回功能是通過在主機上執行反向sql來完成回滾操作,所以備機可以以同步回放的方式進行數據同步。所以需要所有備機回放完全完成才可以下一步的purge。
  4. purge:閃回通過反向sql實現的,所有本身的災備庫gtid_set會一直增加,所以需要通過purge操作將gtid_set恢復至快照時刻。

以上是OceanBase數據庫和GoldenDB數據庫延遲復制和災備的高可用實現方案簡單總結,實際實現過程更為復雜,以官方的文檔材料為準。


參考資料:

  1. https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000000818706
  2. GoldenDB數據庫DRSP雙集群同步

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/39619.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/39619.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/39619.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

kafka的架構

一、架構圖 Broker:一臺 kafka 服務器就是一個 broker。一個kakfa集群由多個 broker 組成。一個 broker 可以容納多個 topic。 Producer:消息生產者,就是向 kafka broker 發消息的客戶端 Consumer:消息消費者,向 kafk…

深海電波,智能駕馭:海上發電系統中的先進網關技術

隨著技術的不斷演進,海上風電場逐漸走向深海,隨之而來的高速通信保障成為一大難題。同時,海上風電特殊的環境與部署技術,也給運維帶來了作業難、成本高、響應慢等困難。通過在沿海岸邊建立高站,結合超遠覆蓋、載波聚合…

springboot java.lang.ClassNotFoundException: dm.jdbc.driver.DmDriver 應該如何解決

遇到的問題:項目中引用了外部的達夢jar包 在idea中正常使用 也能找到dm.jdbc.driver.DmDriver 驅動 但是當通過jenkins 構建部署到服務器上 總是報 ClassNotFoundException: dm.jdbc.driver.DmDriver 找不到驅動 應用到的驅動代碼如下格式 排查步驟 1.首先看你的項…

ROS2仿真工具-gazebo

gazebo獨立于ROS2,就像插件一樣,需要安裝。 1.安裝 sudo apt install gazebo sudo apt install ros-humble-gazebo-* 2.運行測試demo gazebo /opt/ros/humble/share/gazebo_plugins/worlds/gazebo_ros_diff_drive_demo.world 查看所有話題 ros2 top…

0052__windows下實現socketpair函數

windows下實現socketpair函數_socketpair windows 實現-CSDN博客 socketpair函數介紹及使用-CSDN博客

使用css做一個旋轉的八卦圖

使用css做一個旋轉的八卦圖 1, html部分 <div class"tai"><div class"bai"></div><div class"hei"></div> </div>2, css部分 .tai{width: 200px;height: 200px;border: 1px solid #000;background: linea…

工業路由器的應用

上文講了工業路由器與家用路由器的區別, 家用路由器的使用場景想必大家都不陌生&#xff0c;那么工業路由器可以具體應用在哪些領域呢&#xff1f; 工業路由器憑借其多接口、多協議、寬溫寬壓等工業設計特性&#xff0c;可以廣泛應用于各類工業化場景&#xff0c;為各類工業傳…

STM32中的I2S(Inter-IC Sound)接口和SA接口(Serial Audio Interface)的區別

STM32中的I2S&#xff08;Inter-IC Sound&#xff09;接口和SA接口&#xff08;這里的SA可能指的是SAI&#xff0c;Serial Audio Interface&#xff09;雖然都用于音頻數據傳輸&#xff0c;但它們在設計目標、功能特性和應用場景上存在一些區別&#xff1a; I2S (Inter-IC Sou…

STM32-I2C硬件外設

本博文建議與我上一篇I2C 通信協議??????共同理解 合成一套關于I2C軟硬件體系 STM32內部集成了硬件I2C收發電路&#xff0c;可以由硬件自動執行時鐘生成、起始終止條件生成、應答位收發、數據收發等功能&#xff0c;減輕CPU的負擔 特點&#xff1a; 多主機功能&#x…

Shiro框架

入門概述 1 shiro是什么? Apache Shiro 是一個功能強大且易于使用的 Java 安全(權限)框架。Shiro 可以完成&#xff1a;認證、授權、加密、會話管理、與 Web 集成、緩存 等。借助 Shiro 您可以快速輕松地保護任何應用程序——從最小的移動應用程序到最大的 Web 和企業應用程…

計算機網絡網絡層復習題1

一. 單選題&#xff08;共27題&#xff09; 1. (單選題)以太網 MAC 地址、IPv4 地址、IPv6 地址的地址空間大小分別是&#xff08; &#xff09;。 A. 2^48&#xff0c;2^32&#xff0c;2^128B. 2^32&#xff0c;2^32&#xff0c;2^96C. 2^16&#xff0c;2^56&#xff0c;2^6…

選對箱式壓風自救裝置提升煤礦生產效率

選對箱式壓風自救裝置提升煤礦生產效率&#xff0c;安全是煤礦穩定生產的基石&#xff0c;只有始終保持對安全的敬畏之心&#xff0c;才能確保礦區可持續發展和經濟效益的穩步提升。 150簡介 ZYJ-A型礦井壓風自救裝置是煤礦煤塵、瓦斯和二氧化碳突出礦井的實際情況&#xff0c…

淺談k8s中cni0和docker0的關系和區別

最近在復習k8s網絡方面的知識&#xff0c;查看之前學習時整理的筆記和文檔還有過往自己總結的博客之后發現一個問題&#xff0c;就是在有關flannel和calico這兩個k8s網絡插件的文章和博客中&#xff0c;會涉及到cni0和docker0這兩個網橋設備&#xff0c;但是都沒有明確說明他們…

C# WPF自制批注工具(方便標記重點和演示)

在教學和演示中&#xff0c;我們通常需要對重點進行批注&#xff0c;下載安裝第三方工具批注顯得很麻煩。本篇使用WPF開發了一個批注工具&#xff0c;工具小巧&#xff0c;功能豐富&#xff0c;非常使用日常免費使用&#xff0c;或者進行再次開發。 自制批注工具具有以下功能特…

AUTOSAR NvM模塊(五)

NvMRbCallbackSignatureAR45 改變回調函數的參數類型。 TRUE&#xff1a;根據AR44及之后版本&#xff0c;回調函數使用NvM_<Multi;Init>BlockRequestType參數類型。詳細的函數調用參數請參考回調參數。 FALSE&#xff1a;根據AR43及之前版本&#xff0c;回調函數使用S…

GPT-5 一年半后發布,對此你有何期待?

CHATGPT5&#xff1a;未來一年內的期待與挑戰 隨著人工智能技術的飛速發展&#xff0c;自然語言處理&#xff08;NLP&#xff09;領域的突破不斷涌現。在這一背景下&#xff0c;CHATGPT系列模型作為NLP領域的佼佼者&#xff0c;其每一次的更新都牽動著業界的目光。當得知CHATG…

Spring Boot中泛型參數的靈活運用:最佳實踐與性能優化

泛型是Java中一種強大的特性&#xff0c;它提供了編寫通用代碼的能力&#xff0c;使得代碼更加靈活和可復用。在Spring Boot應用程序中&#xff0c;泛型參數的靈活運用可以帶來諸多好處&#xff0c;包括增強代碼的可讀性、提高系統的健壯性以及優化系統的性能。本文將深入探討在…

Flask 數據創建時出錯

當我們在使用 Flask 創建數據時遇到錯誤&#xff0c;可能有多種原因&#xff0c;包括代碼錯誤、數據庫配置問題或依賴項錯誤。具體情況我會總結成一篇文章記錄下&#xff0c;主要是歸類總結一些常見的解決方法和調試步驟&#xff0c;幫助大家解決問題&#xff1a; 1、問題背景 …

2024.7.2 隨筆 控制內心的焦慮

文章目錄 前言2024.7.2 隨筆 控制內心的焦慮人生的新階段冒名頂替綜合征年齡焦慮、職業焦慮未來的計劃 前言 我已經記不清楚&#xff0c;好久沒有這樣寫長篇的博文&#xff0c;或者說是&#xff0c;感悟吧。起因是刷到了一個博主的視頻&#xff0c;真的治愈了我的內心&#xf…

OFDM技術概述8——FBMC

Filter bank multicarrier(FBMC&#xff0c;濾波器組多載波)&#xff0c;是一種類似于OFDM的調制方式&#xff0c;用濾波器抑制子載波的旁瓣大小&#xff0c;使用FFT/IFFT或多相濾波器實現&#xff0c;其應用于5G的主要優勢&#xff1a; 子載波信號帶限&#xff0c;帶外泄漏小…