多主複製與單主性能
我試圖圍繞一個假設的場景來思考。
想像一下,我們有一個寫入量很大的分佈式數據庫,而分片不是一種選擇。
我想知道多領導者複製(寫-寫)是否/如何比單領導者場景(寫-讀)更有效,因為寫-寫具有同步數據庫並將寫入傳播到其他主節點的成本,最終以最終,相同數量的寫操作。
在哪些情況下,用於寫入繁重的應用程序的多領導者複製被認為比單領導者俱有更高的性能,而在哪些情況下不是?
我理解這個問題是廣泛而細微的,但很樂意閱讀有關該主題的一些想法。
每次寫入都在每台機器上執行,無論是 Master 還是 Slave。其必然結果是傳統複製的寫入擴展存在限制。甚至 Galera 和 Group Replication 也只是 Master(s) 和 Slave(s) 的變體。每台伺服器都有所有數據,並儘可能保持最新。
因此,分片是獲得寫入擴展的唯一方法。
好的,無論如何,讓我試著回答你的問題。
使用 RBR(Row-Based-Replication),Slave 通常可以比 Master 更省力地進行寫入(///etc )
INSERT
。UPDATE``DELETE
這意味著擁有多個大師將在一定程度上分散“大師的努力”。因此,擁有更多的 Master 有助於擴展,並且將更多的讀取轉移到 Slave 也有幫助。
一些配置,以及我的評論:
M <-> M “Dual Master” – 如果你同時寫信給兩者(如上所述),那麼它是一個有點脆弱的系統。
M1 -> M2 -> M3 -> M1 “Circular Masters”——非常脆弱。如果一台伺服器出現故障,修復將是一場噩夢。
3 個以上的 Master,每個 Master 相互交談 “Galera Cluster”——這解決了上述脆弱性,但如果 Master 之間存在較大的延遲,則會受到影響。(獲得地理隔離以獲得 HA 的延遲。)這是當今某些寫入擴展的最佳配置。
“Group Replication”——在 HA 方面是 Galera 的競爭對手。我不確定寫入縮放。
在上述所有情況下,從站可以掛起任何或所有主站以提供讀取縮放。
對於寫入擴展(而不是 HA),我會在同一個伺服器機房中使用 3 個 Galera 節點。如果有足夠多的讀取需要擔心,那麼添加一些只讀奴隸。
注意:超過 Galera 中的 3 個節點(或者可能是 5 個),您將面臨性能下降的風險。這是因為每個節點都必須在每個
COMMIT
.