pt-heartbeat(percona toolkit)

来源:http://www.cnblogs.com/shengdimaya/archive/2017/06/23/7068671.html
-Advertisement-
Play Games

pt-heartbeat是用來監控主從延遲的一款percona工具,現在我們大部分的MySQL架構還是基於主從複製,例如MHA,MMM,keepalived等解決方案。而主從環境的話,我們很關心的就是主從延遲的問題,一般情況下我們在從庫執行以下語句: mysql> show slave status ...


pt-heartbeat是用來監控主從延遲的一款percona工具,現在我們大部分的MySQL架構還是基於主從複製,例如MHA,MMM,keepalived等解決方案。而主從環境的話,我們很關心的就是主從延遲的問題,一般情況下我們在從庫執行以下語句:
mysql> show slave status\G
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 172.16.16.35
Master_User: root
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000016
Read_Master_Log_Pos: 299786938
Relay_Log_File: mxqmongodb2-relay-bin.000032
Relay_Log_Pos: 299787151
Relay_Master_Log_File: mysql-bin.000016
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB:
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 0
Last_Error:
Skip_Counter: 0
Exec_Master_Log_Pos: 299786938
Relay_Log_Space: 299787451
Until_Condition: None
Until_Log_File:
Until_Log_Pos: 0
Master_SSL_Allowed: No
Master_SSL_CA_File:
Master_SSL_CA_Path:
Master_SSL_Cert:
Master_SSL_Cipher:
Master_SSL_Key:
Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
Last_IO_Errno: 0
Last_IO_Error:
Last_SQL_Errno: 0
Last_SQL_Error:
Replicate_Ignore_Server_Ids:
Master_Server_Id: 353306
Master_UUID: 806ede0c-357e-11e7-9719-00505693235d
Master_Info_File: mysql.slave_master_info
SQL_Delay: 0
SQL_Remaining_Delay: NULL
Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates
Master_Retry_Count: 86400
Master_Bind:
Last_IO_Error_Timestamp:
Last_SQL_Error_Timestamp:
Master_SSL_Crl:
Master_SSL_Crlpath:
Retrieved_Gtid_Set: 806ede0c-357e-11e7-9719-00505693235d:666-330347
Executed_Gtid_Set: 6a4ab82c-4029-11e7-86b0-00505693235d:1-3,
806ede0c-357e-11e7-9719-00505693235d:1-330347
Auto_Position: 1
Replicate_Rewrite_DB:
Channel_Name:
Master_TLS_Version:
1 row in set (0.00 sec)

 

就可以很明顯看得到主從的狀態,一般我們都會監控以下兩個進程的狀態確定主從延遲是否出現錯誤: Slave_IO_Running: Yes Slave_SQL_Running: Yes 對於主從延遲來說,我們可能監控最多的就是通過SMB(Seconds_Behind_Master)來監控,但是這個也並不是很靠譜的。或者我們通過監控Read_Master_Log_Pos-Exec_Master_Log_Pos的差值來看從庫是否有延遲,是否和主庫會有一定的延遲。但是這個也並不是很完美。首先看SMB,這個參數是怎麼比較出來的呢,SMB是通過將伺服器當前的時間戳與二進位日誌中的事件時間戳相對比得到的,而且是會產生誤報的情況。比如主庫執行一個大事物,時間執行很久,從庫接收以後對比時間戳發現已經延遲了,就會瞬間增大SMB的值。Read_Master_Log_Pos-Exec_Master_Log_Pos的值也並不是完全可靠。現在pt-heartbeat就能幫我們解決這個問題。 下麵我們來看一下pt-heartbeat的原理: pt-heartbeat會在master上創建一張表,按照一定的時間頻率更新該表的欄位,向該表寫入當前的時間戳,然後對比從庫的時間戳和pt-heartbeat所在機器的時間戳來判斷主從延遲。 其實這裡就有一個問題了,如果pt-heartbeat部署在從庫的話,要保證主從機器的時間是同步的,這個一般都是系統會每天自動對時間,是可以實現的。如果pt-heartbeat部署在主庫就不會有這個問題。其實個人感覺比較好的方法就是對比主從兩個庫的這張表的時間戳來得出延遲更為靠譜一點,當然這也要考慮到主從查詢的問題。 下麵看一下基本的用法: 先創建表:
[root@mxqmongodb2 bin]# ./pt-heartbeat --host=172.16.16.35 --port=3306 --user=root --password=123456 --database=test --update --create-table --daemonize

 

看一下表結構:
mysql> desc heartbeat;
+-----------------------+---------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------------------+---------------------+------+-----+---------+-------+
| ts | varchar(26) | NO | | NULL | |
| server_id | int(10) unsigned | NO | PRI | NULL | |
| file | varchar(255) | YES | | NULL | |
| position | bigint(20) unsigned | YES | | NULL | |
| relay_master_log_file | varchar(255) | YES | | NULL | |
| exec_master_log_pos | bigint(20) unsigned | YES | | NULL | |
+-----------------------+---------------------+------+-----+---------+-------+
6 rows in set (0.01 sec)
mysql> select * from heartbeat\G
*************************** 1. row ***************************
ts: 2017-06-23T09:27:49.001580
server_id: 353306
file: mysql-bin.000016
position: 299837221
relay_master_log_file: NULL
exec_master_log_pos: NULL
1 row in set (0.00 sec)

 

具體看一下,我們看一下資料庫的鏈接,發現有一個更新操作:
UPDATE `test`.`heartbeat` SET ts='2017-06-23T09:32:47.001330', file='mysql-bin.000016', position='29

 

