集羣的好處mysql
集羣要考慮的風險linux
@算法
mysql複製(MySQL Replication),是mysql自帶的功能。sql
原理簡介:數據庫
主從複製是經過重放binlog實現主庫數據的異步複製。即當主庫執行了一條sql命令,那麼在從庫一樣的執行一遍,從而達到主從複製的效果。在這個過程當中,master對數據的寫操做記入二進制日誌文件中(binlog),生成一個 log dump 線程,用來給從庫的 i/o線程傳binlog。而從庫的i/o線程去請求主庫的binlog,並將獲得的binlog日誌寫到中繼日誌(relaylog)中,從庫的sql線程,會讀取relaylog文件中的日誌,並解析成具體操做,經過主從的操做一致,而達到最終數據一致。api
MySQL Replication一主多從的結構,主要目的是實現數據的多點備份(沒有故障自動轉移和負載均衡)。相比於單個的mysql,一主多從下的優點以下:服務器
就各個集羣方案來講,其優點爲:網絡
其劣勢爲:架構
mysql織物(MySQL Fabirc),是mysql官方提供的。
這是在MySQL Replication的基礎上,增長了故障檢測與轉移,自動數據分片功能。不過依舊是一主多從的結構,MySQL Fabirc只有一個主節點,區別是當該主節點掛了之後,會從從節點中選擇一個來當主節點。
就各個集羣方案來講,其優點爲:
其劣勢爲:
mysql集羣(MySQL Cluster)也是mysql官方提供的。
MySQL Cluster是多主多從結構的
就各個集羣方案來講,其優點爲:
其劣勢爲:
官方的三兄弟的區別對好比下圖所示;
MMM是在MySQL Replication的基礎上,對其進行優化。
MMM(Master Replication Manager for MySQL)是雙主多從結構,這是Google的開源項目,使用Perl語言來對MySQL Replication作擴展,提供一套支持雙主故障切換和雙主平常管理的腳本程序,主要用來監控mysql主主複製並作失敗轉移。
注意:這裏的雙主節點,雖然叫作雙主複製,可是業務上同一時刻只容許對一個主進行寫入,另外一臺備選主上提供部分讀服務,以加速在主主切換時刻備選主的預熱。
就各個集羣方案來講,其優點爲:
其劣勢爲:
MHA是在MySQL Replication的基礎上,對其進行優化。
MHA(Master High Availability)是多主多從結構,這是日本DeNA公司的youshimaton開發,主要提供更多的主節點,可是缺乏VIP(虛擬IP),須要配合keepalived等一塊兒使用。
要搭建MHA,要求一個複製集羣中必須最少有三臺數據庫服務器,一主二從,即一臺充當master,一臺充當備用master,另一臺充當從庫。
就各個集羣方案來講,其優點爲:
其劣勢爲:
MHA架構實現讀寫分離,最佳實踐是在應用開發設計時提早規劃讀寫分離事宜,在使用時設置兩個鏈接池,即讀鏈接池與寫鏈接池,也能夠選擇折中方案即引入SQL Proxy。但不管如何都須要改動代碼;
關於讀負載均衡可使用F五、LVS、HAPROXY或者SQL Proxy等工具,只要能實現負載均衡、故障檢查及備升級爲主後的讀寫剝離功能便可,建議使用LVS
Galera Cluster是由Codership開發的MySQL多主結構集羣,這些主節點互爲其它節點的從節點。不一樣於MySQL原生的主從異步複製,Galera採用的是多主同步複製,並針對同步複製過程當中,會大機率出現的事務衝突和死鎖進行優化,就是複製不基於官方binlog而是Galera複製插件,重寫了wsrep api。
異步複製中,主庫將數據更新傳播給從庫後當即提交事務,而不論從庫是否成功讀取或重放數據變化。這種狀況下,在主庫事務提交後的短期內,主從庫數據並不一致。
同步複製時,主庫的單個更新事務須要在全部從庫上同步 更新。換句話說,當主庫提交事務時,集羣中全部節點的數據保持一致。
對於讀操做,從每一個節點讀取到的數據都是相同的。對於寫操做,當數據寫入某一節點後,集羣會將其同步到其它節點。
就各個集羣方案來講,其優點爲:
其劣勢爲:
不一樣主機的數據同步再也不依賴於MySQL的原生複製功能,而是經過同步磁盤數據,來保證數據的一致性。
而後處理故障的方式是藉助Heartbeat,它監控和管理各個節點間鏈接的網絡,並監控集羣服務,當節點出現故障或者服務不可用時,自動在其餘節點啓動集羣服務。
SAN:共享存儲,主庫從庫用的一個存儲。SAN的概念是容許存儲設施和解決器(服務器)之間創建直接的高速鏈接,經過這種鏈接實現數據的集中式存儲。
就各個集羣方案來講,其優點爲:
保證數據的強一致性;
與mysql解耦,不會因爲mysql的邏輯錯誤發生數據不一致的狀況;
其劣勢爲:
DRDB:這是linux內核板塊實現的快級別的同步複製技術。經過各主機之間的網絡,複製對方磁盤的內容。當客戶將數據寫入本地磁盤時,還會將數據發送到網絡中另外一臺主機的磁盤上,這樣的本地主機(主節點)與遠程主機(備節點)的數據便可以保證實時同步。
就各個集羣方案來講,其優點爲:
相比於SAN儲存網絡,價格低廉;
與mysql解耦,不會因爲mysql的邏輯錯誤發生數據不一致的狀況;
其劣勢爲:
對io性能影響較大;
從庫不提供讀操做;
Zookeeper使用分佈式算法保證集羣數據的一致性,使用zookeeper能夠有效的保證proxy的高可用性,能夠較好的避免網絡分區現象的產生。
就各個集羣方案來講,其優點爲:
缺其劣勢爲:
分佈式一致性算法,Paxos 算法處理的問題是一個分佈式系統如何就某個值(決議)達成一致。這個算法被認爲是同類算法中最有效的。Paxos與MySQL相結合能夠實如今分佈式的MySQL數據的強一致性。