精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

MySQL讀寫分離,寫完讀不到問題如何解決

數據庫 MySQL
今天我們來詳細了解一下主從同步延遲時讀寫分離發生寫后讀不到的問題,依次講解問題出現的原因,解決策略以及 Sharding-jdbc、MyCat 和 MaxScale 等開源數據庫中間件具體的實現方案。

[[385898]]

本文轉載自微信公眾號「程序員歷小冰」,作者歷小冰 。轉載本文請聯系程序員歷小冰公眾號。

大家好,我是歷小冰。

今天我們來詳細了解一下主從同步延遲時讀寫分離發生寫后讀不到的問題,依次講解問題出現的原因,解決策略以及 Sharding-jdbc、MyCat 和 MaxScale 等開源數據庫中間件具體的實現方案。

寫后讀不到問題

MySQL 經典的一主兩從三節點架構是大多數創業公司初期使用的主流數據存儲方案之一,主節點處理寫操作,兩個從節點處理讀操作,分攤了主庫的壓力。

但是,有時候可能會遇到執行完寫操作后,立刻去讀發現讀不到或者讀到舊狀態的尷尬場景。這是由于主從同步可能存在延遲,在主節點執行完寫操作,再去從節點執行讀操作,讀取了之前舊的狀態。

 

上圖展示了此類問題出現的操作順序示意圖:

•客戶端首先通過代理向主節點 Master 進行了寫入操作

•緊接著第二步去從節點 Slave A 執行讀操作,此時 Master 和 Slave A 之間的同步還未完成,所以第二步的讀操作讀取到了舊狀態

•當第五步再次進行讀操作時,此時同步已經完成,所以可以從 Slave B 中讀取到正確的狀態。

下面,我們就來看一下為什么會出現此類問題。

MySQL 主從同步

理解問題背后發生的原因,才能更好的解決問題。MySQL 主從復制的過程大致如下圖所示,本篇文章只講解同步過程中的流程,建立同步連接和失聯重傳不是重點,暫不講解,感興趣的同學可以自行了解。

 

MySQL 主從復制,涉及主從兩個節點,一共四個四個線程參與其中:

  • 主節點的 Client Thread,處理客戶端請求的線程,執行如圖所示的1~5步驟,2,3,4步驟是為了保證數據的一致性和盡量減少丟失,第三步驟時會通知 Dump Thread;
  • 主節點的 Dump Thread,接收到 Client Thread 通知后,負責讀取本地的 binlog 的數據,將 binlog 數據,binlog 文件名 以及當前發送 binlog 的位置信息發送給從節點;
  • 從節點的 IO Thread 負責接收 Dump Thread 發送的 binlog 數據和相關位置信息,將其追加到本地的 relay log 等文件中;
  • 從節點的 SQL Thread 檢測到 relay log 追加了新數據,則解析其內容(其實就是解析 binlog 文件的內容)為可以執行的 SQL 語句,然后在本地數據執行,并記錄下當前執行的 relay log 位置。

上述是默認的異步同步模式,我們發現,從主節點提交成功到從節點同步完成,中間間隔了6,7,8,9,10多個步驟,涉及到一次網絡傳輸,多次文件讀取和寫入的磁盤 IO 操作,以及最后的 SQL 執行的 CPU 操作。

所以,當主從節點間網絡傳輸出現問題,或者從節點性能較低時,主從節點間的同步就會出現延遲,導致文章一開始提及的寫后讀不到的問題。在高并發場景,從節點一般要過幾十毫秒,甚至幾百毫秒才能讀到最新的狀態。

常見的解決策略

一般來講,大致有如下方案解決寫后讀不出問題:

•強制走主庫

•判斷主備無延遲

•等主庫位點或 GTID 方案

強制走主庫

