mysql複制架構
,從左至右的master–slave–slave,前面兩個,即master–slave和第一個圖一樣,沒什麼可說的,唯一的小變化是中間的slave主機也開啟了二進制日志,他把從master上更新到的資訊寫入自身的logbin中,這樣的目的可以從圖中看到,為後面的slave主機提供二進制日志,此時這台slave主機其實充當了master主機的作用。
這個是一主多從的複制架構,實際應用也很多,可以用master來充當更新伺服器,其他的幾台slave充當隻讀伺服器,在一定程度上分擔了資料庫流 量,一定確定隻在master上更新資料。
這個一個主主複制的架構,兩台master互為主從,更新和讀取操作可以同時在兩台上進行
這是一個反例,這種複制是不被允許的,一台slave不可能同時接受兩台master的資料,不過我們可以考慮其他的辦法來實作,比如後面的blackhole資料存儲引擎就可以實作。
這個則是在主主複制架構上的一個擴充,每台master下面還有一層slave結構
這個其實也是主主複制結構的擴充(我的個人了解)隻是master的結構組成了一個環狀結構
這個也就容易了解,在環狀結構的基礎上又延伸出slave層。
主 要意思就是一主n從的結構,這裡這個n可能會有很多,幾十台,百台,那這樣master主機就會為每台slave主機配置設定出一個binlog dump程序,這樣的話會嚴重影響master的性能,這樣可以考慮在主從之間添加一個分布式master,配置blackhole存儲引擎,他起到一個 中繼的作用,他接收資料但丢其他而不是存儲,隻是會把master的二進制日志供下層的slave來讀取。
這裡摘錄一段别人的解釋:
把blackhole引擎,用做slave,配置一些過濾規則,比如複制某些表、不複制某些表。然後也作為一個master,帶多個slave。這樣的好 處是省了一定的網絡帶寬,如果沒有blackhole做中間環節,那麼就需要把第一個master的所有日志都傳遞到各個slave上去。經過 blackhole這一個slave兼master過濾後再傳遞給多個slave,減少了帶寬占用。而使用blackhole引擎的原因是它不占硬碟空 間,作為一個中轉,隻負責記日志、傳日志。
blackhole 存儲引擎就像 “ 黑洞 ” 一樣,它接收資料但丢棄它而不是存儲它。查詢總是傳回空集。
mysql> create table test(i int, c char(10)) engine = blackhole;
query ok, 0 rows affected (0.01 sec)
mysql> insert into test values(1,’record one’),(2,’record two’);
query ok, 2 rows affected (0.00 sec)
records: 2 duplicates: 0 warnings: 0
mysql> select * from test;
empty set (0.00 sec)
雖然 blackhole 表不存儲任何資料,但是如果開啟二進制日志 ( binary log ),sql 語句将被寫入 日志,反之 sql 語句會 被過濾掉。
blackhole 表的其他用途:
* 通 過對比開啟和關閉二進制日志 ( binary log ) 時 blackhole 的性能,來計算二進制日志記錄的開銷。
* blackhole 本質上是一個 “ no-op ” 存儲引擎,它可能被用來查找與存儲引擎自身不相關的性能瓶頸
下面這兩張圖也是跟blackhole存儲相關,等慢慢研究blackhole後再細細研究
最後這種情況大緻的意思,有三台mysql server,1,2和3,3做為複制從伺服器,想同時複制1上的db1和2上的db2,這樣可以在2上引進一個blackhole的db1來解決問題.