其實下麵的操作只是開啟了一個進程,對heartbeat表不停的進行更新,以獲取最新的數據。
[root@mxqmongodb2 bin]# ./pt-heartbeat --host=172.16.16.35 --port=3306 --user=root --password=123456 --database=test --update --daemonize

 

接下來我們開啟監控進程,這個是不停的刷新的:
[root@mxqmongodb2 bin]# ./pt-heartbeat -D test --monitor -h 172.16.16.34 -uroot -P3306 -p123456
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 ]

 

我們指定會發現是沒有延遲的,我們現在開啟壓測,再觀察一下:
[root@mxqmongodb2 tpcc-mysql]# ./tpcc_start -h127.0.0.1 -P3306 -d tpcc -u root -p123456 -w 10 -c 20 -r 10 -l 600

 

觀察延遲的情況:
0.71s [ 0.68s, 0.16s, 0.05s ]
1.71s [ 0.71s, 0.17s, 0.06s ]
0.85s [ 0.72s, 0.17s, 0.06s ]
0.93s [ 0.74s, 0.18s, 0.06s ]
0.00s [ 0.74s, 0.18s, 0.06s ]
0.82s [ 0.73s, 0.18s, 0.06s ]
0.66s [ 0.75s, 0.18s, 0.06s ]
0.00s [ 0.75s, 0.18s, 0.06s ]
0.88s [ 0.74s, 0.18s, 0.06s ]
1.00s [ 0.74s, 0.19s, 0.06s ]

 

我們可以看到延遲情況,我們可以把這些輸出結果重定向到一個文件,對主從延遲進行監控,這也是很有效果的。 我們現在手動再從庫停掉sql_thread:
mysql> stop slave sql_thread;
Query OK, 0 rows affected (0.03 sec)

 

然後再看輸出結果:
53.00s [ 23.85s, 6.77s, 4.20s ]
54.00s [ 24.75s, 6.94s, 4.26s ]
55.00s [ 25.67s, 7.12s, 4.32s ]
56.00s [ 26.60s, 7.30s, 4.39s ]
57.00s [ 27.55s, 7.48s, 4.45s ]
58.00s [ 28.52s, 7.67s, 4.51s ]
59.00s [ 29.50s, 7.86s, 4.58s ]
60.00s [ 30.50s, 8.05s, 4.65s ]
61.00s [ 31.50s, 8.23s, 4.71s ]
62.00s [ 32.50s, 8.42s, 4.78s ]
63.00s [ 33.50s, 8.61s, 4.85s ]
64.00s [ 34.50s, 8.80s, 4.92s ]
65.00s [ 35.50s, 8.98s, 5.00s ]

 

發現是不停的遞增的,一次間隔時間為一秒鐘。我們再啟動這個sql_thread,從庫很快就跟上了主庫。 或者我們可以通過下麵進行監控:
[root@mxqmongodb2 bin]# ./pt-heartbeat -D test --check -h 172.16.16.34 -uroot -P3306 -p123456
1.00
[root@mxqmongodb2 bin]# ./pt-heartbeat -D test --check -h 172.16.16.34 -uroot -P3306 -p123456
0.00

 

他是會直接返回一個延遲的秒數,這個也是比較靠譜的。我們可以直接拿這個值進行監控。      
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 視頻 視頻的播放過程可以簡單理解為一幀一幀的畫面按照時間順序呈現出來的過程,就像在一個本子的每一頁畫上畫,然後快速翻動的感覺。 但是在實際應用中,並不是每一幀都是完整的畫面,因為如果每一幀畫面都是完整的圖片,那麼一個視頻的體積就會很大,這樣對於網路傳輸或者視頻數據存儲來說成本太高,所以通常會對視頻流 ...
  • 轉載請標明出處:http://blog.csdn.net/zhaoyanjun6/article/details/72956016 本文出自 "【趙彥軍的博客】" 開啟 Https 抓包 Fiddler 預設下,Fiddler不會捕獲HTTPS會話,需要你設置下。 : 抓取所有的 https 程式, ...
  • 初始效果圖 傾斜屏幕後效果圖 ...
  • 這本是一個很基礎的問題,很慚愧,很久沒研究這一塊了,已經忘得差不多了。前段時間面試,有面試官問過這個問題。雖然覺得沒必要記,要用的時候寫個Demo,打個Log就清楚了。但是今天順手寫了個Demo,也就順手分享一下結果。 第一個界面打開.png 第一個界面打開.png 這是第一個Activity打開顯 ...
  • CacheDispatcher 緩存分發 cacheQueue只是一個優先隊列,我們在start方法中,分析了CacheDispatcher的構成是需要cacheQueue,然後調用CacheDispatcher.start方法,我們看一下CacheDispatcher得到cacheQueue之後, ...
  • armv7,armv7s,arm64,i386,x86_64 詳解 一、概要 平時項目開發中,可能使用第三方提供的靜態庫.a,如果.a提供方技術不成熟,使用的時候就會出現問題,例如: 在真機上編譯報錯:No architectures to compile for (ONLY_ACTIVE_ARCH ...
  • 1.DECODE 只有Oracle 才有,其它資料庫不支持; 2.CASE WHEN的用法, Oracle、SQL Server、 MySQL 都支持; 3.DECODE 只能用做相等判斷,但是可以配合sign函數進行大於,小於,等於的判斷,CASE when可用於=,>=,<,<=,<>,is n ...
  • 將大量數據保存起來,通過電腦加工而成的可以進行高效訪問的數據集合稱為資料庫(Database,DB)。將姓名、住址、電話號碼、郵箱地址、愛好和家庭構成等數據保存到資料庫中,就可以隨時迅速獲取想要的信息了。用來管理資料庫的電腦系統稱為資料庫管理系統(Database Management Syst... ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...