強制走主庫方案最容易理解和實現,它也是最常用的方案。顧名思義,它就是強制讓部分必須要讀到最新狀態的讀操作去主節點執行,這樣就不會出現寫后讀不出問題。這種方案問題在于將一部分讀壓力給了主節點,部分破化了讀寫分離的目的,降低了整個系統的擴展性。

一般主流的數據庫中間件都提供了強制走主庫的機制,比如,在 sharding-jdbc 中,可以使用 Hint 來強制路由主庫。

 

它的原理就是在 SQL 語句前添加 Hint,然后數據庫中間件會識別出 Hint,將其路由到主節點。

下面,我們就來看一下如果要去從庫查詢,并且要避免過期讀的方案,并分析各個方案的優缺點。

判斷主備無延遲

第二種方案是使用 show slave status 語句結果中的部分值來判斷主從同步的延遲時間:

  1. > show slave status 
  2. *************************** 1. row *************************** 
  3. Master_Log_File: mysql-bin.001822 
  4. Read_Master_Log_Pos: 290072815 
  5. Seconds_Behind_Master: 2923 
  6. Relay_Master_Log_File: mysql-bin.001821 
  7. Exec_Master_Log_Pos: 256529431 
  8. Auto_Position: 0 
  9. Retrieved_Gtid_Set:  
  10. Executed_Gtid_Set:  
  11. ..... 

•seconds_behind_master,表示落后主節點秒數,如果此值為0,則表示主從無延遲

•Master_Log_File 和 Read_Master_Log_Pos,表示的是讀到的主庫的最新位點,Relay_Master_Log_File 和 Exec_Master_Log_Pos,表示的是備庫執行的最新位點。如果這兩組值相等,則表示主從無延遲

•Auto_Position=1 ,表示使用了 GTID 協議,并且備庫收到的所有日志的 GTID 集合 Retrieved_Gtid_Set 和 執行完成的 GTID 集合 Executed_Gtid_Set 相等,則表示主從無延遲。

在進行讀操作前,先根據上述方式來判斷主從是否有延遲,如果有延遲,則一直等待到無延遲后執行。但是這類方案在判斷是否有延遲時存在著假陽和假陰的問題:

•判斷無延遲,其他延遲了。因為上述判斷是基于從節點的狀態,當主節點的 Dump Thread 尚未將最新狀態發送給從節點的 IO SQL 時,從節點可能會錯誤的判斷自己和主節點無延遲。

•判斷有延遲,但是讀操作讀取的最新狀態已經同步。因為 MySQL 主從復制是一直在進行的,寫后直接讀的同時可能還有其他無關寫操作,雖然主從有延遲,但是對于第一次寫操作的同步已經完成,所以讀操作已經可以讀到最新的狀態。

對于第一個問題,需要使用主從復制的 semi-sync 模式,上文中講解介紹的是默認的異步模式,semi-sync 模式的流程如下圖所示:

 

•當主節點事務提交的時候,Dump Thread 把 binlog 發給從節點;

•從節點的 IO Thread 收到 binlog 以后,發回給主節點一個 ack,表示收到了;

•主節點的 Dump Thread 收到這個 ack 以后,再通知 Client Thread ,此時才能給客戶端返回執行成功的響應。

這樣,寫操作執行后,就確保從節點已經讀取到主節點發送的 binglog 數據,即 Master_Log_File、 Read_Master_Log_Pos 或 Retrieved_Gtid_Set 是最新的,這樣才能與執行的相關數據進行對比,判斷是否有延遲。

可惜的是,上述 semi-sync 模式只需要等待一個從節點的ACK,所以一主多從的模式該方案將會無效。

雖然該方案有種種問題,但是對于一致性要求不那么高的場景也能適用,比如 MyCat 就是用 seconds_behind_master 是否落后主節點過多,如果超過一定閾值,就將其從有效從節點列表中刪除,不再將讀請求路由到它身上。

在 MyCAT 的用于監聽從節點狀態,發送心跳的 MySQLDetector 類中,它會讀取從節點的 seconds_behind_master,如果其值大于配置的 slaveThreshold,則將打印日志,并將延遲時間設置到心跳信息中。

 

