什麼是單主資料庫複製? -Vlad Mihalcea

banq發表於2020-05-28

本文解釋什麼是單主資料庫複製,以及如何使用它來提高應用程式可用性和擴充套件只讀事務。

資料庫伺服器是企業系統的核心部分,如果發生故障,服務可用性可能會受到影響。如果資料庫伺服器在單個伺服器上執行,那麼我們將出現單點故障。任何硬體問題(例如,磁碟驅動器故障)或軟體故障(例如,驅動程式問題,更新故障)都將導致系統不可用。

有限的資源

如果只有一個資料庫伺服器節點,則垂直縮放是適應更高流量負載的唯一選擇。垂直擴充套件或縱向擴充套件意味著購買功能更強大的硬體,該硬體可提供更多資源(例如CPU,記憶體,I / O)來為傳入的客戶端事務提供服務。

對於特定的硬體配置,垂直擴充套件可以是擴充套件資料庫系統的可行且簡單的解決方案。問題是價效比不是線性的,因此,在達到一定的閾值之後,垂直縮放的收益就會遞減。

垂直擴充套件的另一個問題是,為了升級伺服器,需要停止資料庫服務。因此,在硬體升級期間,該應用程式將不可用,這可能會影響基礎業務運營。

資料庫複製

為了克服與單個資料庫伺服器節點相關的上述問題,我們可以設定多個資料庫伺服器節點。節點越多,處理傳入流量的資源就越多。

另外,如果資料庫伺服器節點已關閉,只要有備用資料庫節點要連線,系統仍可以處理請求。因此,可以在不影響整體系統可用性的情況下完成給定資料庫伺服器節點的硬體或軟體的升級。

具有多個節點的挑戰是資料一致性。如果所有節點在任何給定時間都處於同步狀態,則系統是序列化/線性化Linearizable,這是跨多個暫存器的資料一致性的最有力保證。

在所有資料庫節點之間同步資料的過程稱為複製,我們可以使用多種策略。

單主資料庫複製

主節點(也稱為主節點)是接受寫操作的節點,而副本節點只能處理只讀事務。有了單一的事實來源,就可以避免資料衝突。

為了使副本保持同步,主節點必須提供所有已提交事務完成的更改列表。

關聯式資料庫系統具有一個重做日誌,其中包含成功提交的所有資料更改。PostgreSQL使用WAL(預寫日誌)記錄來確保事務永續性和流複製。由於儲存引擎與MySQL伺服器是分開的,因此MySQL使用單獨的二進位制日誌進行復制。重做日誌是由InnoDB儲存引擎生成的,其目標是在MySQL伺服器建立二進位制日誌的同時提供事務永續性,並儲存邏輯日誌記錄,而不是由重做日誌建立的物理日誌。通過應用記錄在WAL或二進位制日誌條目中的相同更改,副本節點可以與主節點保持同步。

同步複製

如果當前事務正在等待一個或多個節點確認當前提交的更改已應用於副本,則複製過程是同步的。

同步複製的優點是副本與主節點同步,因此讀取可線性化。

在主節點發生故障的情況下,資料庫系統可以將任何同步副本提升為下一個主節點,並且不會丟失任何已提交的事務。

同步複製的缺點是將當前事務更改應用於一個或多個副本所引起的延遲。如果唯一的同步副本關閉,則可用性也會受到影響。

非同步複製

使用非同步複製時,在將控制元件返回給應用程式之前,主節點不會等待副本確認所有更改都已應用。因此,非同步副本落後於主節點。由於主節點不再等待副本以確認已應用所有更改,因此事務響應時間較短,並且如果一個或多個副本崩潰,可用性不會受到影響。缺點是資料不一致。如果複製時間視窗大於只讀事務的到達時間,則只讀事務可以返回陳舊的資料。

水平縮放

單主複製為只讀事務提供水平可伸縮性。如果只讀事務的數量增加,我們可以建立更多的副本節點來容納傳入的流量。這就是水平縮放或向外擴充套件的全部內容。與需要購買功能更強大的硬體的垂直縮放不同,可以使用商用硬體來實現水平縮放。另一方面,由於存在單個主節點,因此只能按比例放大(垂直縮放)讀寫事務。

結論

單主資料庫複製非常有用,因為它既提供了容錯功能,又提供了負載分割功能。因此,任何非平凡的企業應用程式都使用單主複製。著名問答社群Stack Overflow architecture 使用具有一個主節點和一個非同步副本的單主SQL Server複製群集。

 

相關文章