Mysql HA

什麼是高可用性?
很多公司的服務都是24小時*365天不間斷的。比如Call Center。這就要求高可用性。再比如購物網站,必須隨時都可以交易。那麼當購物網的server掛了一個的時候,不能對業務產生任何影響。這就是高可用性。

高可用性2個問題:
如何共享數據或同步數據?如何處理failover?
解釋failover,意思就是當服務器down掉,或者出現錯誤的時候,可以自動的切換到其他待命的服務器,不影響服務器上App的運行。

對於分佈式數據庫系統。如何架構才能保證其高可用性呢?以MySQL爲例。
1. MySQL replication with manual failover
同步數據是採用MySQL replication的方法,在MySQL分表分塊到主從已經解釋。簡單的說就是從庫根據主庫的日誌來做相應的處理,保證數據的一致。通常還配合MySQL Proxy或Amoeba等進行讀寫分離減少服務器壓力。
manual failover,顯然當Master掛掉時,利用本方式是需要手動來處理failover,一般來說是將slave更改爲server。
可用性達到: 98%-99.9+%

2. Master-Master with MMM manager(Multi-Master Replication Manager)
同步數據的方式是Multi-Master Replication Manager,在MySQL分表分塊到主從解釋,多主多從的設置,是一個loop環形,每個DB既是前一個DB的Slave又是後一個的Master。優勢就在於,一個Master掛掉,也還可以繼續DB操作。每個DB都可以進行讀寫,分散壓力。
可用性達到:99%

3. Heartbeat/SAN
處 理failover的方式是Heartbeat,Heartbeat可以看成是一組程序,監控管理各個node間連接的網絡。當node出現錯誤時,自動 啓動其他node開始服務。Heartbeat必須解決的一個問題就是split brain,在網絡中的一個node down掉後,每個node都會認爲其他node down掉並嘗試開始服務,因爲產生數據衝突。

通過SAN來共享數據。
SAN:Storage Area Network,是一種LAN來處理大數據量的傳輸,提供了計算機和存儲系統之間的數據傳輸。各個計算機組成的集羣可以通過SAN共享存儲。
MySQL高可用解決方案(MySQL <wbr>HA <wbr>Solution)

當server1掛掉的時候,Heartbeat監控到啓動Server2的服務。而因爲採用了SAN來共享了存儲,Server2可以直接利用SAN網絡中的數據。通過這種方式來提供高可用的解決方案。
可用性達到: 99.5%-99.9%

4. Heartbeat/DRBD
處理failover的方式依舊是Heartbeat。
同步數據使用DRBD:Distributed Replicated Block Device(DRBD)是一個用軟件實現的、無共享的、服務器之間鏡像塊設備內容的存儲複製解決方案。和SAN網絡不同,它並不共享存儲,而是通過服務器之間的網絡複製數據。
MySQL高可用解決方案(MySQL <wbr>HA <wbr>Solution)
可用性達到: 99.9%

5. MySQL Cluster(NDB Cluster)
MySQL Cluster也是由各個DB node組成一個cluster,在這個cluster中由網絡連接。可以自由的增減node的個數來對應數據庫壓力。

MySQL高可用解決方案(MySQL <wbr>HA <wbr>Solution)

synchronous replication(同步複製,要不同時成功要麼同時失敗)的方式來同步各個node的數據。然後對各個table進行partition,基於各個table的primary key。

採用了Shared Nothing Architecture的結構。不共享任何數據,而是每個node都同步好各自的數據。這樣即使是PC也可以輕鬆被加入到Shared Nothing的結構中。

   Share disk              Share nothing                Share memory 
MySQL高可用解決方案(MySQL <wbr>HA <wbr>Solution)

很 難懂,我猜想MySQL Cluster的結構應該和Hadoop中的HDFS(Hadoop Distributed File System)相似,按照key來做partition,然後將各個partition通過synchronous的方式同步的保存到各個 DataNode上,Management Node來監聽管理Cluster,通過SQL Node來訪問DataNode上的數據。


可用性百分比數據來源:
http://www.mysqlperformanceblog.com/2009/10/16/finding-your-mysql-high-availability-solution-–-the-questions/


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章