掃二維碼與項(xiàng)目經(jīng)理溝通
我們?cè)谖⑿派?4小時(shí)期待你的聲音
解答本文疑問(wèn)/技術(shù)咨詢/運(yùn)營(yíng)咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流
一、雙主保證高可用

超過(guò)十多年行業(yè)經(jīng)驗(yàn),技術(shù)領(lǐng)先,服務(wù)至上的經(jīng)營(yíng)模式,全靠網(wǎng)絡(luò)和口碑獲得客戶,為自己降低成本,也就是為客戶降低成本。到目前業(yè)務(wù)范圍包括了:網(wǎng)站制作、網(wǎng)站建設(shè),成都網(wǎng)站推廣,成都網(wǎng)站優(yōu)化,整體網(wǎng)絡(luò)托管,微信小程序,微信開(kāi)發(fā),重慶App定制開(kāi)發(fā),同時(shí)也可以讓客戶的網(wǎng)站和網(wǎng)絡(luò)營(yíng)銷和我們一樣獲得訂單和生意!
MySQL數(shù)據(jù)庫(kù)集群常使用一主多從,主從同步,讀寫(xiě)分離的方式來(lái)擴(kuò)充數(shù)據(jù)庫(kù)的讀性能,保證讀庫(kù)的高可用,但此時(shí)寫(xiě)庫(kù)仍然是單點(diǎn)。
在一個(gè)MySQL數(shù)據(jù)庫(kù)集群中可以設(shè)置兩個(gè)主庫(kù),并設(shè)置雙向同步,以冗余寫(xiě)庫(kù)的方式來(lái)保證寫(xiě)庫(kù)的高可用。
二、并發(fā)引發(fā)不一致
數(shù)據(jù)冗余會(huì)引發(fā)數(shù)據(jù)的一致性問(wèn)題,因?yàn)閿?shù)據(jù)的同步有一個(gè)時(shí)間差,并發(fā)的寫(xiě)入可能導(dǎo)致數(shù)據(jù)同步失敗,引起數(shù)據(jù)丟失:
如上圖所述,假設(shè)主庫(kù)使用了auto increment來(lái)作為自增主鍵:
三、相同步長(zhǎng)免沖突
能否保證兩個(gè)主庫(kù)生成的主鍵一定不沖突呢?
回答:
就能夠做到。
如上圖所示:
如上圖所示,兩個(gè)主庫(kù)最終都將包含1/2/3/4/5/6/7/8所有數(shù)據(jù),即使有一個(gè)主庫(kù)掛了,另一個(gè)主庫(kù)也能夠保證寫(xiě)庫(kù)的高可用。
四、上游生成ID避沖突
換一個(gè)思路,為何要依賴于數(shù)據(jù)庫(kù)的自增ID,來(lái)保證數(shù)據(jù)的一致性呢?
完全可以由業(yè)務(wù)上游,使用統(tǒng)一的ID生成器,來(lái)保證ID的生成不沖突:
如上圖所示,調(diào)用方插入數(shù)據(jù)時(shí),帶入全局***ID,而不依賴于數(shù)據(jù)庫(kù)的auto increment,也能解決這個(gè)問(wèn)題。
至于如何生成全局***,趨勢(shì)遞增的ID,參見(jiàn)文章《分布式ID生成算法》。
五、消除雙寫(xiě)不治本
使用auto increment兩個(gè)主庫(kù)并發(fā)寫(xiě)可能導(dǎo)致數(shù)據(jù)不一致,只使用一個(gè)主庫(kù)提供服務(wù),另一個(gè)主庫(kù)作為shadow-master,只用來(lái)保證高可用,能否避免一致性問(wèn)題呢?
如上圖所示:
這個(gè)切換由于虛IP沒(méi)有變化,所以切換過(guò)程對(duì)調(diào)用方是透明的,但在極限的情況下,也可能引發(fā)數(shù)據(jù)的不一致:
如上圖所示:
六、內(nèi)網(wǎng)DNS探測(cè)
虛IP漂移,雙主同步延時(shí)導(dǎo)致的數(shù)據(jù)不一致,本質(zhì)上,需要在雙主同步完數(shù)據(jù)之后,再實(shí)施虛IP偏移,使用內(nèi)網(wǎng)DNS探測(cè),可以實(shí)現(xiàn)shadow master延時(shí)高可用:
七、總結(jié)
主庫(kù)高可用,主庫(kù)一致性,一些小技巧:
【本文為專欄作者“58沈劍”原創(chuàng)稿件,轉(zhuǎn)載請(qǐng)聯(lián)系原作者】

我們?cè)谖⑿派?4小時(shí)期待你的聲音
解答本文疑問(wèn)/技術(shù)咨詢/運(yùn)營(yíng)咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流