Показывает ли `seconds_behind_master` точное задержка раба от Master?
-
16-10-2019 - |
Вопрос
Делает Seconds_Behind_Master
Всегда покажите правильное количество секунд, которые раб позади Мастера?
Я также внедрил мониторинг репликации MK-Heartbeat.
Это показало другой результат по сравнению с second_behind_master.
Какой из них более точен?
Решение
Seconds_behind_master основана на разнице между Unix_timestamp () и временной меткой, зарегистрированной для запроса в двоичном журнале мастера, или журналом реле в рабе. Seconds_behind_master на самом деле вызывает у вас теряние в контексте реального времени, если репликация обрабатывает серию длинных запросов. Задержка может расти астрономически до тех пор, пока не будут обработаны все записи журнала реле, а затем second_behind_master внезапно упадут до нуля. С точки зрения реального времени, у вас нет возможности узнать или предвидеть, когда отставание будет рассеиваться, пока не достигнет нуля.
Строго, используя MySQL, вы можете отслеживать отставание репликации с точки зрения реального времени следующим образом:
- Из
SHOW SLAVE STATUS\G
, получить два значенияRelay_Master_Log_File
Представляет файл журнала, содержащий последний успешно выполнять оператор SQL на мастере, который был выполнен в рабе.Exec_Master_Log_Pos
представляет позицию внутриRelay_Master_Log_File
из последних успешных выполненных операторов SQL на мастере, который был выполнен в рабстве.
Вы можете выполнить это против этого двоичного журнала:
TMSTMP=`mysqlbinlog ---start-position=EMLP RMFL | head -50 | grep "^SET TIMESTAMP=" | head -1 | sed 's/=/ /g' | sed 's/\// /g' | awk '{print $3}'`
RIGHTNOW=`date +%s`
(( REPLAG = RIGHTNOW - TMSTMP ))
где emlp ex exec_master_log_pos rmfl и является relay_master_log_file
Хотя это реалистично правильный способ получить отставание репликации, используя только файл журнала и пост, вы должны
- Сообщайтесь с рабом, чтобы получить необходимый файл журнала и позицию
- общаться с мастером, чтобы забрать свалку Binlog
- Сбросьте Binlog каждый раз, когда вы проверяете (Mysqlbinlog работает безопасно, когда он не открыт в настоящее время, это может потребовать выполнения журналов промывки на мастере перед сбросом файла главного журнала)
Получение задержки репликации от бинарных журналов сами занимается гораздо большей работой.
Mk-Heartbeat Проверяет на таблицу сердцебиения и только записи. Использование живой таблицы на мастере и сравнение копии подчиненного таблицы Heartbeat с UNIX_TIMESTAMP () на рабе - гораздо более краткое измерение задержки в реальном времени.
Вы должны пойти с Mk-Heartbeat.