網際網路一致性架構設計 DB雙主一致性

2021-09-02 21:05:14 字數 2676 閱讀 7827

網際網路一致性架構設計 -- db雙主一致性

mysql資料庫集群常使用一主多從,主從同步,讀寫分離的方式來擴充資料庫的讀效能,保證讀庫的高可用,但此時寫庫仍然是單點。

解決方法

在乙個mysql資料庫集群中可以設定兩個主庫,並設定雙向同步,以冗餘寫庫的方式來保證寫庫的高可用。

需求分析

資料冗餘會引發資料的一致性問題,因為資料的同步有乙個時間差,併發的寫入可能導致資料同步失敗,引起資料丟失,假設主庫使用了auto increment來作為自增主鍵:

兩個mysql-master設定雙向同步可以用來保證主庫的高可用

資料庫中現存的記錄主鍵是1,2,3

主庫1插入了一條記錄,主鍵為4,並向主庫2同步資料

資料同步成功之前,主庫2也插入了一條記錄,由於資料還沒有同步成功,插入記錄生成的主鍵也為4,並向主庫1也同步資料

主庫1和主庫2都插入了主鍵為4的記錄,雙主同步失敗,資料不一致

解決方法

相同步長免衝突

如上圖所示:

兩個mysql-master設定雙向同步可以用來保證主庫的高可用

庫1的自增初始值是1,庫2的自增初始值是2,增長步長都為2

庫1中插入資料主鍵為1/3/5/7,庫2中插入資料主鍵為2/4/6/8,不衝突

資料雙向同步後,兩個主庫會包含全部資料

如上圖所示

兩個主庫最終都將包含1/2/3/4/5/6/7/8所有資料,即使有乙個主庫掛了,另乙個主庫也能夠保證寫庫的高可用。

上游生成id避衝突

完全可以由業務上游,使用統一的id生成器,來保證id的生成不衝突:

如上圖所示

呼叫方插入資料時,帶入全域性唯一id,而不依賴於資料庫的auto increment,也能解決這個問題。至於如何生成全域性唯一,趨勢遞增的id,參見文章《分布式id生成演算法》。

消除雙寫不治本

使用auto increment兩個主庫併發寫可能導致資料不一致,只使用乙個主庫提供服務,另乙個主庫作為shadow-master,只用來保證高可用。

如上圖所示:

兩個mysql-master設定雙向同步可以用來保證主庫的高可用

只有主庫1對外提供寫入服務

兩個主庫設定相同的虛ip,在主庫1掛掉或者網路異常的時候,虛ip自動漂移,shadow master頂上,保證主庫的高可用

缺陷

這個切換由於虛ip沒有變化,所以切換過程對呼叫方是透明的,但在極限的情況下,也可能引發資料的不一致。

如上圖所示:

兩個mysql-master設定雙向同步可以用來保證主庫的高可用,並設定了相同的虛ip

網路抖動前,主庫1對上游提供寫入服務,插入了一條記錄,主鍵為4,並向shadow master主庫2同步資料

突然主庫1網路異常,keepalived檢測出異常後,實施虛ip漂移,主庫2開始提供服務

在主鍵4的資料同步成功之前,主庫2插入了一條記錄,也生成了主鍵為4的記錄,結果導致資料不一致

內網dns探測

虛ip漂移,雙主同步延時導致的資料不一致,本質上,需要在雙主同步完資料之後,再實施虛ip偏移,使用內網dns探測,可以實現shadow master延時高可用:

使用內網網域名稱連線資料庫,例如:db.58daojia.org

主庫1和主庫2設定雙主同步,不使用相同虛ip,而是分別使用ip1和ip2

一開始db.58daojia.org指向ip1

用乙個小指令碼輪詢探測ip1主庫的連通性

當ip1主庫發生異常時,小指令碼delay乙個x秒的延時,等待主庫2同步完資料之後,再將db.58daojia.org解析到ip2

程式以內網網域名稱進行重連,即可自動連線到ip2主庫,並保證了資料的一致性

總結

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

雙主同步是一種常見的保證寫庫高可用的方式

設定相同步長,不同初始值,可以避免auto increment生成衝突主鍵

不依賴資料庫,業務呼叫方自己生成全域性唯一id是乙個好方法

shadow master保證寫庫高可用,只有乙個寫庫提供服務,並不能完全保證一致性

內網dns探測,可以實現在主庫1出現問題後,延時乙個時間,再進行主庫切換,以保證資料一致性

網際網路一致性架構設計 session一致性

網際網路一致性架構設計 session一致性 session是什麼 伺服器為每個使用者建立乙個會話,儲存使用者的相關資訊,以便多次請求能夠定位到同乙個上下文。web開發中,web server可以自動為同乙個瀏覽器的訪問使用者自動建立session,提供資料儲存功能。最常見的,會把使用者的登入資訊 ...

網際網路一致性架構設計 DB和Cache一致性

網際網路一致性架構設計 db和cache一致性 需求分析 下面兩種情況會出現髒資料 單庫情況下 服務層的併發讀寫,快取與資料庫的操作交叉進行,這種情況雖然少見,但理論上是存在的,後發起的請求b在先發起的請求a中間完成了。1.請求a發起乙個寫操作,第一步淘汰了cache,然後這個請求因為各種原因在服務...

關於網際網路「一致性」架構設計的一切

前篇 都收到好評 本文再做總結,體系化介紹網際網路一致性架構技術。一 session一致性 文章 session一致性,架構設計,實踐 內容 二 資料庫主從一致性 文章 資料庫主從一致性,架構設計,實踐 內容 三 資料庫雙主一致性 文章 資料庫雙主一致性,架構設計,實踐 內容 四 資料庫與快取一致性...