《如何打造MySQL高可用平臺(2)》要點:
本文介紹了如何打造MySQL高可用平臺(2),希望對您有用。如果有疑問,可以聯系我們。
筆者之前一直都在公司云存儲中心工作,由于種種原因,2015年年中調到了運維部的數據庫團隊,在這里才發現,rds項目其實只是在數據庫運維平臺中走出了很小的一步。為了提供全方位的數據庫云服務平臺,于是我們開始打造了全新的數據庫配置中心,同時提供MySQL、Redis、Mongodb等數據庫和緩存內部云服務。
與此同時,之前在rds項目中實現的4層代理的缺點也越來越明顯:
1、只能使用MySQL主庫,M-M-S結構是的MySQL資源極其浪費;
2、只能在單機房使用,跨機房訪問效率非常低;
3、運維功能太少,由于采用iptables,在代理機器上無法看到任何的連接信息,也無法捕獲任何業務訪問的指標,甚至于連接信息都無法獲取;
基于以上幾點原因,筆者決定開發基于7層應用層的MySQL代理層平臺,系統的具體架構如下所示:
clipboard.png
由于代理層是自己實現的應用程序,所以筆者在代碼中很容易就實現以下幾個核心的功能:
1、授權認證模型;
2、SQL攔截;
3、負載均衡;
4、讀寫分離;
5、高可用;
6、大SQL隔離;
除了這些特性以外,基于我們公司的多機房特點,筆者給代理層添加了機房感知能力。在整個數據庫配置中心,每個代理層程序、每個MySQL實例都有機房屬性。有了機房屬性,代理層可以實現自動就近訪問MySQL的能力,從而提高了系統性能同時,簡化了業務程序的部署。
一個典型的業務部署例子如下:
clipboard.png
從上圖可以看出,應用程序永遠也不再需要考慮多機房高可用、負載均衡、讀寫分離的問題。而且由于代理層實現了高可用功能,一旦發現主寫MySQL故障,會自動把主讀切換為主寫,從而在秒級實現FAILOVER。
由于我們的代理層采用了平臺級的設計,上圖中的代理層可以連接多套業務(MySQL集群),新的業務只需要在zookeeper配置好,代理層就會自動感知,業務方馬上能夠在代理層上使用,而不需要為每個業務部署自己的獨立的代理層,從而極大的減少了運維成本。
除此以外采用代理層還為數據庫云服務平臺帶來不少好處:
業務方連接代理機器和相應的端口,底層MySQL主從切換可以對業務方透明;
MySQL實例維護或者遷移可以對業務方透明(一鍵遷移);
MySQL業務擴容/縮容也對業務透明(一鍵擴縮容);
代理層上線推廣到現在,已經有好幾百套的MySQL集群跑在上面了,MySQL的高可用平臺成功落地。
Mongodb相對于MySQL的一個很大的優勢就是高可用性,MySQL的高可用方案很多,但是完美的方式不多,代理層是在我們公司成功實施的一套平臺,希望有機會能和業界一起探討和學習,實現更多完美的解決方案。
代理層雖然已經在公司大規模使用,但是還有很多發展和改善的空間,隨著MySQL 5.6和MySQL 5.7的廣泛應用,GTID已經非常成熟,由于公司內部使用場景少,代理層的切換還沒有實現GTID模式的切換,所以下一階段,筆者會考慮實現基于GTID的高可用模式。
原文:http://www.jianshu.com/p/bc50221972ca