全局事務認證模塊

全局事務認證模塊有一個消息隊列,用來存放收到的消息。這些消息主要是事務的Binlog Event,也有一部分狀態(tài)和控制消息。狀態(tài)表replication_group_member_stats中的字段COUNT_TRANSACTIONS_IN_QUEUE指的就是這個隊列中的事務數(shù)量。
全局事務認證模塊的核心任務是做沖突檢測,識別出那些同時修改了同樣數(shù)據(jù)的事務,并做出相應的處理。沖突檢測時需要的信息包括三點。
·主鍵信息。
·事務執(zhí)行時數(shù)據(jù)庫的快照版本。
·執(zhí)行事務的MySQL實例的UUID。
沖突檢測需要的信息
MGR的沖突檢測中以數(shù)據(jù)行為單位,兩個事務是不是修改了同樣的數(shù)據(jù),是通過事務所修改的主鍵值來判斷的。當發(fā)現(xiàn)兩個事務修改了同樣的數(shù)據(jù)后,如何來判斷這兩個事務是不是同時執(zhí)行呢?這里用到了數(shù)據(jù)庫快照版本。數(shù)據(jù)庫快照是數(shù)據(jù)庫的一個瞬時狀態(tài),每個寫操作都會導致數(shù)據(jù)庫狀態(tài)的變化,不同的狀態(tài)用不同的快照版本來表示。快照版本是用GTID來表示的,每個寫事務都會產(chǎn)生一個唯一的GTID,這個GTID由全局事務認證模塊產(chǎn)生,且在事務提交時會被添加到全局變量gtid_executed中。因此,gtid_executed的內(nèi)容就是MySQL數(shù)據(jù)庫的快照版本。
沖突檢測數(shù)據(jù)庫
全局事務認證模塊中還維護了一個沖突檢測數(shù)據(jù)庫,它是主鍵哈希+快照版本的列表。快照版本存儲的是最后一個修改此主鍵事務的快照版本加上這個事務的GTID。收到事務信息后,全局事務認證模塊會根據(jù)Transaction_context_log_event中的主鍵信息,從沖突檢測數(shù)據(jù)庫中檢索出所有主鍵的快照版本和該事務的快照版本進行對比。當前事務的快照版本必須要包含檢索出的所有主鍵快照版本中的GTID,否則就是有沖突。
沖突處理
沖突檢測完成后,全局認證模塊接下來的處理是有本地事務和異地事務區(qū)分的。Transaction_context_log_event中記錄了產(chǎn)生這個事務的MySQL實例的UUID。根據(jù)這個UUID,就能判斷出這是一個本地事務還是異地事務。對于本地事務處理如下。
·如果沒有沖突,喚醒這個事務的線程,并且告訴它完成提交操作。
·如果有沖突,喚醒這個事務的線程,并且告訴它發(fā)生沖突,需要回滾。
·不論是否有沖突,Binlog Event都會被丟棄。
對于異地事務的處理如下。
·如果沒有沖突,將這個事務的Binlog Event寫入Relay log中,讓group_replication_applier通道去執(zhí)行。
·如果有沖突,則丟棄這個事務的Binlog Event。
沖突檢測數(shù)據(jù)庫的清理
隨著使用時間越來越長,沖突檢測數(shù)據(jù)庫中維護的主鍵信息會越來越多,會占用大量內(nèi)存。為了減少內(nèi)存的使用并提高查詢效率,全局事務認證模塊需要定期的清理沖突檢測數(shù)據(jù)庫。如果一個事務已經(jīng)在所有成員上執(zhí)行了,其它事務的執(zhí)行肯定不會和它有沖突,因此這個事務的所有主鍵信息就可以從沖突檢測數(shù)據(jù)庫中移除。主鍵信息的清理是依據(jù)成員上的全局變量gtid_executed中的GTID集合來做的。全局認證模塊啟動了一個廣播線程,每60秒將自己的gtid_executed中的GTID集合廣播到所有成員上。全局認證模塊收到所有成員的GTID集合后,取它們的交集。這個交集中包含的就是那些已經(jīng)在所有成員上執(zhí)行了的事務GTID的集合,稱作全局完成的GTID集合(replication_group_member_stats表中的TRANSACTIONS_COMMITTED_ALL_MEMBERS顯示的就是全局完成的GTID集合。)。全局事務認證模塊會將沖突檢測數(shù)據(jù)庫所有主鍵的快照版本和全局完成的GTID集合進行對比,如果快照版本GTID集合是全局完成的GTID集合的子集,則這個主鍵的信息就會從沖突檢測數(shù)據(jù)庫中清除掉。
異地事務執(zhí)行模塊
為了執(zhí)行異地事務的Binlog Event,MGR會自動創(chuàng)建一個名為group_replication_applier的通道。這個通道的Receiver線程是關閉的,不會從其它成員上去復制Binlog Event。所有的Binlog Event都是由全局事務認證模塊通過API寫入Relay log的。
事務流程的總結(jié)
事務在MGR中的執(zhí)行過程可以總結(jié)為以下三個部分。
·網(wǎng)絡傳輸。
·事務在本地的執(zhí)行過程。
·事務在異地的執(zhí)行過程。
網(wǎng)絡傳輸
MGR通過Paxos協(xié)議來傳播事務信息。Paxos保障所有的事務信息按照同樣的順序傳播到所有成員上。
事務在本地成員上的執(zhí)行過程
事務在本地提交時(prepare之后,寫B(tài)inlog之前),將事務信息發(fā)送至通信模塊,然后開始等待事務認證結(jié)果。通信模塊將事務排序后發(fā)送到本地成員的全局事務認證模塊。全局事務認證模塊做完沖突檢測后,喚醒該事務繼續(xù)執(zhí)行,或回滾。
事務在異地成員上的執(zhí)行過程
通訊模塊將事務排序后發(fā)送到全局事務認證模塊。全局事務認證模塊認證成功后,將該事務的Binlog Event寫入Relay log,由group_replication_applier通道來執(zhí)行。如果全局事務認證模塊認證失敗,則會丟棄該事務的Binlog Event。
另外有需要云服務器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。
分享名稱:說MGR-全局事務認證模塊&異地事務執(zhí)行模塊-創(chuàng)新互聯(lián)
URL地址:http://www.chinadenli.net/article46/docgeg.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供定制開發(fā)、品牌網(wǎng)站設計、網(wǎng)站設計公司、微信小程序、虛擬主機、網(wǎng)站導航
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容