Replication

插入後立即讀取的 Galera 多節點 Master-Master 問題

  • January 28, 2019

我有一個多節點 Galera 設置,它是 master-master。對 Web 伺服器 A 的 API 呼叫可以將數據寫入數據庫 1、2、3 或 4(我們沒有使用 HaProxy)。之後的另一個 API 呼叫可能會再次訪問 Web 伺服器 A。但是,第二個 API 呼叫找不到在上一個請求中創建的記錄。

  • 請求 1:命中 WS A 或 B。它可以連接到 DB 1、2、3 或 4。使用 PDO 事務將記錄寫入表中
  • 請求 2:命中 WS A 或 B。它可以連接到 DB 1、2、3 或 4。嘗試獲取在請求 1 中創建的記錄,但它不可用。

值得注意的是:

  • 兩個請求都是非同步發出的。
  • 該記錄最終出現在所有節點中(手動檢查,因此不確定在發出第二個請求時它是否不存在)

伙計們,我在這里處理什麼?

@Bill Karwin 提供的這個答案解釋了這是如何成為 Galera Cluster 的缺點之一。

使用 Galera Cluster 而不是 Master/Slave Replication 的缺點是什麼?

“…因此,從另一個集群節點讀取過時數據的可能性仍然很小。您可以設置一個選項來強制 SELECT 等待,直到工作集隊列更新數據庫,但這意味著您在 SELECT 上有延遲.. 。”

請參閱這篇文章,了解如何強制 SELECT 等待最新數據。http://galeracluster.com/2015/06/achieving-read-after-write-semantics-with-galera/

您將需要設置“wsrep_sync_wait”會話變數。

引用自:https://dba.stackexchange.com/questions/182292