1. 程式人生 > >MySQL讀寫分離-簡單思考

MySQL讀寫分離-簡單思考

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

基礎原理

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

有兩種方法可以實現資料庫讀寫分離,基於程式程式碼內部實現和基於中間代理層實現。

改動程式碼實現,一般可以用一些開發框架,對資料庫操作進行路由,即讀相關操作路由到Slave叢集上去,而寫相關操作路由Master資料庫機器,顯然這種操作主要是由開發來實現,開發和運維有那麼點耦合,運維至少還要告知開發哪些IP地址是Slave機器,Slave機器增加或刪除都需要通知開發做相關處理。

另外一種方式就是基於中間代理層實現,這就有點相當於WEB前端的負載均衡,但還不太一樣,就是另起一臺機器,在上面安裝資料庫代理軟體,所有操作資料庫的請求不管是讀還是寫,都先走到這臺數據庫代理機器上,然後再由資料代理機器往後端拋,寫操作拋給Master,讀操作負載給Slave叢集。如下圖:
image2.png | center | 513x250


可以看到Amodeba這款軟體就充當資料庫代理的作用,以此實現讀寫分離。充當資料庫中間代理層可以是成品軟體如Amodeba,Atlas,還可也是自己寫的lua指令碼。

讀寫分離優秀圖

image3.png | center | 896x461
image4.png | center | 575x254

參考連結

http://blog.51cto.com/13557884/2069131
https://blog.csdn.net/anzhen0429/article/details/77014565
http://heylinux.com/archives/1004.html
https://blog.csdn.net/starlh35/article/details/78735510
https://blog.csdn.net/shukebai/article/details/66007638