Replication
插入後立即讀取的 Galera 多節點 Master-Master 問題
我有一個多節點 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”會話變數。