MySQL高可用的几种方案
首先我們看看MySQL高可用的幾種方案:
?
對于數(shù)據(jù)實時性要求不是特別嚴格的應(yīng)用,只需要通過廉價的pc server 來擴展Slave 的數(shù)量,將讀壓力分散到多臺Slave 的機器上面,即可通過分散單臺數(shù)據(jù)庫服務(wù)器的讀壓力來解決數(shù)據(jù)庫端的讀性能瓶頸,畢竟在大多數(shù)數(shù)據(jù)庫應(yīng)用系統(tǒng)中的讀壓力還是要比寫壓力大很多。這在很大程度上解決了目前很多中小型網(wǎng)站的數(shù)據(jù)庫壓力瓶頸問題,甚至有些大型網(wǎng)站也在使用類似方案解決數(shù)據(jù)庫瓶頸。
MySQL Cluster由一組計算機構(gòu)成,每臺計算機上均運行著多種進程,包括MySQL服務(wù)器,NDB Cluster 的數(shù)據(jù)節(jié)點,管理服務(wù)器,以及(可能)專門的數(shù)據(jù)訪問程序。NDB” 是一種“內(nèi)存中”的存儲引擎,它具有可用性高和數(shù)據(jù)一致性好的特點。MySQL Cluster要實現(xiàn)完全冗余和容錯,至少需要 4臺物理主機,其中兩個為管理節(jié)點。MySQL Cluster使用不那么廣泛,除了自身構(gòu)架因素、適用的業(yè)務(wù)有限之外,另一個重要的原因是其安裝配置管理相對復(fù)雜繁瑣,總共有幾十個操作步驟,需要DBA花費幾個小時才能搭建或完成。重啟 MySQL Cluster 數(shù)據(jù)庫的管理操作之前需要執(zhí)行 46 個手動命令,需要耗費 DBA 2.5 小時的時間,而依靠MySQL Cluster Manager只需一個命令即可完成,但MySQL Cluster Manager 僅作為商用 MySQL Cluster 運營商級版本 (CGE) 數(shù)據(jù)庫的一部分提供,需要購買。其官方的說明,若應(yīng)用中的SQL操作為主鍵數(shù)據(jù)庫訪問,包含一些 JOIN 操作而非對整個表執(zhí)行常規(guī)掃描和JOIN而返回數(shù)萬行數(shù)據(jù),則適合Cluster,否則不合適,從這一條限制來看,表明大多數(shù)業(yè)務(wù)場景并不合適MySQL Cluster,業(yè)內(nèi)有資深人士也憑評價:NDB不適合大多數(shù)業(yè)務(wù)場景,而且有安全問題。
heartbeat是Linux-HA工程的一個組件,heartbeat最核心的包括兩個部分:心跳監(jiān)測和資源接管。在指定的時間內(nèi)未收到對方發(fā)送的報文,那么就認為對方失效,這時需啟動資源接管模塊來接管運 行在對方主機上的資源或者服務(wù)。
DRBD是通過網(wǎng)絡(luò)來實現(xiàn)塊設(shè)備的數(shù)據(jù)鏡像同步的一款開源Cluster軟件,它自動完成網(wǎng)絡(luò)中兩個不同服務(wù)器上的磁盤同步,相對于binlog日志同步,它是更底層的磁盤同步,理論上DRDB適合很多文件型系統(tǒng)的高可用。
Lvs是一個虛擬的服務(wù)器集群系統(tǒng),可以實現(xiàn)LINUX平臺下的簡單負載均衡。keepalived是一個類似于layer3, 4 & 5交換機制的軟件,主要用于主機與備機的故障轉(zhuǎn)移,這是一種適用面很廣的負載均衡和高可用方案,最常用于Web系統(tǒng)。
這種gluster模式可以說是全新的一種高可用方案,前面也提到其優(yōu)點,它的缺點不多,不支持XA,不支持Lock Table,只能用InnoDB引擎。
Mycat高可用方案
Mycat作為一個代理層中間件,Mycat系統(tǒng)的高可用涉及到Mycat本身的高可用以及后端MySQL的高可用,前面章節(jié)所講的MySQL高可用方案都可以在此用來確保Mycat所連接的后端MySQL服務(wù)的高可用性。在大多數(shù)情況下,建議采用標準的MySQL主從復(fù)制高可用性配置并交付給Mycat來完成后端MySQL節(jié)點的主從自動切換。
如圖所示,MySQL節(jié)點開啟主從復(fù)制的配置方案,并將主節(jié)點配置為Mycat的dataHost里的writeNode,從節(jié)點配置為readNode,同時Mycat內(nèi)部定期對一個dataHost里的所有writeHost與readHost節(jié)點發(fā)起心跳檢測,正常情況下,Mycat會將第一個writeHost作為寫節(jié)點,所有的DML SQL會發(fā)送給此節(jié)點,若Mycat開啟了讀寫分離,則查詢節(jié)點會根據(jù)讀寫分離的策略發(fā)往readHost(+writeHost)執(zhí)行,當一個dataHost里面配置了兩個或多個writeHost的情況下,如果第一個writeHost宕機,則Mycat會在默認的3次心跳檢查失敗后,自動切換到下一個可用的writeHost執(zhí)行DML SQL語句,并在conf/dnindex.properties文件里記錄當前所用的writeHost的index(第一個為0,第二個為1,依次類推),注意,此文件不能刪除和擅自改變,除非你深刻理解了它的作用以及你的目的。
那么問題來了,當原來配置的MySQL寫節(jié)點宕機恢復(fù)以后,怎么重新加入Mycat,要不要恢復(fù)為原來的寫節(jié)點?關(guān)于這個問題,我們也曾與DBA討論很久,最終的建議方案是,保持現(xiàn)有狀態(tài)不變,改旗易幟,恢復(fù)后的MySQL節(jié)點作為從節(jié)點,跟隨新的主節(jié)點,重新配置主從同步,原先跟隨該節(jié)點做同步的其他節(jié)點也同樣換帥,重新配置同步源,這些節(jié)點的數(shù)據(jù)手工完成同步以后,再加入Mycat里。目前1.3版本的Mycat還沒有實現(xiàn)監(jiān)控MySQL主從同步狀態(tài)的功能,因此這個過程里,DBA可以先修改MySQL的密碼,讓Mycat無法鏈接故障服務(wù)器,等同步完成以后,恢復(fù)密碼,這樣Mycat就自動重新將修復(fù)好的Mycat納管進來了。
說完了MySQL部分,接下來我們看看Mycat自身的高可用性,由于Mycat自身是屬于無狀態(tài)的中間件(除了主從切換過程中記錄的dnindex.properties文件),因此Mycat很容易部署為集群方式,提供高可用方案。原先有規(guī)劃Mycat-balance組件,專門用于Mycat負載均衡,但由于缺乏志愿者,也沒有經(jīng)過生產(chǎn)實踐驗證,
因此暫時不建議使用,官方建議是采用基于硬件的負載均衡器或者軟件方式的HAproxy,HAProxy相比LVS的使用要簡單很多,功能方面也很豐富,免費開源,穩(wěn)定性也是非常好,可以與LVS相媲美,根據(jù)官方文檔,HAProxy可以跑滿10Gbps-New benchmark of HAProxy at 10 Gbps using Myricom’s 10GbE NICs (Myri-10G PCI-Express),這個作為軟件級負載均衡,也是比較驚人的,下圖是HAproxy+Mycat集群+MySQL主從所組成的高可用性方案:
、
如果還擔心HAproxy的穩(wěn)定性和單點問題,則可以用keepalived的VIP的浮動功能,加以強化:
Galary Cluster 配置
Mycat1.4.1 開始支持galary cluster 集群的配置,提高心跳可用。
配置如下: 1.4.1 開始支持MySQL 集群模式,讓讀更加安全可靠,配置如下: MyCAT心跳檢查語句配置為 show status like ‘wsrep%’ , dataHost 上定義兩個新屬性: switchType=”3” 此時意味著開啟MySQL集群復(fù)制狀態(tài)狀態(tài)綁定的讀寫分離與切換機制,Mycat心跳機制通過檢測集群復(fù)制時延時,如果延時過大或者集群出現(xiàn)節(jié)點問題不會負載改節(jié)點。
總結(jié)
以上是生活随笔為你收集整理的MySQL高可用的几种方案的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 基础数学问题
- 下一篇: CentOS 7 安装nexus