Mysql multi replication 之 Tungsten

來源:互聯網
上載者:User

Tungsten multi replication

簡單介紹
Tungsten 提供的是一種類似於xtradb cluster的多主複製方式,其核心思想是多個Master同時維護一份資料。
xtradb cluster維護的是一個環形結構通過在Mysql代碼曾進行加鎖來保證資料一致性,而Tungsten則是簡單的依賴於Binlog的Transfer和Apply來保證所有Master節點的資料都是一致的,並且Tungsten並不是簡單的維護一個環形結構而是一種更複雜的結構。

拓撲結構

下面這張圖就是Matser節點為4個的情況下的一個拓撲結構:

可以看出其對應關係非常複雜,任何一個Master節點寫的Binlog都要向其他三個節點進行傳輸,如果要再加一個節點的話就會是這樣:


其實這樣最大的好處就是比較靈活,我可以把一台Mysql的Binlog放在任何一台或者多台Myqsql上執行。
其實這個結構是什麼樣完全取決於怎麼配的。

實現原理

下面就兩個Master節點的情況下對他的原理進行說明。

一共有兩個Master節點:Sjc和Nyc
每一個Master節點對應兩個服務LocalService和RemoteService,:Sjc的LocalService會把Binlog解析成TungstenLog推送到Nyc的RemoteService上並且在Nyc上執行,同樣Nyc的LocalService會把Binlog解析成TungstenLog推送到Sjc的RemoteService上並且執行。
這樣會有一個問題:
會不會出現無線迴圈的推送,比如說在Sjc產生的Binlog執行到Nyc上,在Nyc上Apply這個Binlog以後產生的Binlog會不會再次傳到Sjc上執行?
Tungsten使用BidiRemoteSlaveFilter來防止這種情況的發生,簡單的理解他會加一個標記符來標記這個SQL語句是在本機執行的還是遠程傳輸過來的。比如說在Sjc上執行的SQL語句傳輸到Nyc上,在Nyc上執行以後就會在Binlog裡加一個注釋,來表明是從哪一個LocalService傳送過來的,這樣他就能知道把需要哪些Binlog傳送到別的機器上。

insert into xx values (911) /* ___SERVICE___ = [test1] */

Tungsten的問題

Tungsten完全是根據Binlog解析成TungstenLog傳輸到別的機器再Apply來保證資料完整性的,所以這個過程中問題會很多。
假設這樣一種情況:
master1 開啟事務執行一條Update,修改一條記錄。
Master2 同時開始事務執行Delete,刪除Master1修改的記錄,並提交。
單節點的情況下會被鎖住,但是在Tungsten這種複製關係中會直接報錯。
在TungstenLog的傳輸過程中有可能會遇到延遲等網路問題或者Tungsten本身服務掛掉,這時候各個節點資料之間的一致性是無法保證的。

雖然Tungsten有著這樣那樣的問題,但是tungsten 他很靈活,他能實現多Master寫到一個slave。這樣對我們合并多個Slave有很大協助。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.