溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

說MGR - 全局事務認證模塊&異地事務執行模塊

發布時間:2020-10-15 14:34:32 來源:網絡 閱讀:480 作者:coveringindex 欄目:MySQL數據庫

全局事務認證模塊


全局事務認證模塊有一個消息隊列,用來存放收到的消息。這些消息主要是事務的Binlog Event,也有一部分狀態和控制消息。狀態表replication_group_member_stats中的字段COUNT_TRANSACTIONS_IN_QUEUE指的就是這個隊列中的事務數量。


全局事務認證模塊的核心任務是做沖突檢測,識別出那些同時修改了同樣數據的事務,并做出相應的處理。沖突檢測時需要的信息包括三點。


·主鍵信息。

·事務執行時數據庫的快照版本。

·執行事務的MySQL實例的UUID。



沖突檢測需要的信息


MGR的沖突檢測中以數據行為單位,兩個事務是不是修改了同樣的數據,是通過事務所修改的主鍵值來判斷的。當發現兩個事務修改了同樣的數據后,如何來判斷這兩個事務是不是同時執行呢?這里用到了數據庫快照版本。數據庫快照是數據庫的一個瞬時狀態,每個寫操作都會導致數據庫狀態的變化,不同的狀態用不同的快照版本來表示??煺瞻姹臼怯肎TID來表示的,每個寫事務都會產生一個唯一的GTID,這個GTID由全局事務認證模塊產生,且在事務提交時會被添加到全局變量gtid_executed中。因此,gtid_executed的內容就是MySQL數據庫的快照版本。


沖突檢測數據庫


全局事務認證模塊中還維護了一個沖突檢測數據庫,它是主鍵哈希+快照版本的列表??煺瞻姹敬鎯Φ氖亲詈笠粋€修改此主鍵事務的快照版本加上這個事務的GTID。收到事務信息后,全局事務認證模塊會根據Transaction_context_log_event中的主鍵信息,從沖突檢測數據庫中檢索出所有主鍵的快照版本和該事務的快照版本進行對比。當前事務的快照版本必須要包含檢索出的所有主鍵快照版本中的GTID,否則就是有沖突。


沖突處理


沖突檢測完成后,全局認證模塊接下來的處理是有本地事務和異地事務區分的。Transaction_context_log_event中記錄了產生這個事務的MySQL實例的UUID。根據這個UUID,就能判斷出這是一個本地事務還是異地事務。對于本地事務處理如下。


·如果沒有沖突,喚醒這個事務的線程,并且告訴它完成提交操作。

·如果有沖突,喚醒這個事務的線程,并且告訴它發生沖突,需要回滾。

·不論是否有沖突,Binlog Event都會被丟棄。


對于異地事務的處理如下。


·如果沒有沖突,將這個事務的Binlog Event寫入Relay log中,讓group_replication_applier通道去執行。

·如果有沖突,則丟棄這個事務的Binlog Event。



沖突檢測數據庫的清理


隨著使用時間越來越長,沖突檢測數據庫中維護的主鍵信息會越來越多,會占用大量內存。為了減少內存的使用并提高查詢效率,全局事務認證模塊需要定期的清理沖突檢測數據庫。如果一個事務已經在所有成員上執行了,其它事務的執行肯定不會和它有沖突,因此這個事務的所有主鍵信息就可以從沖突檢測數據庫中移除。主鍵信息的清理是依據成員上的全局變量gtid_executed中的GTID集合來做的。全局認證模塊啟動了一個廣播線程,每60秒將自己的gtid_executed中的GTID集合廣播到所有成員上。全局認證模塊收到所有成員的GTID集合后,取它們的交集。這個交集中包含的就是那些已經在所有成員上執行了的事務GTID的集合,稱作全局完成的GTID集合(replication_group_member_stats表中的TRANSACTIONS_COMMITTED_ALL_MEMBERS顯示的就是全局完成的GTID集合。)。全局事務認證模塊會將沖突檢測數據庫所有主鍵的快照版本和全局完成的GTID集合進行對比,如果快照版本GTID集合是全局完成的GTID集合的子集,則這個主鍵的信息就會從沖突檢測數據庫中清除掉。



異地事務執行模塊


為了執行異地事務的Binlog Event,MGR會自動創建一個名為group_replication_applier的通道。這個通道的Receiver線程是關閉的,不會從其它成員上去復制Binlog Event。所有的Binlog Event都是由全局事務認證模塊通過API寫入Relay log的。


事務流程的總結


事務在MGR中的執行過程可以總結為以下三個部分。

·網絡傳輸。

·事務在本地的執行過程。

·事務在異地的執行過程。



網絡傳輸


MGR通過Paxos協議來傳播事務信息。Paxos保障所有的事務信息按照同樣的順序傳播到所有成員上。


事務在本地成員上的執行過程


事務在本地提交時(prepare之后,寫Binlog之前),將事務信息發送至通信模塊,然后開始等待事務認證結果。通信模塊將事務排序后發送到本地成員的全局事務認證模塊。全局事務認證模塊做完沖突檢測后,喚醒該事務繼續執行,或回滾。


事務在異地成員上的執行過程


通訊模塊將事務排序后發送到全局事務認證模塊。全局事務認證模塊認證成功后,將該事務的Binlog Event寫入Relay log,由group_replication_applier通道來執行。如果全局事務認證模塊認證失敗,則會丟棄該事務的Binlog Event。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女