成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

16. 數據一致性、安全性保障 | 深入淺出MGR

數據庫 其他數據庫
對于MGR這樣的"分布式"系統而言,需要在多個節點間保障事務的一致性,無論各個節點狀態正常,或者個別節點處于故障修復狀態,都要能保證各個節點的事務數據最終一致。所謂的最終一致性是指當所有寫事務請求都停止后,各個節點上的事務數據是一致的。

本文介紹MGR如何保障數據一致性及安全性。

1. MGR事務一致性

對于MGR這樣的"分布式"系統而言,需要在多個節點間保障事務的一致性,無論各個節點狀態正常,或者個別節點處于故障修復狀態,都要能保證各個節點的事務數據最終一致。所謂的最終一致性是指當所有寫事務請求都停止后,各個節點上的事務數據是一致的。

與MGR數據一致性相關的因素有這幾種:

  • 節點發生變化,添加 或 刪除。
  • 節點故障修復。
  • Primary節點發生切換。

通過選項group_replication_consistency可以設置節點的事務一致性保障等級。這個選項是從MySQL 8.0.14開始引入的,默認值是EVENTUAL,即最終一致性,這也是在8.0.14之前,未引入該選項前MGR的默認事務一致性保障級別。

2. Primary節點切換時如何保障事務一致性

在單主模式中,當Primary節點切換時(無論是手動切換還是因為故障轉移),新的Primary節點有兩種可選方式應對如何處理積壓事務:

1.第一種:不處理積壓事務,立即響應讀寫事務請求。這時,事務可能會讀取到舊數據。

2.第二種:優先處理完積壓事務后再響應讀寫事務請求。這時,新的Primary節點可能需要耗時更久才能響應讀寫事務請求,這取決于積壓事務隊列大小。

在MySQL 8.0.14前,由于不支持設置事務一致性等級,選擇了可用性最大化的方案,即上述的第一種方案。

P.S,多主模式下,由于每個節點都可以響應讀寫事務請求,因此不存在這個問題。

3. 事務數據一致性保障

在MGR中,并不是所有的事件(事務)都是同步的,部分流程是異步的,因此Secondary節點上可能存在數據延遲,也就是說在Secondary上可能讀取到舊事務數據。

從MySQL 8.0.14開始,通過設置選項group_replication_consistency可以控制RO(只讀)、RW(讀寫)事務在讀取或寫入數據前的一致性等級,可以避免讀取到舊數據,或者寫入數據后盡快同步到其他節點,以滿足各種不同應用場景對事務一致性等級的要求。

我們先了解幾個基本概念,事務同步點可分為讀時事務同步以及寫時事務同步,結合MGR的事務機制,更具體的說就是事務執行前(BEFORE)和事務執行后(AFTER)。

接下來,我們一一介紹選項group_replication_consistency都有哪些可選等級。

P.S,每個節點上可以單獨設置不同的事務一致性等級,而且可做session級修改,但是非常不建議這么做。

3.1 EVENTUAL

在這個等級下,RO和RW事務執行前,都不會要求等待積壓事務先行應用完成。

這是默認等級,也是在引入該選項前的行為。這意味著以下幾點:

  • RW事務無需等待,而可能先于其他節點進行外部化(將事務廣播到其他節點)。
  • RO事務可能讀取到舊數據。
  • 在Primary節點切換時,新產生的RW事務有可能會因為沖突而回滾。

3.2 BEFORE_ON_PRIMARY_FAILOVER

當發生Primary節點切換時,在新的Primary上需要先等待把所有來自舊Primary節點的積壓事務應用完畢,之后才能正式完成切換,轉成ONLINE狀態,成為新的Primary節點,繼續響應新的事務請求。

這么做可以保證在發生故障轉移時,客戶端不會查到舊數據,保證了數據一致性,不過客戶端上也可能會產生延遲等待。

3.3 BEFORE

RW事務在應用之前,RO事務在執行之前,都要先等待前面堆積的事務完成。

這可以保證RO事務總能讀取到最新事務,但對于RW事務而言,只是等待堆積事務應用完成,但并不要求其他節點上也完成該事務。

3.4 AFTER

它比BEFORE更近一步,要求RW事務在其他節點上也要等待應用完畢。這樣一來,后續的事務在任何節點上就都能獲取最新事務數據。

