MySQL讀寫分離-簡單思考

本文圖片資源均來自互聯網,沒有乾貨,只是提供一種簡單的思路。html

基礎原理

兩臺MySQL機器一個主,一個從實現數據實時同步比較簡單,代碼層面無需任何修改,添加一臺機器簡單配置配置便可,可是MySQL數據庫實現讀寫分離,就有那麼點麻煩了。
image1.png | center | 930x652
如上面這張圖。
1 三臺Slave機器經過日誌記錄的方式,實時同步Master數據庫的數據,容易實現。
2 三臺WEB機器寫入數據時,全都寫入到Master數據庫裏,也容易實現。在上述架構中,主數據庫只能有一個,不然容易出現數據不一樣步問題。
3 最關鍵的問題在於3臺WEB機器須要讀數據時,咱們的目標是3臺WEB機器讀數據時從3臺Slave機器上讀取,並且是負載均衡的形式,3臺Slave機器分擔讀取壓力。前端

有兩種方法能夠實現數據庫讀寫分離,基於程序代碼內部實現和基於中間代理層實現。linux

改動代碼實現,通常能夠用一些開發框架,對數據庫操做進行路由,即讀相關操做路由到Slave集羣上去,而寫相關操做路由Master數據庫機器,顯然這種操做主要是由開發來實現,開發和運維有那麼點耦合,運維至少還要告知開發哪些IP地址是Slave機器,Slave機器增長或刪除都須要通知開發作相關處理。數據庫

另一種方式就是基於中間代理層實現,這就有點至關於WEB前端的負載均衡,但還不太同樣,就是另起一臺機器,在上面安裝數據庫代理軟件,全部操做數據庫的請求無論是讀仍是寫,都先走到這臺數據庫代理機器上,而後再由數據代理機器日後端拋,寫操做拋給Master,讀操做負載給Slave集羣。以下圖:
image2.png | center | 513x250
能夠看到Amodeba這款軟件就充當數據庫代理的做用,以此實現讀寫分離。充當數據庫中間代理層能夠是成品軟件如Amodeba,Atlas,還可也是本身寫的lua腳本。後端

讀寫分離優秀圖

image.png | left | 826x433

上圖來自MySQL官方文旦手冊,看到某組織用上圖,還打上本身的logo,簡直不要臉。架構

image4.png | center | 575x254

參考連接

http://blog.51cto.com/13557884/2069131
https://blog.csdn.net/anzhen0429/article/details/77014565
http://heylinux.com/archives/1004.html
http://www.javashuo.com/article/p-fgmqnqoe-bc.html
http://www.javashuo.com/article/p-mnbcaiis-m.html負載均衡

最後一次更新 20181021框架

相關文章
相關標籤/搜索