天天看點

mysql基于BLACKHOLE複制基礎的各種架構

mysql複制架構

mysql基于BLACKHOLE複制基礎的各種架構
mysql基于BLACKHOLE複制基礎的各種架構

,從左至右的master–slave–slave,前面兩個,即master–slave和第一個圖一樣,沒什麼可說的,唯一的小變化是中間的slave主機也開啟了二進制日志,他把從master上更新到的資訊寫入自身的logbin中,這樣的目的可以從圖中看到,為後面的slave主機提供二進制日志,此時這台slave主機其實充當了master主機的作用。

mysql基于BLACKHOLE複制基礎的各種架構
mysql基于BLACKHOLE複制基礎的各種架構

這個是一主多從的複制架構,實際應用也很多,可以用master來充當更新伺服器,其他的幾台slave充當隻讀伺服器,在一定程度上分擔了資料庫流 量,一定確定隻在master上更新資料。

mysql基于BLACKHOLE複制基礎的各種架構

這個一個主主複制的架構,兩台master互為主從,更新和讀取操作可以同時在兩台上進行

mysql基于BLACKHOLE複制基礎的各種架構

這是一個反例,這種複制是不被允許的,一台slave不可能同時接受兩台master的資料,不過我們可以考慮其他的辦法來實作,比如後面的blackhole資料存儲引擎就可以實作。

mysql基于BLACKHOLE複制基礎的各種架構

這個則是在主主複制架構上的一個擴充,每台master下面還有一層slave結構

mysql基于BLACKHOLE複制基礎的各種架構

這個其實也是主主複制結構的擴充(我的個人了解)隻是master的結構組成了一個環狀結構

mysql基于BLACKHOLE複制基礎的各種架構

這個也就容易了解,在環狀結構的基礎上又延伸出slave層。

mysql基于BLACKHOLE複制基礎的各種架構
mysql基于BLACKHOLE複制基礎的各種架構

主 要意思就是一主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基于BLACKHOLE複制基礎的各種架構
mysql基于BLACKHOLE複制基礎的各種架構

最後這種情況大緻的意思,有三台mysql server,1,2和3,3做為複制從伺服器,想同時複制1上的db1和2上的db2,這樣可以在2上引進一個blackhole的db1來解決問題.