備註:mysql
本人資歷很淺,說的不對話,萬望各位前輩不要計較,
另關於環形的問題,我在後面的評論給予回覆,
其實環形,解決多地域問題比較好的選擇
關於配置步驟我從新整理了一下(主從AND環形)的配置步驟
在我博客中,有興趣的朋友能夠看一下,sql
http://my.oschina.net/u/1246814/blog/267518數據庫
多謝你們的指導.服務器
好比 我有主的1臺mysql服務器,倆從服務服務器 外加一個負載均衡器(若是把負載均衡器很是簡單的來講話其實就DNS的轉發,很是簡單來講,其實 IP的輪換嘛)
架構
我讀數據的也就(查詢)數據 也就(Select)語句時候,我只是在 仨臺從服務器中讀取數據負載均衡
主服務器負責(增,刪,改)這個一系列操做
socket
順便嘮叨一下, 爲啥 Select 咱們建仨服務器或者多個呢?優化
由於距統計,大概B/S架構70%以上的操做都是以查爲主(說白了就是展現嘛)spa
咱們執行了DML語句那麼負載均衡器,.net
就會把請求轉發到主mysql服務器上,
這裏有個問題?
咱們已經向主服務器插入數據,或者刪除數據,或者更新了數據,
那麼是否是意味從服務裏數據也應該發生變化呢
是的,從服務器確定要發生變化的,否則就出現問題,
好比說,我刪除了一個用戶,
我查詢一下被刪除的用戶, 丫的發現這個用戶壓根就沒被刪除,這不是搞笑了嘛,
那麼就有了主從配置一說
主從原理:mysql中有一種日誌叫作bin日誌(二進制日誌),
這個日誌會記錄下全部對MYSQL進行修改的SQL語句。當向主服務器執行SQL語句時,這條SQL語句會被傳遞到從服務器上再執行一遍。
說白了,就是Bin日誌記錄下Dml語句,直接到從服務器執行執行一遍相同的Dml操做,這個方式是以二進制,全部效率很好
至於何時用主從
1. 備份(若是數據庫出現問題,立刻再頂上)
2.優化(分流 讀寫分離)
Look看圖
若是是Dml語句其實也能夠直接訪問主數據庫,沒必要通過負載均衡器,那麼這塊從
話說回來哈, 負載均衡其實說白了吧,就是dns輪換,IP輪換嘛
若是能夠話,其實咱們本身也能夠相對簡單實現的,但這要分狀況哈,
我提一個思路, 以MVC爲例子 我粗狂簡單的舉一下列子,
1.在父類Model中對用戶請求的sql語句進行分類。
1.1dml語句(update,insert,delelte)
1.2select語句
1.3dcl語句(數據控制語句)
1.4dtl語句(數據事務語句 )
1.5ddl語句(數據定義語句 )
2.我就以經常使用的dml 與select 語句爲列子並拿3個臺mysql服務器1臺主mysql 2臺從Mysql 與Linux系統爲例子
對用戶請求數據庫的Sql指令進行進行統一分類,管理
主服務器IP: 192.168.0.1
從服務器IP: 192.168.0.2
從服務器IP: 192.168.0.2
3. 對用sql指令分析
若是是dml直接鏈接 192.168.0.1這臺服務器
若是是select語句 怎麼辦呢?
1.咱們首先要肯定一個件事情要判斷兩臺從服務器的負載大小
咱們確定要把請求發到負載比較小的服務器上是吧
那麼我用socket用鏈接分別鏈接兩臺服務器,搞個相似遠程控制客服端,
並利用top指令,對兩臺服務器的CPU內存等一些負載數據進行獲取,
而後經過一些計算與比較最後把查詢請求鏈接其中一個從服務器上。
而後就over
迴歸正題
關於Mysql環形結構也就mysql服務器互相爲主從關係
雖然根據有關平臺統計,B/S架構的平臺70%以上都是都Select爲主
那麼若是我這個平臺,就是(增,刪,該)很是多,很是頻繁怎麼辦呢?
若是是主從配置,那麼我處理dml語句的就一臺服務器,這不夠嘛,這樣主從服務器的缺點就暴露出來了
那麼mysql的環形結構配置就能解決這樣相似問題
原理也是利用bin日誌來作
如今3個mysql服務器
咱們隨便向其中任何一臺服務服務器執行dml語句,
那麼Bin日誌記錄下Dml語句,
直接到其餘服務器執行執行一遍相同的Dml語句操做
look圖
完結