全局事務認證模塊
全局事務認證模塊有一個消息隊列,用來存放收到的消息。這些消息主要是事務的Binlog Event,也有一部分狀態和控制消息。狀態表replication_group_member_stats中的字段COUNT_TRANSACTIONS_IN_QUEUE指的就是這個隊列中的事務數量。
全局事務認證模塊的核心任務是做沖突檢測,識別出那些同時修改了同樣數據的事務,并做出相應的處理。沖突檢測時需要的信息包括三點。
·主鍵信息。
·事務執行時數據庫的快照版本。
·執行事務的MySQL實例的UUID。
沖突檢測需要的信息
MGR的沖突檢測中以數據行為單位,兩個事務是不是修改了同樣的數據,是通過事務所修改的主鍵值來判斷的。當發現兩個事務修改了同樣的數據后,如何來判斷這兩個事務是不是同時執行呢?這里用到了數據庫快照版本。數據庫快照是數據庫的一個瞬時狀態,每個寫操作都會導致數據庫狀態的變化,不同的狀態用不同的快照版本來表示。快照版本是用GTID來表示的,每個寫事務都會產生一個唯一的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。
另外有需要云服務器可以了解下創新互聯cdcxhl.cn,海內外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業上云的綜合解決方案,具有“安全穩定、簡單易用、服務可用性高、性價比高”等特點與優勢,專為企業上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。
分享名稱:說MGR-全局事務認證模塊&異地事務執行模塊-創新互聯
URL地址:http://www.2m8n56k.cn/article46/docgeg.html
成都網站建設公司_創新互聯,為您提供定制開發、品牌網站設計、網站設計公司、微信小程序、虛擬主機、網站導航
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:[email protected]。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