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

我C,MySQL雙主架構,原來能這么玩

安全 應用安全 MySQL
MySQL最常見的集群架構,是一主多從,主從同步,讀寫分離的架構。但經常有朋友問,MySQL雙主的一致性問題,今天簡單聊一聊。

經常有朋友問,MySQL雙主的一致性問題,今天簡單聊一聊。

MySQL為什么要使用雙主架構?

MySQL最常見的集群架構,是一主多從,主從同步,讀寫分離的架構。通過這種方式,能夠擴充數據庫的讀性能,保證讀庫的高可用,但此時寫庫仍然是單點。

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

MySQL雙主架構,會存在什么問題?

如果MySQL雙主架構,同時提供服務,可能會引發數據的一致性問題。因為數據的同步有一個時間差,并發的寫入可能導致數據同步失敗,引起數據丟失。

舉個栗子:

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

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

能否在MySQL層面,保證兩個主庫生成的主鍵一定不沖突呢?

可以的,只需要為兩個主庫的自增ID:

設置不同的初始值;

設置相同的增長步長;

如上圖所示:

  • 兩個MySQL主庫設置雙向同步可以用來保證主庫的高可用;
  • 庫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,而不依賴于數據庫的auto increment,也能解決這個問題。

畫外音:如何生成全局唯一趨勢遞增的ID,不展開。

引發不一致的根本原因,是保證高可用的兩個主庫都對外提供服務,如果只有一個主庫對外提供服務,另一個主庫平時不提供服務,僅僅在主庫掛了的時候提供服務,能否消除上述數據不一致呢?

答案是悲觀的,仍然不行。

使用虛IP+keepalived的方式保證數據庫主庫的高可用,平時只有一臺主庫提供服務,也可能出現數據不一致。

如上圖所示:

  • 兩個MySQL主庫設置雙向同步可以用來保證主庫的高可用;
  • 只有主庫1對外提供寫入服務;
  • 兩個主庫設置相同的虛IP,在主庫1掛掉或者網絡異常的時候,虛IP自動漂移,備用主庫頂上,保證主庫的高可用;

切換過程中,由于虛IP沒有變化,所以切換過程對調用方是透明的,但在極限的情況下,仍可能引發數據不一致。

如上圖所示:

  • 兩個MySQL主庫設置雙向同步,可以用來保證主庫的高可用,并設置了相同的虛IP;
  • 網絡抖動前,主庫1對上游提供寫入服務,插入了一條記錄,主鍵為4,并向備用主庫2同步數據;
  • 突然主庫1網絡異常,keepalived檢測出異常后,實施虛IP漂移,備用主庫2開始提供服務;
  • 在主鍵4的數據同步成功之前,主庫2插入了一條記錄,也生成了主鍵為4的記錄,結果導致數據不一致;

有沒有辦法緩解上述問題呢?

虛IP漂移,雙主同步延時導致的數據不一致,本質上,需要在雙主同步完數據之后,再實施虛IP偏移。

使用內網DNS探測,緩解上述問題:

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

畫外音:本質上,這是一個可用性與一致性的折衷。

總結

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

  • 雙主同步是一種常見的保證寫庫高可用的方式;
  • 設置相同步長,不同初始值,可以避免auto increment生成沖突主鍵;
  • 不依賴數據庫,業務調用方自己生成全局唯一ID是一個好方法;
  • 雙主保證寫庫高可用,只有一個寫庫提供服務,并不能完全保證一致性;
  • 內網DNS探測,可以實現在主庫1出現問題后,延時一個時間,再進行主庫切換,以保證數據一致性,但犧牲了幾秒鐘的高可用;

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

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

 

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

2022-12-06 17:30:04

2018-10-28 17:54:00

分布式事務數據

2018-01-25 14:53:20

iPhone技巧刪除照片

2023-11-01 14:49:07

2021-02-07 08:13:18

@DateTimeFo@NumberFormSpring

2017-11-27 12:24:02

命令行代碼指令

2022-01-04 08:00:48

前端技術Esbuild

2014-04-11 09:22:17

MySQL雙主架構單點故障

2025-05-14 00:00:00

MySQL雙主架構循環復制

2017-11-06 19:09:45

在線抓娃娃機

2016-12-02 20:43:28

Android

2021-04-19 07:35:01

Linuxhistory命令

2021-04-26 10:24:52

Linux 開發操作系統

2014-03-31 14:59:08

大數據

2014-04-11 13:47:14

雙主架構MySQL

2021-04-19 05:42:51

Mmap文件系統

2022-06-01 07:49:43

索引數據Mysql

2022-10-31 08:47:21

人臉識別按鍵鍵盤

2024-10-17 16:55:08

2023-10-11 08:16:42

客戶端服務器內容
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产一区二区三区在线 | 久操伊人| 免费xxxx大片国产在线 | 亚洲一区视频 | 日本久久一区 | 成人深夜福利网站 | 最新国产精品精品视频 | 欧美xxxx性 | 国产99久久精品一区二区300 | av一区二区三区四区 | 99视频网 | 蜜桃在线视频 | 美国黄色毛片 | 亚洲 欧美 另类 综合 偷拍 | 国产精品明星裸体写真集 | 国产精品美女久久久免费 | 中文字幕在线观看精品 | 欧美成人免费在线 | 黄色网毛片 | 91精品国产777在线观看 | 视频一区 国产精品 | 成年视频在线观看福利资源 | 日日骚av | 天天干天天爱天天爽 | 久久高清 | 日本久久网站 | 久久久久高清 | 丁香婷婷久久久综合精品国产 | 久久国产福利 | 欧美精品福利视频 | 亚洲精品视频免费看 | 欧美视频一区 | 天天弄天天操 | 久久久久久国产一区二区三区 | 99视频入口 | 精品国产欧美一区二区三区成人 | 人人叉| 日日摸日日添日日躁av | 午夜日韩 | 美女视频h| 天天爱av|