1. 程式人生 > >MySQL主從複製架構

MySQL主從複製架構

轉載於http://www.cnblogs.com/mindwind/p/4973635.html

原生複製架構

MySQL 的原生複製架構原理如上圖所示。從庫的 I/O Thread 執行緒負責不斷讀取主庫的 binlog 日誌檔案並寫入本地的 Relay log 臨時快取。從庫的 SQL Thread 執行緒則不斷讀取 Relay log 重放事件入庫。整個過程看起來是比較簡單清晰的,但其中有幾個點對主從資料一致性有關鍵影響,我們下面逐一分析。

主從複製的場景下,產生資料不一致的現象有兩種:

  1. 資料丟失
  2. 資料重複

從庫的 I/O Thread 是通過網路讀取主庫的 binlog 的,若出現網路故障,有可能產生資料丟失。為避免網路故障導致的資料丟失,網路恢復後從庫重新連線上來需要知道從主庫 binlog 的哪個位置重新傳輸資料。從庫需要記住中斷髮生時 binlog 的位置,並從該斷點處重新讀取,這個斷點我們稱為從庫的重傳檢查點。一個可靠的重傳檢查點必須是在從庫讀到資料並寫入到本地 Relay log 持久化之後才可建立,否則都有丟失資料的可能。

由於主從複製過程的分散式特徵,需要保證複製過程的冪等性,也就是重複複製同一條資料最終不會產生重複的資料。防重策略是必須的,一般符合正規化特徵的資料庫表設計通過主鍵來防重,而無主鍵表資料可以通過所有欄位聯合唯一索引來防重。有了防重策略就可以任意回溯複製過程,而不必考慮從庫產生重複資料。

為了保證主從資料一致性,複製過程不僅要保證不丟失、不重複,還需要保證操作順序一致。binlog 的事件日誌反應了主庫併發事務的操作序列,最終這種序列也要原樣反應到從庫上。所以原生複製架構為了做到這點,採用了單執行緒模型的序列化操作。這也是沒辦法的,因為在資料庫層面是無法知道不同資料之間的因果和依賴關係,因此無法並行入庫。

原生的複製架構做到了無丟失、無重複和順序一致性,普通場景下基本可用,但也存在一些不足:

  • 可監控性、可管理性相對較弱。
  • 對於異構資料無能為力。
  • 通用的單執行緒模型可能成為效能瓶頸,導致複製延時過高。
  • 一對多場景下對主庫形成過大複製壓力,影響主庫可用性。

一些特殊場景下的資料庫複製分佈,使用原生複製架構則不一定合適,可能的場景有:

  • 大型庫,資料量大,寫入量大,還需要跨地域、跨機房的複製,而且對複製延時長短比較敏感,比如大型電商的訂單、交易類資料庫。

所以我們才需要考慮針對特殊場景自定義複製架構,下面我們看一個自定義複製架構的概念原理圖。

自定義複製架構

如上,自定義複製架構參考原生架構模擬成一個MySQL從庫,它內部包括三個主要角色:

  1. Pull Worker,作用類似於原生的 I/O Thread。
  2. Buffer + Persistent Storage,作用類似於原生的 Relay log。
  3. Load Worker,作用類似於原生的 SQL Thread。

由於是自定義程式實現則可以在無改造 MySQL 的前提下提供額外的功能,相對應用和 MySQL 都可以做到透明。相對原生複製架構的不足,自定義複製架構可以提供更好的複製過程監控和管理能力,並支援異構資料轉換等等。而對於需要跨地域、跨機房且延時敏感的大型庫複製,則可以通過適當的策略來加速複製過程。

比如前面提到的大型電商的訂單、交易類資料庫,一般都是分庫分表的。分庫分表後,不同庫表之間的資料其實在業務上是完全獨立的,是可以支援並行寫入的。所以我們看上圖為什麼畫了兩個 Load Worker,就是表達可以針對業務獨立的表進行並行寫入。一條資料的複製延時包括:

總時長 T = P + N + L; 其中 P 是 Pull Worker 處理時長,N 是網路傳輸時長, L 是 Load Worker 處理時長。

同一個庫的 binlog 是順序的不好並行拉取,傳輸過程的網路時長也是剛性的,唯一能加速的就是入庫處理。按業務獨立的不同表可以做到並行的多執行緒入庫操作,以縮短 L 的整體時長,如下圖所示。

總結

本文分析了 MySQL 基於 binlog 的主從複製原理,從資料一致性的角度考慮分散式網路環境下主從架構設計的關鍵要素。在分析了 MySQL 原生複製架構的基礎上給出了一個靈活性和可控性更高的自定義複製架構的高層設計。理解了主從複製架構如何保證資料一致性後,我們後面才可進一步考慮在雙寫主庫的場景如何做雙向複製同步並保證雙主庫的資料最終一致性問題。這個系列下一篇文章會專門分析這個問題。

參考


相關推薦

MySQL主從複製架構使用方法

一. 單個數據庫伺服器的缺點 資料庫伺服器存在單點問題 資料庫伺服器資源無法滿足增長的讀寫請求 高峰時資料庫連線數經常超過上限 二. 如何解決單點問題 增加額外的資料庫伺服器,組建資料庫叢集 同一叢集中的資料庫伺服器需要具有相同的資料 叢集中的任一伺服器宕機後,其它伺服器可以取代宕機伺服器 三.

MySQL主從複製架構

轉載於http://www.cnblogs.com/mindwind/p/4973635.html 原生複製架構 MySQL 的原生複製架構原理如上圖所示。從庫的 I/O Thread 執行緒負責不斷讀取主庫的 binlog 日誌檔案並寫入本地的 Relay l

Linux mariadb(Mysql)的主從複製架構

mysql的主從複製架構,需要準備兩臺機器,並且可以通訊,安裝好2個mysql,保持版本一致性 mysql -v 檢視資料庫版本1.準備主庫的配置檔案  /etc/my.cnf 寫入開啟主庫的引數[mysqld]# 標註 主庫的身份idserver-id=1# 那個binlog的檔名log-bin=

分散式架構高可用架構篇_08_MyCat在MySQL主從複製基礎上實現讀寫分離

一、環境作業系統:CentOS-6.6-x86_64-bin-DVD1.iso JDK 版本:jdk1.7.0_45MyCat 版本:Mycat-server-1.4-release-20151019230038-linux.tar.gzMyCat 節點 IP:192.168

MySQL主從複製(Replication for Backup)

環境:MySQL5.7,VMware-Workstation-12-Pro,Windows-10,CentOS-7.5,Xshell5 1. 基本概念和操作思路 主從複製能做什麼 資料庫的主從複製,是一臺主資料庫機器(Master)把自己的資料,複製到一臺或多臺從機器(Slaves)上。主從機器的通訊方

MYSQL主從複製+讀寫分離

案例 搭建MYSQL主從複製 這裡mysql伺服器都裝好了的 yum -y install ntp #裝ntp時間同步 vim /etc/ntp.conf #配置檔案 server 127.127.1.0 fudge 127.127.1.0 strat

mysql主從複製讀寫分離之——proxysql應用

一、說明ProxySQL是一個開源的MySQL代理伺服器,這意味著它充當MySQL伺服器和訪問其資料庫的應用程式之間的中介。ProxySQL可以通過在多個數據庫伺服器池之間分配流量來提高效能,並且如果一個或多個數據庫伺服器發生故障,還可以通過自動故障切換到備用資料庫來提高可用性。 系統環境:master1:

MySQL主從複製,並行複製,半同步複製和組複製

主從複製 主從複製過程存在三個執行緒,Master端的I/O執行緒,Slave的I/O執行緒與SQL執行緒。Master端需要開啟binlog日誌,Slave端需要開啟relaylog。 1、Slave端的I/O讀取master.info檔案,獲取binlog檔名和位置點,然後向Mast

