一.從主架構node
1.從主複製原理算法
從庫生成兩個線程,一個I/O線程,一個SQL線程;數據庫
i/o線程去請求主庫 的binlog,並將獲得的binlog日誌寫到relay log(中繼日誌) 文件中;
主庫會生成一個 log dump 線程,用來給從庫 i/o線程傳binlog;架構
SQL 線程,會讀取relay log文件中的日誌,並解析成具體操做,來實現主從的操做一致,而最終數據一致;負載均衡
2.主從架構特色異步
主從多用於網站架構,由於主從的同步機制是異步的,數據的同步有必定延遲,也就是說有可能會形成數據的丟失,可是性能比較好,性能
所以網站大多數用的是主從架構的數據庫,讀寫分離必須基於主從架構來搭建。測試
(1).讀寫分離並實現負載均衡網站
主從架構如何實現讀寫分離?須要經過mycat讀寫分離器來設置,當從客戶端發出寫權限的SQL語句(如:delete等)時,mycat會將其轉發給主數據庫;spa
當從客戶端發出讀權限的SQL語句(如:select等)時,mycat會將其轉發給從數據庫。這樣就實現了主從庫的讀寫分離,避免主數據庫的負載過大。
同時當一主多從架構,爲了實現從數據庫的負載均衡,能夠在mycat上再添上LVS,將讀權限的語句請求根據算法轉發到從數據庫上。
(2).如何預防單點故障(主數據庫宕機了。。)
方案一:MHA監控
工做原理:
MHA經過部署在主從集羣上的node節點,時刻監控集羣上的master節點,當master宕機了,那麼MHA會馬上從集羣中選出一個從節點來
頂替主節點。從而實現集羣的高可用即預防單點故障。
方案二:主主架構
即互爲主備,互相監控對方的二進制日誌文件進行同步。不過這種方式要注意:可能會出現數據不一致狀況。
由於同步是異步同步,可能沒有及時同步數據,致使數據不一致。
固然能夠給每臺主機採用keepalived實現高可用(使用VIP對外提供服務)
建議採用高可用策略的時候,masterA或masterB均不因宕機恢復後而搶佔VIP(非搶佔模式);
二.多主架構(galera集羣)
1.主要功能
同步複製
真正的multi-master,即全部節點能夠同時讀寫數據庫
自動的節點成員控制,失效節點自動被清除
新節點加入數據自動複製
真正的並行複製,行級
用戶能夠直接鏈接集羣,使用感覺上與MySQL徹底一致
2.優點
由於是多主,因此不存在Slavelag(延遲)
不存在丟失事務的狀況
同時具備讀和寫的擴展能力
更小的客戶端延遲
節點間數據是同步的,而Master/Slave模式是異步的,不一樣slave上的binlog多是不一樣的
3.工做原理(wsrep)
Galera集羣的複製功能基於Galeralibrary實現,爲了讓MySQL與Galera library通信,特別針對MySQL開發了wsrep API。
Galera插件保證集羣同步數據,保持數據的一致性,靠的就是可認證的複製,工做原理以下圖:
當客戶端發出一個commit的指令,在事務被提交以前,全部對數據庫的更改都會被 write-set 收集起來,而且將 write-set 紀錄的內容發送給其餘節點。
write-set 將在每一個節點進行認證測試,測試結果決定着節點是否應用write-set更改數據。
若是認證測試失敗,節點將丟棄 write-set ;若是認證測試成功,則事務提交。