1. 程式人生 > >【MySQL高可用架構設計】(一)-- mysql復制功能介紹

【MySQL高可用架構設計】(一)-- mysql復制功能介紹

inf 太多的 info 做了 技術 不用 帶寬 proxy 圖片

一、 介紹

Mysql的復制功能是構建基於SQL數據庫的大規模高性能應用的基礎,主要用於分擔主數據庫的讀負載,同時也為高可用、災難恢復、備份等工作提供了更多的選擇。

二、為什麽要使用mysql復制功能?

大家也許知道對於數據庫進行擴展是一件非常困難的事情,這一點和web服務器具有很大的不同,如果我們的網站出現大量的突增訪問,web服務器的壓力增加,性能下降的時候,我們只需要簡單的多增加幾臺web服務器,只要其上部署的程序完全一樣就可以很好的分擔這些負擔,但是數據庫卻不同。由於數據庫中對數據的事務性要求,就決定了我們不能簡單的通過增加數據庫服務器的方式來分擔數據庫的讀寫負載,而mysql的復制功能,為我們提供了一種可以分擔數據庫讀負載的好辦法,註意這裏呢,我只說了是讀負載,因為事實上只做簡單的復制,還是無法分擔寫負載的

,我們可以使用復制功能對數據庫服務器進行水平擴展,為數據庫服務器增加一個備庫或多個備庫,而這些備庫就可以用於分擔主數據庫的讀負載,同時復制功能也為高可用、災難恢復、備份等工作提供了更多的選擇。

技術分享圖片

三、mysql復制解決了什麽問題?

  a、實現在不同服務器上的數據分布

    也可以實現不同idc機房的數據庫分布。

    mysql的功能是基於主庫上的二進制日誌,然後在備庫上重放這些日誌的方式來完成的。從這我們可以知道兩點:

    1、mysql復制是異步的,這也意味著在同一時間點上備庫上的數據呢,可能與主庫存在不一致的地方,並且無法保證主庫和備庫間的延遲,影響主庫延遲的因素有很多,具體後續文章都會提到,不過雖然延遲無法避免,但是毫無疑問,mysql復制提供了一種提高數據庫的性能的方法。

    2、因為是利用二進制日誌,所以在通常情況下不需要太多的帶寬,特別是在基於語句的復制時所需要帶寬的就更少了。但使用基於行的復制來進行大批量的更改時,可能會對那種帶寬帶來一定的壓力,特別是在跨IDC環境下進行復制。所以對於這種大批量的數據修改,在任何情況下都應該是分批來進行的

  b、實現數據讀取的負載均衡

    這種讀的負載均衡需要其它組件配合完成。比如可以利用DNS輪詢的方式把程序的讀連接到不同的備份數據庫,或是利用LVS,haproxy這樣的代理方式都可以達到這種讀負載均衡的目的。關於讀寫分離和負載均衡,後面我會有文章詳細講解。

  c、增強的數據安全性

    mysql的復制是非共享架構,同樣的數據分布在多臺服務器上,所以增加了數據的安全性。

    我們還可以利用備庫進行數據庫備份的工作來減少主庫復制,但註意復制並不能代替備份,因為備份和復制所做的工作是不同的,如果我們不小心在主庫上錯誤的刪除或是修改了數據,由於備庫通常來說很小,所以很難使用備庫的數據對錯誤的刪除或修改的數據進行恢復。

    要在這種情況下對數據進行恢復只能依靠備份來完成,所以大家千萬不要以為做了復制之後就不用備份了,數據庫備份在任何時候都是非常重要的。

  d、實現數據庫高可用和故障切換

    備份的另一個重要作用就是讓我們可以方便的進行數據庫的高可用架構的部署,避免mysql單點故障。後續文章會有詳細講解。

  e、實現數據庫在線升級

    我們可以使用一個高版本的數據庫來作為主庫的備庫,這樣在配置高可用工具的時候就可以在很短的時間內完成這種數據庫的在線升級。

    同時,也可以測試高版本的mysql和我們現有的程序是否兼容。

四、結尾

  在對復制進行具體介紹之前,我們先來看mysql二進制日誌的一些問題,只有理解了二進制日誌的記錄方式,我們才能更好的對mysql復制進行部署和優化。

  下一篇文章我會對二進制日誌文件做介紹,請關註。

本篇文章總結於慕課網《MySQL性能管理及架構設計》課程

【MySQL高可用架構設計】(一)-- mysql復制功能介紹