主庫(kù)等待 ACK 返回的默認(rèn)時(shí)間是60s,超過 60s 會(huì)降級(jí)成異步并提交事務(wù) 。有時(shí)因?yàn)榫W(wǎng)絡(luò)問題從庫(kù)一直沒有響應(yīng),為了確保主庫(kù)可用性,我們會(huì)犧牲部分一致性要求,這是符合生產(chǎn)場(chǎng)景的 。對(duì)一致性要求極高的環(huán)境,會(huì)將 ACK 返回時(shí)間設(shè)置為無(wú)窮大,這樣雖然保證了一致性,但是會(huì)影響部分可用性 。
(3)第三種情況,一主多從,日志丟失 。有一種極端情況,即使是增強(qiáng)半同步,也會(huì)出現(xiàn)數(shù)據(jù)層和應(yīng)用層的數(shù)據(jù)不一致,見圖 4 。
image
圖4 一主多從出現(xiàn)數(shù)據(jù)不一致的情況
在一主多從的情況下,將應(yīng)答從庫(kù)數(shù)量設(shè)置為 1,同城數(shù)據(jù)中心 A 的從庫(kù)首先接收到日志并返回 ACK 給主庫(kù),主庫(kù)就可以正常提交 。如果數(shù)據(jù)中心 A 的主庫(kù)和從庫(kù)均發(fā)生宕機(jī),而這此時(shí)日志尚未發(fā)送給數(shù)據(jù)庫(kù)中心 B、異地?cái)?shù)據(jù)中心的從庫(kù),并且發(fā)生了主從切換,那么這兩個(gè)數(shù)據(jù)中心從庫(kù)就會(huì)在數(shù)據(jù)層和應(yīng)用層均出現(xiàn)和原主庫(kù)數(shù)據(jù)不一致的現(xiàn)象 。
解決方法 :一是增加同城數(shù)據(jù)中心A 從庫(kù)數(shù)量(盡量放置在不同機(jī)房單元或區(qū)域),并增加應(yīng)答從庫(kù)數(shù)量 。這樣會(huì)增加一些成本,而且不能解決數(shù)據(jù)中心整體故障導(dǎo)致的數(shù)據(jù)不一致問題 。二是增加應(yīng)答從庫(kù)數(shù)量 。比如一主三從的模式下,將應(yīng)答從庫(kù)數(shù)量設(shè)為 2,這樣能確保同城 B中心的一個(gè)從庫(kù)返回 ACK 后才提交,保證了同城 B 中心的數(shù)據(jù)一致性 。但在同城數(shù)據(jù)中心間網(wǎng)絡(luò)不穩(wěn)定的情況下,對(duì)系統(tǒng)性能會(huì)有較大影響 。對(duì)于要求 RPO 嚴(yán)格為零的關(guān)鍵系統(tǒng),且兩中心間網(wǎng)絡(luò)安全可靠的前提下,可以采取這種方法,其他系統(tǒng)不必要采用 。三是將同城雙中心擴(kuò)展為同城三中心或多中心,同時(shí)增加應(yīng)答從庫(kù)數(shù)量 。這是最佳方式,但成本過高,具備此條件的數(shù)據(jù)中心可以采用 。
總 結(jié)
究竟該如何最大程度地避免數(shù)據(jù)不一致的發(fā)生呢?總結(jié)如下 :一是采用較高版本的 MySQL 數(shù)據(jù)庫(kù)產(chǎn)品,至少在 5.7及以上版本,啟用增強(qiáng)半同步 。二是回退掉 PendingBinlog,采用雙 1 參數(shù),ROW格式,開啟 GTID 。三是使用第三方插件如 MHA、keepalived 設(shè)置主庫(kù)切換策略,發(fā)生宕機(jī)后不馬上切換,嘗試 N 次重啟后再切換,另外從庫(kù)提升為主庫(kù)后,嘗試從原主庫(kù)拉取日志補(bǔ)齊(系統(tǒng)正常,MySQL 數(shù)據(jù)庫(kù)無(wú)法啟動(dòng)的情況) 。四是建立自動(dòng)切換工具,啟用數(shù)據(jù)校驗(yàn)和補(bǔ)齊機(jī)制 。五是條件允許的情況下,增加數(shù)據(jù)中心數(shù)量、從庫(kù)數(shù)量,增加應(yīng)答從庫(kù)數(shù)量 。
最后,附上我行某信息系統(tǒng)的一個(gè)實(shí)際案例(見圖 5),供讀者參考 。數(shù)據(jù)庫(kù)版本為MySQL 5.7,主要采用了以下措施:一是采用了一主三從模式,同城雙數(shù)據(jù)中心,其中一個(gè)主庫(kù)和一個(gè)從庫(kù)在同城 A機(jī)房,另兩個(gè)從庫(kù)在同城 B 機(jī)房 。二是采用了增強(qiáng)半同步,由于系統(tǒng) RPO 接近但可不為零,故應(yīng)答從庫(kù)數(shù)量設(shè)置為 1 。三是完備的切換策略,主庫(kù)嘗試 N 次(N分鐘)啟動(dòng)后再切換,基于自定義權(quán)重和最新 GTID 進(jìn)行選主 。四是數(shù)據(jù)校驗(yàn)和補(bǔ)齊機(jī)制功能,切換后,備選主庫(kù)校驗(yàn)發(fā)現(xiàn)還有未同步的 Binlog,會(huì)嘗試從原主庫(kù)獲取最新的 Binlog 日志并應(yīng)用 。
image
以上關(guān)于本文的內(nèi)容,僅作參考!溫馨提示:如遇健康、疾病相關(guān)的問題,請(qǐng)您及時(shí)就醫(yī)或請(qǐng)專業(yè)人士給予相關(guān)指導(dǎo)!
「愛刨根生活網(wǎng)」www.malaban59.cn小編還為您精選了以下內(nèi)容,希望對(duì)您有所幫助:- mysql數(shù)據(jù)庫(kù)怎么查看優(yōu)化 mysql數(shù)據(jù)庫(kù)查詢語(yǔ)句優(yōu)化
- 哪些筆記本可以更換顯卡 如何切換顯卡
- 創(chuàng)建數(shù)據(jù)庫(kù)的教程 免費(fèi)mysql數(shù)據(jù)庫(kù)空間
- 數(shù)據(jù)庫(kù)安裝教程 mysql服務(wù)器安裝配置
- 安裝mysql詳細(xì)步驟 如何下載mysql以及安裝
- 抖音怎么切換賬號(hào)、抖音怎么退出賬號(hào) 抖音怎么切換賬號(hào)不用退出原賬號(hào)
- 如何切換輸入法 電腦模式怎樣切換輸入法
- js控制div顯示隱藏實(shí)現(xiàn) jq點(diǎn)擊隱藏再點(diǎn)擊顯示切換
- 講解centos7安裝圖形化界面 centos可視化界面切換
- php增刪改查mysql實(shí)例 php操作數(shù)據(jù)庫(kù)的步驟