事實上,要慎用該級別及更高以上級別,可能會引發其他問題,可參考這個文章:技術分享 | 為什么MGR一致性模式不推薦AFTER

3.5 BEFORE_AND_AFTER

一致性級別要求最高,對RO和RW事務都要求同步事務數據。也就是說,RW事務在應用之前,要先等待前面堆積的事務完成,并且還需要等待它的事務變更在其他所有節點上也都應用;RO事務在執行之前,也要先等待前面堆積的事務完成。

4. 一致性級別選擇建議

對于絕大多數場景,使用默認的 EVENTUAL 等級就足夠了;尤其是在使用單主模式時,如果需要實時讀取事務數據,只需向Primary節點發起請求即可。

進一步,如果擔心Primary節點切換時會讀取到舊事務數據,可以提高到BEFORE_ON_PRIMARY_FAILOVER級別。

更進一步,如果希望在Secondary節點也能及時讀取到最新事務數據,以此提高讀擴展能力,可以提高到BEFORE級別。

更高的一致性級別就不再建議使用了,潛在的風險以及bug比較多。

P.S,各個節點的一致性級別最好都設置成一樣,并且在運行過程中也不要修改其session級選項值,避免造成不可預料的影響。

小結

本文介紹了MGR中幾個不同的數據一致性保障等級,以及應該選擇何種等級的建議。

參考資料、文檔:

MySQL 8.0 Reference Manual(?https://dev.mysql.com/doc/refman/8.0/en/group-replication.html)。

數據庫內核開發 - 溫正湖(?https://www.zhihu.com/column/c_206071340)。

Group Replication原理 - 宋利兵(https://mp.weixin.qq.com/s/1iO-KISAU1HLSzEVLrxG9g)?。

責任編輯:武曉燕 來源: GreatSQL社區
相關推薦

2023-12-01 13:51:21

數據一致性數據庫

2022-09-15 10:37:46

MySQLRedis數據一致性

2024-07-04 12:36:50

2024-12-26 15:01:29

2023-09-07 08:11:24

Redis管道機制

2025-03-27 08:20:54

2024-05-30 07:00:51

2022-11-09 08:06:15

GreatSQLMGR模式

2021-12-05 21:06:27

軟件

2021-10-18 10:30:59

流計算阿里云

2023-05-26 07:34:50

RedisMySQL緩存

2009-06-18 09:18:08

Oracle檢索數據數據一致性事務恢復

2022-02-17 21:04:27

數據庫MysqlRedis

2021-10-13 09:55:11

流計算引擎數據

2024-08-20 16:13:52

2021-12-14 07:15:57

MySQLRedis數據

2022-10-08 08:09:13

MGRGreatSQL事務

2023-11-22 12:55:59

微服務架構數據庫

2024-01-22 08:52:00

AQS雙異步數據一致性

2019-01-15 17:58:03

微服務架構數據
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 黄色片在线 | 九九热精 | 午夜精品久久久久久不卡欧美一级 | 特黄特黄a级毛片免费专区 av网站免费在线观看 | 午夜精品久久久久久不卡欧美一级 | 中文字幕亚洲无线 | 天天操欧美 | 成人久久18免费 | 久久精品电影 | 99精品免费久久久久久日本 | 五月天综合网 | 亚洲精品美女视频 | 亚洲国产欧美在线 | 91香蕉| 国产色 | 作爱视频免费观看 | 日本在线网址 | 国产日韩欧美在线 | 国产精品一区二区免费看 | 91成人精品 | 中文字幕免费观看 | 色成人免费网站 | 亚洲国产精品久久久久 | 国产99久久 | 色久在线 | 欧洲一区二区三区 | 久久久久午夜 | 欧美一级黄视频 | 国产精品a级 | 国产激情在线观看视频 | 男人天堂国产 | 欧美日韩电影免费观看 | 黑人巨大精品欧美一区二区免费 | 91精品一区二区三区久久久久 | 亚洲视频免费在线播放 | 久久九九网站 | 国产精品亚洲精品日韩已方 | 欧美一级高潮片免费的 | 久久久91 | 亚洲电影成人 | 国产乱码精品1区2区3区 |