成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

MySQL雙主一致性架構優化

開發 開發工具
在一個MySQL數據庫集群中可以設置兩個主庫,并設置雙向同步,以冗余寫庫的方式來保證寫庫的高可用。

一、雙主保證高可用

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

在一個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的生成不沖突:

調用方插入數據時,帶入全局***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出現問題后,延時一個時間,再進行主庫切換,以保證數據一致性

【本文為51CTO專欄作者“58沈劍”原創稿件,轉載請聯系原作者】

戳這里,看該作者更多好文

責任編輯:趙寧寧 來源: 51CTO專欄
相關推薦

2024-05-08 16:37:17

MySQLRedis數據庫

2017-07-25 14:38:56

數據庫一致性非鎖定讀一致性鎖定讀

2025-03-24 10:17:01

2022-12-14 08:23:30

2017-05-19 15:00:05

session架構web-server

2021-06-11 09:21:58

緩存數據庫Redis

2021-02-05 08:00:48

哈希算法?機器

2021-02-02 12:40:50

哈希算法數據

2024-01-22 08:52:00

AQS雙異步數據一致性

2021-06-04 09:56:12

RedisMySQL美團

2024-08-06 09:42:23

2020-11-24 09:03:41

一致性MySQLMVCC

2020-05-12 10:43:22

Redis緩存數據庫

2022-03-22 09:54:22

Hash算法

2021-06-30 21:13:49

CPUCache數據

2022-10-19 12:22:53

并發扣款一致性

2022-05-05 08:32:29

NacosAP架構

2022-03-31 08:21:14

數據庫緩存雙寫數據一致性

2021-02-04 06:30:26

Python編程語言

2022-04-06 15:19:32

數據庫MySQL一致性
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 男女羞羞在线观看 | 日日噜噜夜夜爽爽狠狠 | 久久九 | 九九热久久免费视频 | 一区日韩 | 91久久精品国产91久久 | 精品国产青草久久久久福利 | 成人做爰www免费看 午夜精品久久久久久久久久久久 | 亚洲精品国产综合区久久久久久久 | 九九热这里 | 国产欧美日韩精品在线观看 | 精品国产乱码久久久久久影片 | wwwww在线观看 | 国产探花在线精品一区二区 | 一区二区三区视频在线免费观看 | 成人日韩 | 久久国产精品精品 | 国产亚洲精品久久久久动 | 欧美日韩专区 | 国产超碰人人爽人人做人人爱 | 久婷婷 | 欧美亚洲在线 | 国产福利在线播放麻豆 | 国产精品一区二区在线免费观看 | 免费国产视频 | 国产福利在线视频 | 中日韩欧美一级片 | 嫩草视频在线免费观看 | 欧美成视频在线观看 | 久久亚洲国产精品日日av夜夜 | 国产精品三级 | 国产美女一区二区 | 99精品免费久久久久久久久日本 | 亚洲免费在线视频 | 久久激情视频 | 久草热视频 | 热久色 | 亚洲国产成人精品在线 | 日韩精品成人av | 免费看色| 国产高清久久久 |