1. 程式人生 > >中小企業可參考的數據庫架構-mysql篇

中小企業可參考的數據庫架構-mysql篇

負載 bic 主從 node jaf sel dba 相同 nbsp

引言

數據庫在眾多互聯網公司中應用日益廣泛,不同的公司,使用姿勢不盡相同,尤其是大公司,各種自研架構,羨煞旁人。但是,作為中小企業,由於分工和團隊規模限制,很難實現自研,大多數情況下,使用開源架構。

目前,在互聯網公司,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篇