日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
MySQL雙主一致性架構(gòu)優(yōu)化

一、雙主保證高可用

超過十多年行業(yè)經(jīng)驗,技術(shù)領(lǐng)先,服務(wù)至上的經(jīng)營模式,全靠網(wǎng)絡(luò)和口碑獲得客戶,為自己降低成本,也就是為客戶降低成本。到目前業(yè)務(wù)范圍包括了:網(wǎng)站制作、網(wǎng)站建設(shè),成都網(wǎng)站推廣,成都網(wǎng)站優(yōu)化,整體網(wǎng)絡(luò)托管,微信小程序,微信開發(fā),重慶App定制開發(fā),同時也可以讓客戶的網(wǎng)站和網(wǎng)絡(luò)營銷和我們一樣獲得訂單和生意!

MySQL數(shù)據(jù)庫集群常使用一主多從,主從同步,讀寫分離的方式來擴(kuò)充數(shù)據(jù)庫的讀性能,保證讀庫的高可用,但此時寫庫仍然是單點(diǎn)。

在一個MySQL數(shù)據(jù)庫集群中可以設(shè)置兩個主庫,并設(shè)置雙向同步,以冗余寫庫的方式來保證寫庫的高可用。

二、并發(fā)引發(fā)不一致

數(shù)據(jù)冗余會引發(fā)數(shù)據(jù)的一致性問題,因為數(shù)據(jù)的同步有一個時間差,并發(fā)的寫入可能導(dǎo)致數(shù)據(jù)同步失敗,引起數(shù)據(jù)丟失:

如上圖所述,假設(shè)主庫使用了auto increment來作為自增主鍵:

  • 兩個MySQL-master設(shè)置雙向同步可以用來保證主庫的高可用
  • 數(shù)據(jù)庫中現(xiàn)存的記錄主鍵是1,2,3
  • 主庫1插入了一條記錄,主鍵為4,并向主庫2同步數(shù)據(jù)
  • 數(shù)據(jù)同步成功之前,主庫2也插入了一條記錄,由于數(shù)據(jù)還沒有同步成功,插入記錄生成的主鍵也為4,并向主庫1也同步數(shù)據(jù)
  • 主庫1和主庫2都插入了主鍵為4的記錄,雙主同步失敗,數(shù)據(jù)不一致

三、相同步長免沖突

能否保證兩個主庫生成的主鍵一定不沖突呢?

回答:

  • 設(shè)置不同的初始值
  • 設(shè)置相同的增長步長

就能夠做到。

如上圖所示:

  • 兩個MySQL-master設(shè)置雙向同步可以用來保證主庫的高可用
  • 庫1的自增初始值是1,庫2的自增初始值是2,增長步長都為2
  • 庫1中插入數(shù)據(jù)主鍵為1/3/5/7,庫2中插入數(shù)據(jù)主鍵為2/4/6/8,不沖突
  • 數(shù)據(jù)雙向同步后,兩個主庫會包含全部數(shù)據(jù)

如上圖所示,兩個主庫最終都將包含1/2/3/4/5/6/7/8所有數(shù)據(jù),即使有一個主庫掛了,另一個主庫也能夠保證寫庫的高可用。

四、上游生成ID避沖突

換一個思路,為何要依賴于數(shù)據(jù)庫的自增ID,來保證數(shù)據(jù)的一致性呢?

完全可以由業(yè)務(wù)上游,使用統(tǒng)一的ID生成器,來保證ID的生成不沖突:

如上圖所示,調(diào)用方插入數(shù)據(jù)時,帶入全局***ID,而不依賴于數(shù)據(jù)庫的auto increment,也能解決這個問題。

至于如何生成全局***,趨勢遞增的ID,參見文章《分布式ID生成算法》。

五、消除雙寫不治本

使用auto increment兩個主庫并發(fā)寫可能導(dǎo)致數(shù)據(jù)不一致,只使用一個主庫提供服務(wù),另一個主庫作為shadow-master,只用來保證高可用,能否避免一致性問題呢?

如上圖所示:

  • 兩個MySQL-master設(shè)置雙向同步可以用來保證主庫的高可用
  • 只有主庫1對外提供寫入服務(wù)
  • 兩個主庫設(shè)置相同的虛IP,在主庫1掛掉或者網(wǎng)絡(luò)異常的時候,虛IP自動漂移,shadow master頂上,保證主庫的高可用

這個切換由于虛IP沒有變化,所以切換過程對調(diào)用方是透明的,但在極限的情況下,也可能引發(fā)數(shù)據(jù)的不一致:

如上圖所示:

  • 兩個MySQL-master設(shè)置雙向同步可以用來保證主庫的高可用,并設(shè)置了相同的虛IP
  • 網(wǎng)絡(luò)抖動前,主庫1對上游提供寫入服務(wù),插入了一條記錄,主鍵為4,并向shadow master主庫2同步數(shù)據(jù)
  • 突然主庫1網(wǎng)絡(luò)異常,keepalived檢測出異常后,實施虛IP漂移,主庫2開始提供服務(wù)
  • 在主鍵4的數(shù)據(jù)同步成功之前,主庫2插入了一條記錄,也生成了主鍵為4的記錄,結(jié)果導(dǎo)致數(shù)據(jù)不一致

六、內(nèi)網(wǎng)DNS探測

虛IP漂移,雙主同步延時導(dǎo)致的數(shù)據(jù)不一致,本質(zhì)上,需要在雙主同步完數(shù)據(jù)之后,再實施虛IP偏移,使用內(nèi)網(wǎng)DNS探測,可以實現(xiàn)shadow master延時高可用:

  • 使用內(nèi)網(wǎng)域名連接數(shù)據(jù)庫,例如:db.58daojia.org
  • 主庫1和主庫2設(shè)置雙主同步,不使用相同虛IP,而是分別使用ip1和ip2
  • 一開始db.58daojia.org指向ip1
  • 用一個小腳本輪詢探測ip1主庫的連通性
  • 當(dāng)ip1主庫發(fā)生異常時,小腳本delay一個x秒的延時,等待主庫2同步完數(shù)據(jù)之后,再將db.58daojia.org解析到ip2
  • 程序以內(nèi)網(wǎng)域名進(jìn)行重連,即可自動連接到ip2主庫,并保證了數(shù)據(jù)的一致性

七、總結(jié)

主庫高可用,主庫一致性,一些小技巧:

  • 雙主同步是一種常見的保證寫庫高可用的方式
  • 設(shè)置相同步長,不同初始值,可以避免auto increment生成沖突主鍵
  • 不依賴數(shù)據(jù)庫,業(yè)務(wù)調(diào)用方自己生成全局***ID是一個好方法
  • shadow master保證寫庫高可用,只有一個寫庫提供服務(wù),并不能完全保證一致性
  • 內(nèi)網(wǎng)DNS探測,可以實現(xiàn)在主庫1出現(xiàn)問題后,延時一個時間,再進(jìn)行主庫切換,以保證數(shù)據(jù)一致性

【本文為專欄作者“58沈劍”原創(chuàng)稿件,轉(zhuǎn)載請聯(lián)系原作者】


當(dāng)前名稱:MySQL雙主一致性架構(gòu)優(yōu)化
分享網(wǎng)址:http://www.dlmjj.cn/article/dhopogg.html