Показывает ли `seconds_behind_master` точное задержка раба от Master?

dba.stackexchange https://dba.stackexchange.com/questions/8762

  •  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.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с dba.stackexchange
scroll top