1.一、drbd
—— DRBD(Distributed Replicated Block Device),DRBD號稱是 "網絡 RAID",開源軟件,由 LINBIT 公司開發。DRBD 其實是一種塊設備的實現,主要被用於Linux平臺下的高可用(HA)方案之中。他是有內核 模塊和相關程序而組成,經過網絡通訊來同步鏡像整個設備,有點相似於一個網絡RAID的功能。也就是說當你將數據寫入本地的DRBD設備上的文件系統 時, 數據會同時被髮送到網絡中的另一臺主機之上,並以徹底相同的形式記錄在一個文件系統中(實際上文件系統的建立也是由DRBD的同步來實現的)。本地節點 (主機)與遠程節點(主機)的數據能夠保證明時的同步,並保證IO的一致性。因此當本地節點的主機出現故障時,遠程節點的主機上還會保留有一份徹底相同的 數據,能夠繼續使用,以達到高可用的目的。
實際使用場景中,能夠做用於MySQL-master(主備)的服務器,保證數據的一致性。mysql
1.二、hearbeat
—— 它是Linux-HA工程的一個組成部分,它實現了一個高可用集羣系統。心跳服務和集羣通訊是高可用集羣的兩個關鍵組件,在 Heartbeat 項目裏,由 heartbeat 模塊實現了這兩個功能。它實現IP的自動漂移,即當一臺服務器宕機後,浮動IP(整個cluster的對外IP)自動漂移到另一臺服務器,不會引發服務中斷。工做原理:heartbeat (Linux-HA)的工做原理:heartbeat最核心的包括兩個部分,心跳監測部分和資源接管部分,心跳監測能夠經過網絡鏈路和串口進行,並且支持冗 餘鏈路,它們之間相互發送報文來告訴對方本身當前的狀態,若是在指定的時間內未收到對方發送的報文,那麼就認爲對方失效,這時需啓動資源接管模塊來接管運 行在對方主機上的資源或者服務。sql
1.三、MMM (MySQL Master-Master Replication Manager)
—— MMM利用了虛擬IP的技術:1個網卡能夠同時使用多個IP。(因此使用MMM時,須要2*n+1個IP,n爲mysql數據庫結點個數,包括master,slave)。當有數據庫結點fail時,mmmd_mon檢測不到mmmd_agent的心跳或者對應的MySQL服務器的狀態,mmmd_mon將進行決定,並下指令給某個正常的數據庫結點的mmmd_agent,使得該mmmd_agent「篡位」使用(注)剛纔fail的那個結點的虛擬IP,使得虛擬IP實際從指向fail的那個機器自動轉爲此時的這個正常機器。
具體參考:http://liuyu.blog.51cto.com/183345/98867/;http://blog.longwin.com.tw/2008/10/mysql-master-replication-manager-mmm-intro-2008/數據庫
1.四、mysql的主從複製(Replication)/同步
—— 作mysql集羣的基本都會選擇這個策略。工做方式:MySQL支持單向、異步複製,複製過程當中一個服務器充當主服務器,而一個或多個其它服務器充當從服務器。主服務器將更新寫入二進制日誌文件,並維護日誌文件的一個索引以跟蹤日誌循環。當一個從服務器鏈接到主服務器時,它通知主服務器從服務器在日誌中讀取的最後一次成功更新的位置。從服務器接收從那時起發生的任何更新,而後封鎖並等待主服務器通知下一次更新。詳細內容請自行google搜索。服務器
二、mysql的集羣
mysql經過主從複製能夠很簡單的搭建一個集羣服務器,而且配置也很簡單。主服務器開啓二進制日誌系統(bin-log),設置能夠複製的權限用戶等,從服務器設置主服務器的serverid,host等便可實現同步(詳細步驟參考http://my.oschina.net/guol/blog/100179) 。簡單的示意圖以下:
問題:當主服務器宕機後,整個集羣癱瘓(單點故障)。網絡
三、構建mysql高可用集羣方案
基於上面的問題,目前可有如下幾種方案供選擇:
3.一、master-master架構
兩臺服務器裝mysql,各自做爲對方的從機接受對方發來的數據,作到數據的同步備份,感受和master-slave基本實現原理是同樣的。這樣保證了數據的一致性,如何保證其中一臺服務器故障,自動切換到另外的一個master上呢,使用MMM(MySQL Master-Master Replication Manager)來管理。
詳細配置參考:http://liuyu.blog.51cto.com/183345/98867/架構
3.二、heartbeat+drbd+mysql主從複製
基本原理與3.1類似,這裏須要作一個master庫的冗餘備份,使用drbd來保證不一樣服務器中兩個master庫的數據一致性。利用heartbeat來完成其中一臺服務器發生故障後的自動切換。結構以下圖: 據瞭解,通常大型網站日pv達到1-2000w以上,都會在主備mysql上層加上一個負載均衡器,如:LVS或者硬件產品F五、Array等。 考慮到成本通常用Lvs/DR+keepalived或hearbeat來完成負載。負載均衡