高可用的並行MySQL資料同步及分布式

來源:互聯網
上載者:User

標籤:

首先聊聊MySQL的資料分布式,目前最為常用的就是Replication(複製)技術。基於此技術外延開來有很多中架構,分類歸結為如下:

     1、樹狀結構(Master,Backup-Master,Slaves)                這種結構是目前Web系統用的最為通用的一種。整個系統有1個寫入/更新點,即Master;Master-Backup和Slaves都是Replication的Master從庫;多級Slave的原因是為了資料過濾和節省網路資源。

 

     2、環狀結構(Master-Master,Slaves)                Dual-Master結構是為了提高寫吞吐而提出的,通過提高由原來一台MySQL Master伺服器提供寫/更新的單點提高到2個點,從架構結構上來說就能看出此方法的提升。        Dual-Master需要解決的問題:        a)ID衝突問題,即對資料庫中唯一ID資源的分配必須是一個統一的地方發出。           解決辦法有MySQL內建的auto_increment_increment和auto_increment_offset來實現,通過N個Master來設定auto_increment_offset=N,每一台Master上的auto_increment_increment採用1~N中的任意值,但是不能互相重複。如此一來即可。           id-server: 1           auto_increment_increment=1           auto_increment_offset=2           id-server: 2           auto_increment_increment=2           auto_increment_offset=2           針對id-server1來說,id都是1,3,5這樣;id-server2來說,id都是2,4,6這樣。如此看似很美好,其實不然。在並發情況下,id-server1上相同的表和在id-server2上的表auto_increment值是不同的,但是又需要相互同步,也就是說如果寫入分布不均的情況,就可能存在表中id會是1,3,5,7,8,9,11,etc這樣的情況,id資源中間空洞太多。           還有一種解決辦法是一個獨立的ID發號器。實現ID發號器的辦法很多,為了讓維護更加的純粹,我們使用一個MySQL的一張表,Master-slave這種結構的來作為一個發號器server。這樣一來流程就變成了先去id發號器伺服器擷取id,再寫入Dual-Master中去。多了一個中間環節,而且此中間環節還是個單點,存在風險。但是思路基本這樣,可以通過別的服務,基於一定分布式規則的來並行發號器。        b)更新衝突的問題,一條範圍的update語句被兩台Master server都給執行了,這個時候資料就和最初設想的不一致了。        c)死結問題,這個在N(N>=3)個以上的環路Master中,出現異常斷開後的伺服器的binlog,在極端情況下會被恢複後的N-1個環路中的資料server反覆執行。    為瞭解決Multi-Master中的更新衝突和死結問題,我的辦法是多點Insert,但是只有一個點update這樣的結構來解決以上b和c的問題。            以上已經將Replication的常用的兩種資料分布架構介紹清楚,下來看看另外一種,即MySQL Cluster。MySQL Cluster在一段時間內,我都認為它是相當的雞肋,生產環境使用它的幾乎沒有。因為它在跨IDC和資料存放區等資源消耗巨大。    MySQL Cluster依賴的兩個核心資源就是網路頻寬和記憶體(share nothing和高一致性)。同IDC內的網路頻寬還很容易達到百兆或者更高,但是跨IDC的VPN或者專線,要達到這樣的速度還是有些困難。資料全部存在記憶體中,這在小資料時感受不明顯,但是對於爆炸式的資訊增長來說未免很容易產生瓶頸。雖然新版的Cluster支援將資料寫到硬碟,實際速度還有待觀察。    Replication基本能夠滿足可用的需求,但是MySQL的binlog是一個單線程的,這就會在資料同步方面產生瓶頸。一般的做法是通過寫一個plugin,來提高並發能力;這個plugin既要滿足效能,有要高可用。採用以下方式,通過將一些並行的App綁定在MySQL Cluster Queue上來執行,利用MySQL Cluster自身的高一致性,高可用的特點,儲存訊息。    

 

 如此可以既能滿足資料分布式,又能滿足並行資料同步。

 

高可用的並行MySQL資料同步及分布式

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.