? ? ?糾結(jié)了很久,想使用磁盤技術(shù)徹底解決mysql集群架構(gòu),使用了GFS2,但暫時無法解決磁盤I/O問題;使用了GlusterFS,發(fā)現(xiàn)又不建議服務(wù)器長時間保持開機狀態(tài)下使用,DRDB也只能解決mysql的高可用問題,又考慮到負載,考慮到成本,所以最后還是需要配合使用,詢問同行朋友,大多數(shù)公司都是下列架構(gòu);
? ? ? ?做讀寫分離,通過mysql自帶的同步方案replication實現(xiàn)數(shù)據(jù)同步,使用分布式文件系統(tǒng)切換關(guān)鍵節(jié)點,解決單點問題;
下文僅供參考,借鑒而來,具體配置,后續(xù)發(fā)布;
1、mysql企業(yè)常用集群架構(gòu)

在中小型互聯(lián)網(wǎng)的企業(yè)中。mysql的集群一般就是上圖的架構(gòu)。WEB節(jié)點讀取數(shù)據(jù)庫的時候讀取dbproxy服務(wù)器。dbproxy服務(wù)器通過對SQL語句的判斷來進行數(shù)據(jù)庫的讀寫分離。讀請求負載到從庫(也可以把主庫加上),寫請求寫主庫。
這里的dbproxy是數(shù)據(jù)庫集群的唯一出口所以也需要做高可用。
drproxy是數(shù)據(jù)庫讀寫分離的常用軟件,amoeba、mycat、cobar也很常用。這類軟件不僅帶有讀寫分離功能,還可以實現(xiàn)負載均衡以及后端節(jié)點的健康檢查。
數(shù)據(jù)庫的讀寫分離除了通過這類數(shù)據(jù)庫中間件軟件實現(xiàn),還可以寫在程序中。
通常我們的主庫要做雙主高可用,實現(xiàn)主庫掛掉另一個主庫立刻接管。如果不做雙主,從庫接管主庫的時候需要做狀態(tài)遷移,會有延遲。
數(shù)據(jù)庫主庫的高可用重點需要考慮的是數(shù)據(jù)同步。比較常用的高可用方案有:
1、keepalived+mysql replication。通過keepalived實現(xiàn)VIP飄逸,通過mysql自帶的同步方案replication實現(xiàn)數(shù)據(jù)同步。
2、hearbeat+drbd。通過drbd實現(xiàn)雙主數(shù)據(jù)的同步,這個數(shù)據(jù)同步是基于塊設(shè)備的。比一般的同步方案要快很多。通過heartbeat實現(xiàn)VIP漂移以及drbd資源的切換管理。
3、keepalived+mha。
對于從庫,最好不要超過5個。我們可以把其中的三個作為用戶訪問的節(jié)點,把另外一個作為內(nèi)部人員的查詢節(jié)點。因為內(nèi)部人員查詢節(jié)點的時候一般是按照時間段查詢,不經(jīng)過索引,占用的資源比較多,所以要把這個節(jié)點單獨專用,以免影響客戶訪問。最后我們應(yīng)該留一個從庫進行數(shù)據(jù)庫的數(shù)據(jù)備份。
從庫的數(shù)據(jù)一致性保持可以通過直接于主庫進行主從輔助,也可以從其他從庫那進行主從復(fù)制(優(yōu)點是減少主庫壓力,缺點是延遲稍大)。
2、MYSQL數(shù)據(jù)架構(gòu)
數(shù)據(jù)庫服務(wù)器==》數(shù)據(jù)庫(多個實例)==》多個庫==》多個表==》多個字段行列(數(shù)據(jù))
在一臺數(shù)據(jù)庫服務(wù)器上可以跑多個實例,一個實例中有多個庫,一個庫有多個表,一個表有多個行列。

