中小企業可參考的數據庫架構-mysql篇
引言
數據庫在眾多互聯網公司中應用日益廣泛,不同的公司,使用姿勢不盡相同,尤其是大公司,各種自研架構,羨煞旁人。但是,作為中小企業,由於分工和團隊規模限制,很難實現自研,大多數情況下,使用開源架構。
目前,在互聯網公司,mysql+redis+mongodb幾乎已經成為標配,在各自場景中,得到廣泛應用。本文主要介紹以上mysql數據庫的常用架構。
Mysql架構
Mysql數據庫作為最流行的開源關系型數據庫,在互聯網公司應用非常廣泛。目前,mysql版本分支眾多,筆者建議可以考慮使用percona server或者mariadb。本文以percona server5.6為例,可參考的高可用架構如下:
圖1
如上圖所示,應用程序通過QConf獲取到MHA VIP,MHA實現mysql主庫高可用,mysql架構為主從復制架構,可以是一主一從,也可以是一主多從。
QConf是奇虎360開源的配置/服務中心中間件,尤其是服務中心功能,非常適合用於數據庫和應用程序解耦。Qconf github地址:
https://github.com/Qihoo360/QConf
目前,Qconf發展已經十分穩定,幾乎不需要二次開發,可以放心使用。
QConf提供了豐富的SDK,涵蓋Java、Php、Python、Go等,作為DBA,可以使用PHP或者Python調用QConf API,管理QConf節點,十分方便。本文以PHP為例,
zk="<zookeeper集群>"
service_path=/db/mysql/vip_3306;
service_mysql="10.11.12.13:3306";
【註冊MHA VIP服務】
$qzk = newQConfZK("$zk");
$qzk->serviceAdd($service_path,$service_mysql, QCONF_STATUS_UP);
【註銷QConf節點】
$qzk->serviceDelete($service_path,$service_mysql);
【客戶端訪問QConf】
遷移:客戶端需要部署相應的SDK
$qconf_val =QConf::getHost($service_mysql);
結果如下:
string(15)"10.11.12.13:3306"
很明顯,客戶端使用QConf十分簡單
說明:QConf依賴zookeeper集群,建議生產環境zookeeper集群成員為5個,這樣可以保證,在2個節點同時宕機情況下,zookeeper服務依然可用。
MHA架構
MHA作為mysql最為流行的高可用方案之一,架構圖如下:
圖2
如圖所示,MHA架構簡單清晰。
在master和slave上需要部署MHA node節點,在管理機器上需要部署MHA manager節點和node節點。MHA要求root賬號SSH互通,所以,需要保證服務器處於安全模式下,否則,存在很大的安全隱患。為了避免MHA因為網絡抖動導致的誤切換,建議修改重試策略,筆者設置為2s探測一次,探測60次。如果要啟用MHA自動切換模式,需要啟動masterha_manager監控進程。
讀寫分離
如果希望mysql主從讀寫分離,那麽可以參考如下架構:
圖3
如上圖所示,和圖1相比,增加了一層proxy,此處的proxy可以是奇虎360開源的Atlas或者美團點評二次開發的dbproxy,
奇虎360 Atlas github:
https://github.com/Qihoo360/Atlas
美團點評 dbproxy github:
https://github.com/Meituan-Dianping/DBProxy
這兩款中間件支持讀寫自動分離、從庫負載均衡、從庫故障自動上下線、安全控制等等,比較成熟穩定。
總結
對於普通業務,可以使用圖1所示架構,簡單穩定;如果需要讀寫分離,可以考慮圖3架構。對於大多數中小型公司,以上架構均可參考使用,達到mysql高可用以及應用程序和數據庫解耦的目的。我們在生產環境已經使用上述架構,目前很穩定
中小企業可參考的數據庫架構-mysql篇