溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Seconds_Behind_Master不準(zhǔn)確問(wèn)題     Seconds_Behind_Mas析ter解

發(fā)布時(shí)間:2020-06-22 07:50:03 來(lái)源:網(wǎng)絡(luò) 閱讀:1478 作者:524683249 欄目:數(shù)據(jù)庫(kù)

Seconds_Behind_Master不準(zhǔn)確問(wèn)題

      Seconds_Behind_Master解

 

1. Seconds_Behind_Master說(shuō)明:

通過(guò)show slave status查看到的Seconds_Behind_Master,從字面上來(lái)看,他是slave落后master的秒數(shù),一般情況下,也確實(shí)這樣,我們可以通過(guò)Seconds_Behind_Master數(shù)字查看slave是否落后于master,但是在一些環(huán)境中,他確會(huì)讓我們產(chǎn)生幻覺(jué)。

mysql官網(wǎng)中中,對(duì)Seconds_Behind_Master的有一句話闡述如下:

In essence, this field measures the time difference in seconds between the slave SQL thread and the slave I/O thread.          

很清晰的表明,該值是SQL thread I/O thread.之間的差值。

 

2. Seconds_Behind_Master原理

Seconds_Behind_Master是通過(guò)比較sql_thread執(zhí)行的eventtimestampio_thread復(fù)制好的 eventtimestamp(簡(jiǎn)寫(xiě)為ts)進(jìn)行比較,而得到的這么一個(gè)差值。我們都知道的relay-log和主庫(kù)的bin-log里面的內(nèi)容完全一 樣,在記錄sql語(yǔ)句的同時(shí)會(huì)被記錄上當(dāng)時(shí)的ts,所以比較參考的值來(lái)自于binlog

 

3. 導(dǎo)致Seconds_Behind_Master不準(zhǔn)確的因素

a. 當(dāng)在很快的網(wǎng)絡(luò)連接情況下,I/O thread. 能很快的從masterbinlog中同步sqlslaverelay-log里,這樣,這個(gè)值就能基本確定的slave落后master的秒數(shù)

當(dāng)網(wǎng)絡(luò)環(huán)境特別糟糕的情況下,這個(gè)值確會(huì)讓我們產(chǎn)生幻覺(jué),I/O thread同步很慢,每次同步過(guò)來(lái),SQL thread就能立即執(zhí)行,這樣,我們看到的Seconds_Behind_Master0,而真正的,slave已經(jīng)落后master很多很多。這時(shí)業(yè)務(wù)部門(mén)的同志們就會(huì)抱怨slavemaster數(shù)據(jù)不對(duì),而你看到的Seconds_Behind_Master確實(shí)為0,你就會(huì)非常的郁悶了。

其實(shí)這個(gè)時(shí)候,我們看下master,與slave就能很好的確定這期間的原因。

mysql> show master status\G

*************************** 1. row ***************************

File: ******-bin.001291

Position: 896711460

Binlog_Do_DB: 

Binlog_Ignore_DB: 

1 row in set (0.00 sec)

 

mysql> show slave status\G

*************************** 1. row ***************************

Slave_IO_State: Waiting for master to send event

Master_Host: 10.69.6.163

Master_User: replica

Master_Port: 3801

Connect_Retry: 60

Master_Log_File: *****-bin.001211

Read_Master_Log_Pos: 278633662

Relay_Log_File: *****-relay-bin.002323

Relay_Log_Pos: 161735853

Relay_Master_Log_File: *******-bin.001211

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: 278633662

Relay_Log_Space: 161735853

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

1 row in set (0.00 sec)

 

b 有很長(zhǎng)一段時(shí)間沒(méi)有數(shù)據(jù)提交,slave I/O thread timeslave SQL thread time都保持在舊值,比如A(但事實(shí)上master上的時(shí)間已經(jīng)到A+I),這個(gè)時(shí)候主庫(kù)出現(xiàn)提交,slave I/O開(kāi)始去和master同步binlog,slave I/O thread time更新到A+I,但是slave SQL thread time保持在A值,這時(shí)的seconds_behind_master=I,出現(xiàn)較大延遲,但其實(shí)是否出現(xiàn)延遲是不確定的

 

cMysql主從同步延遲受到多種因素影響, 比如大事務(wù), 從庫(kù)查詢壓力, 網(wǎng)路延遲等; 這些比較常見(jiàn); 但還受到主從機(jī)器系統(tǒng)時(shí)鐘差的影響,這一點(diǎn)可能容易被忽視。

 

d.總結(jié):由此看來(lái) 我們分析Seconds_Behind_Master這個(gè)參數(shù)的時(shí)候應(yīng)該結(jié)合主從之間binlog日志的文件名和具體的網(wǎng)絡(luò)環(huán)境來(lái)看。當(dāng)然在網(wǎng)絡(luò)暢通的情況下我們可以直接通過(guò)這個(gè)參數(shù)來(lái)看出主從之間的延遲。不過(guò)總的來(lái)說(shuō)seconds_behind_master受影響的因素很多不能保持準(zhǔn)確。

 

4. 對(duì)于second_behind_master不準(zhǔn)確的解決方案

mk-heartbeatMaatkit萬(wàn)能工具包中的一個(gè)工具,被認(rèn)為可以準(zhǔn)確判斷復(fù)制延時(shí)的方法。

mk-heartbeat的實(shí)現(xiàn)也是借助timestmp的比較實(shí)現(xiàn)的,它首先需要保證主從服務(wù)器必須要保持一致,通過(guò)與相同的一個(gè)NTP server同步時(shí)鐘。它需要在主庫(kù)上創(chuàng)建一個(gè)heartbeat的表,里面至少有idts兩個(gè)字段,idserver_id,ts就是當(dāng)前的時(shí)間戳 now(),該結(jié)構(gòu)也會(huì)被復(fù)制到從庫(kù)上,表建好以后,會(huì)在主庫(kù)上以后臺(tái)進(jìn)程的模式去執(zhí)行一行更新操作的命令,定期去向表中的插入數(shù)據(jù),這個(gè)周期默認(rèn)為1 秒,同時(shí)從庫(kù)也會(huì)在后臺(tái)執(zhí)行一個(gè)監(jiān)控命令,與主庫(kù)保持一致的周期去比較,復(fù)制過(guò)來(lái)記錄的ts值與主庫(kù)上的同一條ts值,差值為0表示無(wú)延時(shí),差值越大表示 延時(shí)的秒數(shù)越多。我們都知道復(fù)制是異步的ts不肯完全一致,所以該工具允許半秒的差距,在這之內(nèi)的差異都可忽略認(rèn)為無(wú)延時(shí)。這個(gè)工具就是通過(guò)實(shí)打?qū)嵉膹?fù) 制,巧妙的借用timestamp來(lái)檢查延時(shí)

 


向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI