Q:為什么要實現讀寫分離延遲檢測?
A:就好比你在ATM機存錢,你老婆收到短信后樂呵呵的拿網銀APP查看,結果錢沒過來。其實錢已經到賬了,只是查詢的ATM機節點錢還沒過來。所以我們dba要監控數據,一旦發現錢沒有復制到另一ATM機節點,會強制你從存錢的那個ATM機節點去查看。
讀寫分離可以通過php yii框架、java mybatis框架實現,但主從復制的延遲檢測一直是重難點,OneProxy內部支持主從復制延遲檢測的功能,主要通過如下兩種方式進行實現。
-
通過檢測從庫的Seconds_Behind_Master參數的值來實現。這也是OneProxy檢測主從同步復制延遲的默認方式,在后臺中可以看到延遲的Seconds,超過設定的延遲時間,OneProxy會停止向延遲從庫分發流量(已經過測試)。
2.OneProxy自己建立一張table,每秒進行update,來檢測同步復制延遲,很像Percona的pt-heartbeat工作 原理(pt-heartbeat通過真實的復制數據來確認mysql復制延遲,這個避免了對復制機制的依賴,從而能得出準確的落后復制時間,包含兩部分: 第一部分在主上pt-heartbeat的–update線程會在指定的時間間隔更新一個時間戳,第二部分是pt-heartbeat的–monitor 線程或者–check線程連接到從上檢查復制的心跳記錄(前面更新的時間戳),并和當前系統時間進行比較,得出時間的差異。) 超過設定的延遲時間,OneProxy會停止向延遲從庫分發流量(已經過測試)。
表名:oneproxy_replication_check
可以通過控制SQL,加上/* master */來強制走主庫,例如涉及到金額的查詢。
注:采用中間件的好處是前段代碼改動小。
如下圖所示:
本文轉自hcymysql51CTO博客,原文鏈接:?http://blog.51cto.com/hcymysql/1664963,如需轉載請自行聯系原作者