MySQL高可用化——網友:看完居然如此簡單

前言:服務在運行過程當中存在不少意外狀況,如:如服務器宕機、磁盤損壞、RAID卡損壞等。如何保證數據庫在服務發生意外的狀況下數據不丟失呢?服務還能繼續提供服務呢?sql

咱們通常經過備份的方式來解決數據丟失問題,經過複製來解決MySQL的高可用問題。數據庫

備份

備份的方法不一樣能夠將備份分爲:緩存

  • Hot Backup(熱備,在線備份):在數據運行過程當中進行備份,對數據庫操做沒有影響。
  • Cold Backup(冷備,離線備份):在數據中止狀況下,直接拷貝數據庫物理文件。
  • Warm Backup(溫備):在數據運行過程當中進行,可是會對當前數據庫的操做有所影響,如加一個全局讀鎖以保證備份數據的一致性。

按照備份後文件的內容,備份又能夠分爲:服務器

  • 邏輯備份:是指備份出的文件內容是可讀的,通常是文本文件。內容通常是由一條條SQL語句,或者是表內實際數據組成。通常適用於數據庫的升級、遷移等工做。但其缺點是恢復所須要的時間每每較長。
  • 裸文件備份:是指複製數據庫的物理文件,既能夠是在數據庫運行中的複製(如ibbackup、xtrabackup這類工具),也能夠是在數據庫中止運行時直接的數據文件複製。這類備份的恢復時間每每較邏輯備份短不少。

若按照備份數據庫的內容來分,備份又能夠分爲:網絡

  • 徹底備份:徹底備份是指對數據庫進行一個完整的備份。
  • 增量備份:增量備份是指在上次徹底備份的基礎上,對於更改的數據進行備份。
  • 日誌備份:日誌備份主要是指對MySQL數據庫二進制日誌的備份,經過對一個徹底備份進行二進制日誌的重作(replay)來完成數據庫的point-in-time的恢復工做。

複製

複製(replication)是MySQL數據庫提供的一種高可用高性能的解決方案,通常用來創建大型的應用,原理以下:架構

MySQL高可用化——網友:看完居然如此簡單

1.主服務器(master)把數據更改記錄到二進制日誌(binlog)中,而後經過binary log dump線程將二進制文件推送到從服務器。異步

2.從服務器(slave)經過I/O線程,把主服務器的二進制日誌複製到本身的中繼日誌(relay log)中,中繼日誌一般會位於os緩存中,因此中繼日誌的開銷很小。分佈式

3.從服務器經過SQL線程重作中繼日誌中的日誌,把更改應用到本身的數據庫上,以達到數據的最終一致性。工具

從服務器有2個線程,一個是I/O線程,負責讀取主服務器的二進制日誌,並將其保存爲中繼日誌;另外一個是SQL線程,複製執行中繼日誌。這裏須要特別注意的是,複製是一個異步過程,從服務器數據存在延遲。性能

MySQL二進制日誌文件Binlog有三種格式,StatementRowMixed,因此MySQL的複製也對應有三種方式。

異步複製

MySQL高可用化——網友:看完居然如此簡單

主庫執行完Commit後,在主庫寫入Binlog日誌後便可成功返回客戶端,無需等Binlog日誌傳送給從庫。

半同步複製

MySQL高可用化——網友:看完居然如此簡單

在 MySQL5.5以前,MySQL的複製是異步操做,主庫和從庫的數據之間存在必定的延遲,這樣存在一個隱患:當在主庫上寫人一個事務並提交成功,而從庫還沒有獲得主庫推送的Binlog日誌時,主庫宕機了,例如主庫可能因磁盤損壞、內存故障等形成主庫上該事務 Binlog丟失,此時從庫就可能損失這個事務,從而形成主從不一致。

而半同步複製,是等待其中一個從庫也接收到Binlog事務併成功寫入Relay Log以後,才返回Commit操做成功給客戶端;如此半同步就保證了事務成功提交後至少有兩份日誌記錄,一份在主庫Binlog上,另外一份在從庫的Relay Log上,從而進一步保證數據完整性;半同步複製很大程度取決於主從網絡RTT(往返時延),以插件 semisync_master/semisync_slave 形式存在。

集羣

使用集羣能夠提升MySQL服務器的可用性和性能,MySQL服務支持多種集羣方案。

MySQL Cluster

由Mysql自己提供,優點:可用性很是高,性能很是好。每份數據至少可在不一樣主機存一份拷貝,且冗餘數據拷貝實時同步。但它的維護很是複雜,存在部分Bug,目前還不適合比較核心的線上系統,因此不推薦。

DRBD磁盤網絡鏡像

Distributed Replicated Block Device,其實現方式是經過網絡來鏡像整個設備(磁盤)。它容許用戶在遠程機器上創建一個本地塊設備的實時鏡像,與心跳連接結合使用,也可看作一種網絡RAID。

優點:軟件功能強大,數據可在底層快設備級別跨物理主機鏡像,且可根據性能和可靠性要求配置不一樣級別的同步。IO操做保持順序,可知足數據庫對數據一致性的苛刻要求。

但非分佈式文件系統環境沒法支持鏡像數據同時可見,性能和可靠性二者相互矛盾,沒法適用於性能和可靠性要求都比較苛刻的環境,維護成本高於MySQL Replication。另外,DRBD也是官方推薦的可用於MySQL高可用方案之一,因此這個你們可根據實際環境來考慮是否部署。

MySQL Replication

MySQL的複製上在實際應用場景中使用最多的一種方案,主要優點是成本低,實現起來比較簡單,缺點是從服務器存在必定的延遲。

經常使用架構

一主多從,提升系統的讀性能

MySQL高可用化——網友:看完居然如此簡單

一主一從和一主多從是最多見的主從架構,實施起來簡單而且有效,主要用來實現讀寫分離,提高度的性能,下降主庫壓力,在主庫出現異常宕機的狀況下,能夠把一個從庫切換爲主庫繼續提供服務。

多級複製

MySQL高可用化——網友:看完居然如此簡單

MySQL的複製是主庫推送Binlog到從庫,在上面一主多從的狀況下,主庫的I/O和網絡壓力都會隨着從庫的增長而增大。多級而使用多級複製能夠很好的解決這個問題,可是隨着從庫的鏈路的增長從庫的數據延遲也會隨着增大。

雙主複製/Dual Master

MySQL高可用化——網友:看完居然如此簡單

其實就是master1和master2互爲主從關係,這樣任何一方所作的變動,都會經過複製應用到另一方的數據庫中。client客戶端的寫請求都訪問主庫 Master1,而讀請求能夠選擇訪問主庫Master1或 Master2。

雙主多級複製架構

MySQL高可用化——網友:看完居然如此簡單

雙主複製還能和主從複製聯合起來使用,在 Master2庫下配置從庫 Slave一、 Slave2等,這樣便可經過從庫Slave等來分擔讀取壓力。

第一次寫MySQL高可用化的文章,不足之處,歡迎指出。

原文連接:https://blog.csdn.net/xiaolyuh123/article/details/105972412

相關文章
相關標籤/搜索