MySQL主從複製遇到的錯誤

記錄下配置主從資料庫中遇到的問題: 問題如下: ​​​​​​​show slave status \G 顯現錯誤如下 Error 'Can't drop database 'Springboot'; database doesn't exist' on query. Default dat

windows 下mysql主從複製

準備 1.主伺服器:172.28.92.175 2.從伺服器:172.16.8.94 3.待同步資料庫:share 主從複製 1.首先在兩臺機器上安裝mysql,可以參考我之前的文章 2.在主伺服器上的my.ini裡新增一下內容,重啟服務 replicate-do-db

MYSQL主從複製的簡單實現

系統環境:CENTOS7 MYSQL版本,status;第一行,mysql  Ver 14.14 Distrib 5.7.22, for linux-glibc2.12 (x86_64) using  EditLine wrapper 主庫:192.168.156.75

複習電商筆記-19-mysql主從複製接受和操作

  第五天:MySQL主從複製+Amoeba讀寫分離 思考: 序號 知識點 型別 難度係數 掌握程度  

MySQL 主從複製 主主複製(3)

一.主從複製 1.描述 mysql主從複製實現的原理就是binlog日誌,主節點負責資料庫寫操作,從節點負責讀操作,從節點上不需要使用事務,能夠大大提高資料庫的效能. 準備三臺節點: 192.168.100.193  master 192.168.100.194&nbs

44、mysql主從複製實戰

主從複製的配置 軟體版本 1.雙方的MySQL要一致 2.如果不一致:主的要低於從的 從哪兒開始複製: 1.都從0開始 2.主伺服器已經執行一段時間,並且存在不小的資料集:把主伺服器備份,然後在從伺服器恢復,從主伺服器上備份處的位置開始複製 配置過程: 主伺服器: 1.改s

45、mysql主從複製應用擴充套件

mysql主從複製應用擴充套件 1.主從伺服器的時間要同步(NTP) 建立一個時間伺服器 */5 * * * * /user/sbin/ntpdate ntpserver &> /dev/null 2.如何限制從伺服器只讀(配置在mysqld中) 在從伺服器上啟動read

mysql主從複製例項

第一步:需要在mysql主伺服器的my.conf的配置檔案中修改你server_id和開啟bin-log日誌 第二步:在mysql從伺服器的my.conf配置檔案中修改server_id以及開啟relay-log的中繼日誌和關閉bin-log日誌 第三步,登入mysql主的伺服器然

Linux系統實現MySQL主從複製

Linux系統實現mysql主從複製 1、主從伺服器分別作以下操作: 1.1、版本一致 1.2、初始化表,並在後臺啟動mysql 1.3、修改root的密碼 *2、修改主伺服器master: 1 #vi /etc/my.cnf 2 [mysqld] 3 log-bin=mysql-b

mysql主從複製配置!轉!最簡!親測可用!18年11月21日

轉發地址:https://blog.csdn.net/deeplearnings/article/details/78398526   1、主從伺服器分別作以下操作:   1.1、版本一致   1.2、初始化表,並在後臺啟動mysql   1.3、修改

(二)mysql主從複製搭建

mysql通過什麼實現主從複製? 通過mysql本身自帶的binlog日誌檔案來實現主從複製,mysql會把所有的操作儲存在binlog日誌中,從庫同步主庫中的binlog日誌,從庫得到主庫的操作記錄,從庫再執行記錄,實現了主從複製,資料一致。 主從優勢:資料庫備份  &nbs

MySQL主從複製之ROW+GTID

一、基礎: 1.複製主要有3點好處 1)實現在不同伺服器上的資料分佈,可以將資料讀取進行負載均衡; 2)增強了資料安全性,減少主庫的connections,可以實現資料高可用和故障切換; 3)實現資料庫線上升級 2.二進位制日誌3種格式 1)STATEMENT格式 優點:日誌記錄量相對較小,節約