seconds_behind_master的陷阱和pt-heartbeat
Seconds_behind_master
In essence, this field measures the time difference in seconds between the slave SQL thread and the slave I/O thread.
binlog中每個binlog events都會附上執行時的timestamp,MySQL將當前系統的時間戳同SQL thread正在執行的binlog event上的時間戳做比較,這個差值就Seconds_Behind_Master的值。
主備時延 = master到relay_log的時延 + relay_log到sql_thread的時延,
當後者為0時seconds_behind_master也為0,而無法檢測到前者的lag,即該引數只有在sql thread執行binlog event時才被計算。
Mysql自身有預防機制:
1 binlog dump被kill時會通知備庫;
2 備庫長時間沒有收到主庫變更,則會自動重連,由slave-net-timeout/master-connect-retry/master-retry-count決定;
改進
1 採用別的監控方法,如pt-heartbeat,主庫定期將當前時間更新相應表記錄,備庫讀取並與備庫當前時間比較來獲取延遲時間;
只要表中有記錄,備庫就可以實時計算lag,可避免seconds_behind_master=0可能帶來的誤報。
2 配置slave-net-timeout/master-connect-retry/master-retry-count(後兩種在change master中指定),備庫過了slave-net-timeout(預設3600s)仍未從主庫收到資訊則會嘗試重連,master-connect-retry為重連次數,master-retry-count為每次間隔時間(預設皆為60s);
Pt-heartbeat
工作原理:
1,在主庫上建立一張heartbeat表,按照一定的時間頻率更新該表的欄位(把時間更新進去)。
2,連線到從庫上檢查複製的時間記錄,和從庫的當前系統時間進行比較,得出時間的差異。
在主庫上開啟守護程式來更新test.heartbeat表:
pt-heartbeat -D test --update -h master-server --daemonize
監控從的延遲情況:
pt-heartbeat -D test --monitor -h slave-server #一直執行,不退出
pt-heartbeat -D test--check h=slave-server #執行一次就退出
引數
--check
檢查從的延遲,檢查一次就退出,除非指定了--recurse會遞迴的檢查所有的從伺服器。
--monitor
持續監控從的延遲情況。透過--interval指定的間隔時間,列印出從的延遲資訊,透過--file則可以把這些資訊列印到指定的檔案。
--daemonize
執行時,放入到後臺執行
--file
列印--monitor最新的記錄到指定的檔案,很好的防止滿螢幕都是資料的煩惱。
--frames
在--monitor裡輸出的[]裡的記錄段,預設是1m,5m,15m。可以指定1個,如:--frames=1s,多個用逗號隔開。可用單位有秒(s)、分鐘(m)、小時(h)、天(d)。
--interval
檢查、更新的間隔時間。預設是見是1s。最小的單位是0.01s,最大精度為小數點後兩位,因此0.015將調整至0.02。
--log
開啟daemonized模式的所有日誌將會被列印到制定的檔案中。
--update
更新主上的心跳錶。
--replace
使用--replace代替--update模式更新心跳錶裡的時間欄位,這樣的好處是不用管表裡是否有行。
--stop
停止執行該工具(--daemonize),在/tmp/目錄下建立一個“pt-heartbeat-sentinel” 檔案。後面想重新開啟則需要把該臨時檔案刪除,才能開啟(--daemonize)。
--table
指定心跳錶名,預設heartbeat。
--create-table
在主上建立心跳監控的表,如果該表不存在。可以自己建立,建議儲存引擎改成memory。透過更新該表知道主從延遲的差距。
CREATE TABLE heartbeat (
ts varchar(26) NOT NULL,
server_id int unsigned NOT NULL PRIMARY KEY,
file varchar(255) DEFAULT NULL, -- SHOW MASTER STATUS
position bigint unsigned DEFAULT NULL, -- SHOW MASTER STATUS
relay_master_log_file varchar(255) DEFAULT NULL, -- SHOW SLAVE STATUS
exec_master_log_pos bigint unsigned DEFAULT NULL -- SHOW SLAVE STATUS
);
也可簡化為
CREATE TABLE heartbeat (
id int NOT NULL PRIMARY KEY,
ts datetime NOT NULL
);
heratbeat表一直在更改ts,若是手工建表則必須手工插入一條記錄
INSERT INTO heartbeat (ts, server_id) VALUES (NOW(), N);
or
INSERT INTO heartbeat (ts, server_id) VALUES (UTC_TIMESTAMP(), N);
測試案例
Master 10.0.0.1:3306
Slave 10.0.0.2:3306
1,在主上執行:--daemonize表示守護程式,後臺執行。
[root@test_10.0.0.1 ~]# pt-heartbeat --user=root --ask-pass --host=127.0.0.1 --create-table -D test --interval=1 --update --replace --daemonize
Enter password:
[root@test_10.0.0.1 ~]#
3.在主上執行監測複製延遲
複製程式碼
[root@test_10.0.0.1 ~]# pt-heartbeat -D test --table=heartbeat --monitor -h 10.0.0.2 –uroot -p
0.00s [ 0.00s, 0.00s, 0.00s ]
0.00s [ 0.00s, 0.00s, 0.00s ]
0.00s [ 0.00s, 0.00s, 0.00s ]
0.00s [ 0.00s, 0.00s, 0.00s ]
0.00s [ 0.00s, 0.00s, 0.00s ]
0表示從沒有延遲。 [ 0.00s, 0.00s, 0.00s ] 表示1m,5m,15m的平均值。可以透過--frames去設定。
如何關閉主上面執行的後臺程式。可以用引數--stop 去關閉:
[root@test_10.0.0.1 ~]# pt-heartbeat --stop
Successfully created file /tmp/pt-heartbeat-sentinel
[root@test_10.0.0.1 ~]#
這樣就把在主上開啟的程式殺掉了,後續要繼續開啟後臺進行的話,需要把/tmp/pt-heartbeat-sentinel 檔案刪除,否則啟動不了。
參考資料
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/15480802/viewspace-1452213/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Python技巧和陷阱Python
- Go slice切片的“陷阱”和本質Go
- await、return 和 return await 的陷阱AI
- 中斷和異常,陷阱的區別和聯絡
- CSS Grid中的陷阱和絆腳石CSS
- [MySQL管理] Seconds_Behind_Master 解析MySqlAST
- slave之Seconds_Behind_Master析AST
- 敏捷實踐的誤區和陷阱的七個方面敏捷
- 開發中常遇到的Python陷阱和注意點Python
- 批量更新的陷阱?
- Mysql 主從延時監控(pt-heartbeat)詳解MySql
- WebRTC 的三個“陷阱”Web
- JavaScript 的常見“陷阱”JavaScript
- dbca刪庫的陷阱
- 上傳檔案的陷阱
- python關於+=的陷阱Python
- Java List的remove()方法陷阱JavaREM
- Thread.Abort()的陷阱thread
- jeesite的陷阱需要注意
- 潛在的Python陷阱Python
- 搭建DataGuard碰到的小陷阱
- 多元泰勒展開的陷阱
- 訓練生成對抗網路的一些技巧和陷阱
- 使用Python和Java呼叫Shell指令碼時的死鎖陷阱PythonJava指令碼
- Python函式引數預設值的陷阱和原理深究Python函式
- STL序列式容器中刪除元素的方法和陷阱 一 (轉)
- Rust克隆陷阱?Rust
- 分散式系統:常見陷阱和複雜性分散式
- MySQL · 答疑解惑 · 備庫Seconds_Behind_Master計算MySqlAST
- mysql主從同步(5)-同步延遲狀態考量(seconds_behind_master和pt-heartbea)MySql主從同步AST
- 你可能不知道的陷阱:C#委託和事件的困惑C#事件
- C陷阱和缺陷,必須知道的495個C語言問題C語言
- STL關聯式容器中刪除元素的方法和陷阱 四 (轉)
- 微服務的歷史與陷阱微服務
- 箭頭函式this指向的陷阱函式
- 程式設計師的“能力陷阱”程式設計師
- Python字典遍歷的陷阱Python
- Docker 日誌的 10 大陷阱Docker