下面,我們就介紹能夠解決第二個問題的方案,即判斷有延遲,但是讀操作讀取的特定最新狀態已經同步。

等GTID 方案

首先介紹一下 GTID,也就是全局事務 ID,是一個事務在提交的時候生成的,是這個事務的唯一標識。它由MySQL 實例的uuid和一個整數組成,該整數由該實例維護,初始值是 1,每次該實例提交事務后都會加一。

MySQL 提供了一條基于 GTID 的命令,用于在從節點上執行,等待從庫同步到了對應的 GTID(binlog文件中會包含 GTID),或者超時返回。

 

MySQL 在執行完事務后,會將該事務的 GTID 會給客戶端,然后客戶端可以使用該命令去要執行讀操作的從庫中執行,等待該 GTID,等待成功后,再執行讀操作;如果等待超時,則去主庫執行讀操作,或者再換一個從庫執行上述流程。

MariaDB 的 MaxScale 就是使用該方案,MaxScale 是 MariaDB 開發的一個數據庫智能代理服務(也支持 MySQL),允許根據數據庫 SQL 語句將請求轉向目標一個到多個服務器,可設定各種復雜程度的轉向規則。

 

MaxScale 在其 readwritesplit.hh 頭文件和 rwsplit_causal_reads.cc 文件中的 add_prefix_wait_gtid 函數中使用了上述方案。

 

舉個例子,原來要執行讀操作的 SQL 和添加了前綴的 SQL 如下所示:

當 WAIT_FOR_EXECUTED_GTID_SET 執行失敗后,原 SQL 就不會再執行,而是將該 SQL 去主節點執行。

 

責任編輯:武曉燕 來源: 程序員歷小冰
相關推薦

2017-09-01 10:48:33

分離CQRS性能

2022-02-22 11:54:05

跨域項目前后端

2023-10-30 18:35:47

MySQL主從延時

2018-10-16 16:45:05

數據庫讀寫分離

2010-05-17 11:19:44

MySQL proxy

2024-12-05 09:06:58

2012-09-05 11:09:15

SELinux操作系統

2021-10-20 20:27:55

MySQL死鎖并發

2025-02-11 12:29:58

2021-09-26 06:43:07

MySQL深分頁優化

2021-11-09 10:20:15

MySQL深分頁數據庫

2021-09-27 13:33:03

MySQL深分頁數據庫

2011-08-08 10:29:12

MySQL

2022-10-13 14:11:29

瀏覽器域名端口

2013-08-21 10:30:37

iOSNSBundle pa解決

2010-04-29 17:46:31

Oracle死鎖

2011-03-15 13:30:27

IBatis.netMySQL

2017-12-26 16:18:00

架構服務化讀寫分離

2010-07-16 13:52:26

telnet漏洞

2017-10-17 09:21:06

點贊
收藏

51CTO技術棧公眾號

