多数据中心的高可用结构【环状星型数据库架构】
貼一些比較老的內容,文章是新寫的,技術可能都是大家熟悉的,給入門的兄弟們參考。高手輕拍
原文請見:http://www.muduo.net/index.php/u ... space-itemid-318728
二、
多數據中心的高可用結構【環狀星型數據庫架構】在介紹該結構之前,我們首先了解一下mysql復制的有關內容。在《highperformance mysql》的第一版中,作者介紹了這樣的一種數據庫結構:
? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?
三個mysql的daemon均為上家的slave,均為下家的master,環形復制,如此,則生生不息。
每個環路上的master分別有自己的slave,解決mysql的效率和可用性的問題。
遺憾的是,Jeremy的想象力夠豐富,但是當時mysql的最新版本為?4.0,并不支持如此復雜的mysql復制結構,缺少關鍵環節的解決方案,有哪些關鍵環節呢?
i.
Auto_increment?字段沖突問題
ii.
如上圖,4(mysql服務器3的slave)從3(mysql服務器4的master)復制數據,只能復制應用程序在3上寫入的數據(即3產生了binlog),對于3(此時作為mysql服務器2?的slave)在2(作為mysql服務器3的master)那里復制得來的數據,無法復制到服務器4上的。
iii.
環形復制本地產生數據重復寫入的問題
就是上面三個當時無法解決的問題,Jeremy在《high performance mysql》中的整章內容幾乎變成想像。
我相信如今的mysql 5的設計一定是吸收了Jeremy的構想的。
(一)
架構圖
結合《單數據中心的mysql高可用架構》和mysql5的特性,我們設計出了如下的多數據中心mysql高可用結構,即環狀星型結構。
(二)
系統結構說明
如上圖所示,假設A、B、C、D 4個數據中心,每個數據中心都擁有同樣的應用程序(不限于web服務),各個數據中心的應用程序按照《單數據中心的mysql高可用架構》中提到的方案直接讀寫本地的數據庫數據。
此時,在確保單數據中心高可用的基礎上,我們將結構簡化,簡化為如下結構:
A、B、C、D是一個十分簡潔的mysql復制環,滿足這個復制結構正常運行需要在如下方面進行配置:
?
i.
解決auto_increment字段數據沖突的問題,通過http://dev.mysql.com/doc/refman/5.1/en/replication-options-master.html#sysvar_auto_increment_increment
?
ii.
當同一臺機器作為slave且作為master的情況下,解決復制的內容能夠被傳送到下一臺slave
?
iii.
解決某一數據從A復制到B,從B復制到C,從C復制到D,但是不會從D復制到A
下面將詳細的介紹如何解決上面的問題:
?
i.
AUTO_INCREMENT字段沖突的問題
?
auto_increment_increment?和?auto_increment_offset?這兩個系統變量是為了滿足master?àmaster?這種mysql復制模式產生的,這兩個變量能夠控制AUTO_INCREMENT?列的行為,避免 AUTO_INCREMENT 列的value產生沖突。關于這部分的詳細內容,建議參考:http://dev.mysql.com/doc/refman/5.1/en/replication-options-master.html#sysvar_auto_increment_increment
?
ii.
--log-slave-updates
?
一般情況下,slave服務器不需要(也不會)將它從master服務器那里接收到的“更新”記錄到binlog里面,但是這個系統變量能夠讓mysql的slave服務器記錄這些“更新”到自己的binlog。在使用這個變量的情況下,需要首先配置mysql的“--log-bin”變量。
?
iii.
--replicate-same-server-id
?
默認情況下,這個值被置成0。以避免在環形復制結構中出現的無限循環復制。
?
Ok,在普通復制結構的基礎上,經過上面的三點額外配置,mysql環形復制即可以正常工作。如上圖的A、B、C、D4臺mysql環形復制結構,可以在任意一個mysqld服務中插入、更新數據,而在任一mysqld服務器中,可以查到所有的數據。當然,對于滿足環狀星型高可用mysql數據庫架構來講,還需要進一步解決:
?
i.
任一mysql集群(如A)的master服務的高可用(通過heart-beat實現虛擬IP地址的漂移,通過漂移IP實現)
?
ii.
數據庫各組之間間數據連通性及可靠性問題【針對業務要求,指定不同的標準】
?
a)
通過?UDT網關進行傳輸層代理
?
b)
通過專線進行解決
?
iii.
解決mysql binlog傳輸的帶寬問題,該問題考慮下面兩種解決方法:
?
a)
通過--slave_compressed_protocol?,在mysql?主、從服務器之間使用協議壓縮,降低帶寬要求:
?
1.
slave_compressed_protocol=1
2.
SET @@global.slave_compressed_protocol=1;
b)
通過開發mysql?差異化復制協議(如互動社區的binlog項目)
Mysql的環狀星型多數據中心結構能夠解決如下的問題:
?
i.
解決由于跨網操作數據反應慢的問題,數據更新在本地IDC進行,確保動態程序快速、及時。
?
ii.
解決數據中心的冗余問題,如果某一個IDC的數據中心宕到,可隨時切換到另外的數據中心。
?
當然,這種結構也不是完美的,在解決了一些問題的同時,也會帶來一些其他的問題:
?
i.
數據同步延遲,跨IDC的數據庫同步相比同網的mysql復制,網絡環境更為復雜,由于binlog的傳輸問題,容易帶來更大的數據延遲
?
ii.
穩定性,需要強健的監控和較為復雜的自動化報警、故障處理措施
轉載于:https://www.cnblogs.com/seasonzone/p/4133558.html
總結
以上是生活随笔為你收集整理的多数据中心的高可用结构【环状星型数据库架构】的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: jQuery鼠标移入移出(冒泡版和无冒泡
- 下一篇: 喷水装置(一)