oneproxy檢測主從複製同步延遲

Q:爲什麼要實現讀寫分離延遲檢測?


A:就好比你在ATM機存錢,你老婆收到短信後樂呵呵的拿網銀APP查看,結果錢沒過來。其實錢已經到賬了,只是查詢的ATM機節點錢還沒過來。所以我們dba要監控數據,一旦發現錢沒有複製到另一ATM機節點,會強制你從存錢的那個ATM機節點去查看。


讀寫分離可以通過php yii框架、java mybatis框架實現,但主從複製的延遲檢測一直是重難點,OneProxy內部支持主從複製延遲檢測的功能,主要通過如下兩種方式進行實現。


  1. 通過檢測從庫的Seconds_Behind_Master參數的值來實現。這也是OneProxy檢測主從同步複製延遲的默認方式,在後臺中可以看到延遲的Seconds,超過設定的延遲時間,OneProxy會停止向延遲從庫分發流量(已經過測試)。

wKiom1WKIA-TBqYUAAVYSnWZB6s732.jpg


2.OneProxy自己建立一張table,每秒進行update,來檢測同步複製延遲,很像Percona的pt-heartbeat工作 原理(pt-heartbeat通過真實的複製數據來確認mysql複製延遲,這個避免了對複製機制的依賴,從而能得出準確的落後複製時間,包含兩部分: 第一部分在主上pt-heartbeat的–update線程會在指定的時間間隔更新一個時間戳,第二部分是pt-heartbeat的–monitor 線程或者–check線程連接到從上檢查複製的心跳記錄(前面更新的時間戳),並和當前系統時間進行比較,得出時間的差異。) 超過設定的延遲時間,OneProxy會停止向延遲從庫分發流量(已經過測試)。

表名:oneproxy_replication_check

wKioL1WKIfHQO3ObAALoorb4oz4400.jpg


可以通過控制SQL,加上/* master */來強制走主庫,例如涉及到金額的查詢。


注:採用中間件的好處是前段代碼改動小。


如下圖所示:

wKiom1WKIKDhuCBBAALSjuEmfIs785.jpg



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章