亚洲av成人片色在线观看高潮| 国产日韩成人精品| 亚洲天堂网中文字| 欧美精品激情在线| 亚洲 国产 日韩 综合一区| 免费在线观看日韩| 久久亚洲人体| 91色视频在线| 欧美激情xxxxx| 免费一区二区三区在线观看| 少妇av一区二区| 91亚洲国产| 色综合夜色一区| 国产经品一区二区| 极品美妇后花庭翘臀娇吟小说| 中文字幕乱码在线播放| www.日韩大片| 欧美成人三级视频网站| 国产精品久久a| 国产在线观看免费| 亚洲免费专区| 亚洲一区二区免费视频| 91久久精品久久国产性色也91| 永久免费av无码网站性色av| a一区二区三区| 91视频国产资源| 国产精品偷伦一区二区| 日本爱爱爱视频| 伊人www22综合色| 一区二区成人在线观看| 亚洲一区二区三区四区视频| 无码人妻丰满熟妇啪啪欧美| 人人爱人人干婷婷丁香亚洲| 亚洲免费av网站| 91影视免费在线观看| 中文字幕激情小说| 亚洲电影男人天堂| 欧美一级免费观看| 米仓穗香在线观看| 成人久久久精品国产乱码一区二区 | 免费的毛片视频| 国产精品任我爽爆在线播放| 亚洲一区av在线| 亚洲一卡二卡三卡四卡无卡网站在线看| www.欧美色| 欧美色图一区| 欧美日韩国产在线播放网站| 一区二区日本伦理| 国产日韩精品在线看| 久久三级福利| 日韩性生活视频| 超碰中文字幕在线观看| a天堂中文在线官网在线| 成人在线视频一区二区| 欧美在线一级va免费观看| 中文字幕成人动漫| 国产精品va视频| 亚洲午夜一二三区视频| 只有这里有精品| 无码精品视频一区二区三区| 免费日韩av片| 久久精品这里热有精品| 无码人妻一区二区三区免费n鬼沢| heyzo高清国产精品| 久久人人爽人人爽| 91老司机在线| 91肉色超薄丝袜脚交一区二区| 欧美日韩网站| 亚洲天堂免费视频| 日韩少妇内射免费播放18禁裸乳| 国产在线一二| 国产日韩欧美精品一区| 日本午夜精品电影| www.欧美国产| 日韩av网站在线观看| 欧美猛男性生活免费| 国产精品1000部啪视频| 亚洲日本免费电影| 黑人欧美xxxx| 日本黄色a视频| 天天干天天色天天| 91视频一区二区| 欧美日韩一区在线观看视频| 99国产成人精品| 老鸭窝毛片一区二区三区| 国产一区二区三区网站| 亚洲天堂最新地址| 蜜桃一区av| 欧美视频精品在线观看| 久操网在线观看| 91视频在线观看| 99久久伊人网影院| 欧美一区二区在线视频观看| 成人三级黄色免费网站| 99久久久国产精品免费蜜臀| 久久久久久亚洲精品不卡4k岛国 | 免费在线观看黄| 91在线云播放| 亚洲精品免费网站| 日本成人动漫在线观看| 国产精品一区二区三区99| 国产精品www网站| 国产精品100| 亚洲小说区图片区| zzjj国产精品一区二区| 免费三片在线播放| 日韩电影免费在线| 日本三级久久久| 91看片在线播放| 亚洲视频久久| 久久99热这里只有精品国产 | 欧美激情亚洲| 日本视频久久久| 不卡视频免费在线观看| 国产亚洲女人久久久久毛片| 日本丰满大乳奶| 不卡福利视频| 欧美xxxxxxxx| 制服下的诱惑暮生| 996久久国产精品线观看| 精品日韩99亚洲| 少妇高潮惨叫久久久久| 91综合视频| 久久青草福利网站| 日本网站在线播放| 国产一区二区三区精品视频| 91丨九色丨国产在线| 美丽的姑娘在线观看免费动漫| 久久综合一区二区| 伊人久久在线观看| 91av亚洲| 亚洲精品短视频| 熟女少妇一区二区三区| 中国成人一区| 久久久在线免费观看| 91亚洲精品国偷拍自产在线观看| 久久综合久久综合久久| 成年人看的毛片| 中文字幕高清在线播放| 亚洲成人av片在线观看| 可以直接看的无码av| 国内精品久久久久久久影视蜜臀| 国产欧美日韩免费| 一本色道久久综合亚洲| 国内精品伊人久久久久av一坑| 444亚洲人体| 好吊视频一二三区| 亚洲欧美另类久久久精品 | 一级特黄曰皮片视频| 在线高清一区| 91情侣在线视频| 在线免费黄色| 精品婷婷伊人一区三区三| 右手影院亚洲欧美| 在线欧美亚洲| 超碰97在线播放| 天堂在线一二区| 91丨九色丨尤物| 国产爆乳无码一区二区麻豆| 在线中文字幕电影| 亚洲一区在线播放| 羞羞的视频在线| 波多野结衣一区二区三区免费视频| 日韩免费性生活视频播放| 黄色av免费播放| 日日摸夜夜添夜夜添国产精品| 久久99国产精品99久久| 澳门成人av网| 亚洲另类激情图| 亚洲一区视频在线播放| 久久五月激情| 日韩欧美99| jvid一区二区三区| 3d成人h动漫网站入口| 交换做爰国语对白| 国产精品麻豆久久| 韩国福利视频一区| 亚洲天堂久久久久| 国产精品国产三级国产aⅴ无密码| 男人插女人下面免费视频| 国产精品美女午夜爽爽| 最近2019年好看中文字幕视频 | 亚洲精品视频自拍| 涩多多在线观看| 成午夜精品一区二区三区软件| 欧美裸体xxxx极品少妇| 刘玥91精选国产在线观看| 亚洲18女电影在线观看| 1314成人网| 欧美国产高潮xxxx1819| 国产极品jizzhd欧美| 国产黄色一级大片| 久久久精品中文字幕麻豆发布| 国产美女视频免费| 日本成人精品| 久久免费国产精品1| 蜜桃av噜噜一区二区三区麻豆| 福利视频第一区| 少妇av片在线观看| 国产在线精品视频| 国产www免费| 国产精品片aa在线观看| 国产精品久久久久7777婷婷| 日本暖暖在线视频| 亚洲成人精品在线观看| 性欧美videossex精品| 国产精品二区不卡| 99c视频在线| www.久久| 97精品国产97久久久久久| 国模精品一区二区| 欧美一区二区三区啪啪| 免费黄在线观看| 国精品**一区二区三区在线蜜桃| 日b视频免费观看| 蜜桃tv一区二区三区| 色在人av网站天堂精品| 午夜影院在线视频| 在线观看一区不卡| 大黑人交xxx极品hd| 久久99国内精品| 亚洲第一导航| 不卡福利视频| 超碰精品一区二区三区乱码| 在线观看国产精品入口男同| 亚洲一区二区综合| 中文字幕人妻一区二区三区在线视频| 日韩av二区在线播放| 老司机激情视频| 日韩区一区二| 国产精品va在线播放| 天堂av最新在线| 欧美一级欧美三级| 国产精品51麻豆cm传媒| 久久久99精品久久| 少妇献身老头系列| 免费精品视频在线| 黄色片在线免费| 亚洲毛片一区| 国产成人精品一区二区三区福利 | 久久免费国产精品1| 污污视频在线| 日韩在线资源网| 日韩a级作爱片一二三区免费观看| 日韩精品一区二区三区在线观看| 中文天堂在线视频| 久久精品夜色噜噜亚洲aⅴ| 潘金莲一级淫片aaaaa| 久久av资源站| 91 视频免费观看| 免费在线视频一区| 亚洲中文字幕久久精品无码喷水 | 精品少妇一区二区| 中文字幕欧美色图| 舔着乳尖日韩一区| 在线观看国产免费视频| 国产一区二区导航在线播放| 天美星空大象mv在线观看视频| 午夜亚洲激情| 欧美日韩亚洲一二三| 男人的天堂亚洲| 日韩网站在线免费观看| 亚洲精品极品| 久草青青在线观看| 日本道不卡免费一区| 日本不卡在线观看| 欧美日本成人| 亚洲欧洲一区二区在线观看| 国产成人黄色| 午夜老司机精品| 色喇叭免费久久综合网| 成人xxxxx色| 亚洲精品一区二区三区中文字幕| 成人深夜直播免费观看| 美女福利一区二区| 国产精品一区二区3区| 国产亚洲欧美日韩精品一区二区三区| 国产精品久久久久久网站| 国产毛片在线| 久久精品91久久香蕉加勒比| 免费av网站在线观看| 俺去啦;欧美日韩| av黄在线观看| 97不卡在线视频| 成年人视频在线免费观看| 亚洲欧美日韩中文在线制服| 毛片网站在线观看| 日韩精品中文字| 囯产精品一品二区三区| 亚洲国产成人久久| 女人天堂在线| 色偷偷av一区二区三区| 日本无删减在线| 91国语精品自产拍在线观看性色 | 97国产精品视频人人做人人爱| 亚洲黄色网址| 国产精品亚洲综合天堂夜夜| 韩国三级大全久久网站| 国产精品视频入口| 日本在线视频一区二区三区| 成人免费视频网站| 亚洲欧洲av| 婷婷视频在线播放| 亚洲在线一区| 免费在线观看污网站| 成人丝袜视频网| 国产日韩视频一区| 国产精品妹子av| 青青草视频播放| 亚洲国产高清aⅴ视频| 人妻丰满熟妇av无码久久洗澡| 国产欧美日韩中文久久| 一起草在线视频| 国产女人18毛片水真多成人如厕 | 国产午夜三级一区二区三| 亚洲成人生活片| 色综合中文字幕国产| 国产精品人人妻人人爽| 亚洲美女在线观看| 免费在线国产视频| 日韩中文字幕欧美| 国内激情视频在线观看| 国产欧美精品日韩精品| 精品国产美女| 欧洲一区二区日韩在线视频观看免费 | 国产精品久久久久久久久借妻| 国产精品成人3p一区二区三区| 久草热久草热线频97精品| 无码一区二区三区视频| 亚洲三级视频网站| 99精品久久免费看蜜臀剧情介绍| 羞羞在线观看视频| 亚洲444eee在线观看| 亚洲成人中文字幕在线| 在线不卡中文字幕| 91九色蝌蚪91por成人| 亚洲激情电影中文字幕| 日韩专区av| 国产精品香蕉在线观看| 日本成人7777| 成人国产在线看| 国产在线视频一区二区三区| 干b视频在线观看| 精品福利在线视频| a毛片在线免费观看| 久久久精品2019中文字幕神马| 久久91导航| 国产精品美女主播在线观看纯欲| 哺乳一区二区三区中文视频| 日韩一二区视频| 久久99久久久久久久久久久| 一区二区精品免费| 午夜精品在线视频一区| 色婷婷av一区二区三| 欧美猛交免费看| 亚洲午夜免费| www.xxx麻豆| 成人免费视频app| 久久精品视频8| 欧美精品一区二区三区在线| 蜜桃av鲁一鲁一鲁一鲁俄罗斯的| 欧美精品一二区| 激情综合婷婷| 国产在线视频在线| 国产超碰在线一区| 国产网站在线看| 日韩女同互慰一区二区| 在线看福利影| 国产精品区一区| 亚洲黄色毛片| 国产艳俗歌舞表演hd| 精品美女永久免费视频| 色中色在线视频| 日本视频久久久| 日本一二区不卡| 蜜臀一区二区三区精品免费视频| 国产欧美日韩综合| 国产成人精品av在线观| 欧美黑人xxxx| 国内精品国产成人国产三级粉色| 国产99久久九九精品无码| 久久这里只精品最新地址| 国产午夜麻豆影院在线观看| 日韩中文在线中文网在线观看| 亚洲久草在线| 国产高清不卡无码视频| 9l国产精品久久久久麻豆| 亚洲va在线观看| 色婷婷综合成人av| 在线日韩三级| 久草免费福利在线| 久久日一线二线三线suv| 色婷婷久久综合中文久久蜜桃av| 日韩在线视频观看| 91蝌蚪精品视频| 国产视频一区二区视频| 日韩一区中文字幕| 国产99久久久| 日韩中文字幕亚洲| 97青娱国产盛宴精品视频|