主從複製:主將成為寫入瓶頸

主從複製:主將成為寫入瓶頸

mysql資料庫有大約2TB的資料。

我正在運行主從複製。使用資料庫的應用程式僅在 2 個從屬伺服器之一上讀取 (SELECT) 查詢,並在主伺服器上寫入 (DELETE/INSERT/UPDATE) 查詢。應用程式的讀取次數多於寫入次數。

如果我們在讀取(SELECT)查詢時遇到問題,我們可以添加另一個從資料庫並告訴應用程式還有另一個從資料庫。所以它的擴充性很好...

目前,由於寫入,主節點正在運行大約 40% 的磁碟 io。

所以我正在考慮未來如何擴展資料庫。因為有一天主人會超載。

那裡有什麼解決辦法嗎?

也許mysql集群?如果是這樣,將資料庫切換到 ndb 是否有任何陷阱或限制?

先非常感謝...:)

答案1

對於擴充 MySQL,沒有一刀切的答案。一些一般提示:

  • 盡可能地「對角線」縮放,即。只要您仍然能夠在商用硬體上運行,就將資料保留在單一 MySQL 伺服器上。這可能意味著 2 個四核心 CPU、64+ GB RAM、8 個磁碟 RAID 10——或更高。 「商品硬體」的高端每年都在變得越來越快。

  • 請參閱 Brad Fitzpatrick 關於擴展 LiveJournal 的演示。就擴展 LAMP 而言,它們幾乎是經典。在本簡報第 25 - 26 頁您會看到 MySQL 複製最終將面臨的問題:寫入消耗所有可用的磁碟 I/O。

  • 讀 ”高效能MySQL「。這真是一本好書,作者看過許多高負載 MySQL 安裝的作者

  • 盡可能避免分片(將資料分佈在許多 MySQL 伺服器上)。當你開始分片時,你就放棄了關聯式資料庫的大部分好處,並且減慢了開發速度。如果必須進行分片,請考慮使用具有內建多伺服器模型的 NoSQL 資料儲存 - fx Riak、Cassandra、HBase、MongoDB。理想情況下,在 MySQL 和 NoSQL 之間進行“功能分區”,這樣您就可以繼續使用 MySQL 來處理不太適合 RDBMS 的熱數據,而使用 NoSQL 引擎來處理不需要與 MySQL 連接的“熱”數據。數據。

也許mysql集群?如果是這樣,將資料庫切換到 ndb 是否有任何陷阱或限制?

在 ”網路操作「 Baron Schwartz 有一章關於 MySQL 的內容。他幾乎對在網站環境中使用 MySQL Cluster / NDB 說「不!」。引用:「.. 它對於連接和 GROUP BY 查詢表現不佳,並且Web 應用程式需要這些。

答案2

MySQL 叢集將透過將資料庫分解為分佈在多台機器上的碎片來獲得寫入的可擴展性。但它會大大減慢從多個片段提取資料的複雜查詢的速度。只有您可以確定這對應用程式效能的影響。

您可能希望考慮手動對資料進行分片,而不是讓叢集引擎為您做這件事。這將需要更多配置,但如果您了解應用程式如何使用資料庫,您也許能夠提出一種分片方案,允許大多數查詢僅存取一個分片。

答案3

請記住,MySQL 複製是單執行緒的,因此您的複製可能不會受到主伺服器容量的限制,而是受到從伺服器的限制,從伺服器無法落後於主伺服器,並且會不同步。從這篇文章:

複製重播過程在副本上的單一執行緒中執行,因此無法跟上主伺服器上即使是中等繁忙的寫入負載,因為許多更新是同時發生的。

答案4

您可以考慮對資訊本身進行叢集。

相關內容