`seconds_behind_master`はマスターから正確な奴隷の遅れを示していますか?
-
16-10-2019 - |
質問
します Seconds_Behind_Master
奴隷がマスターの後ろにある正しい秒数を常に示しますか?
また、MK-HeartBeatレプリケーションモニタリングを実装しました。
seconds_behind_masterと比較して、他の結果を示していました。
どちらがより正確ですか?
解決
seconds_behind_masterは、unix_timestamp()と、マスターのバイナリログ内のクエリのためにログインしたタイムスタンプ、またはスレーブのリレーログの違いに基づいています。 seconds_behind_masterは、複製が一連の長い実行クエリを処理する場合、リアルタイムのコンテキストで実際に迷子になります。ラグは、すべてのリレーログエントリが処理されるまで天文学的に成長し、その後seconds_behind_masterが突然ゼロに低下します。リアルタイムに関しては、ラグがいつゼロになるまで、ラグがいつ発散するかを知ることや予測する方法はありません。
MySQLを厳密に使用して、次の方法でリアルタイムで複製遅れを監視できます。
- から
SHOW SLAVE STATUS\G
, 、2つの値を取得します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はexec_master_log_pos rmflであり、relay_master_log_fileです
これは現実的には、ログファイルと郵便のみを使用して複製遅れを取得する正しい方法ですが、あなたは
- 奴隷と通信して、必要なログファイルと位置を取得する
- マスターと通信して、ビンログのダンプを取得する
- チェックするたびにビンログをダンプします(MySQlBinlogが現在開いているログではない場合、マスターにフラッシュログを実行する必要がある場合があります)
バイナリログからレプリケーションラグを取得するには、自分でより多くの脚の作業が必要です。
mk-heartbeat ハートビートのテーブルをチェックして記録します。マスターでライブテーブルを使用して、奴隷の奴隷のコピーを奴隷のunix_timestamp()と比較すると、より簡潔なリアルタイムラグ測定です。
mk-heartbeatで行く必要があります。