web-dev-qa-db-ja.com

MySqlサーバーマスターマスターseconds_behind_masterジャンプ

MySqlの4サーバーマスターマスタークラスターを実行しています。 (2サーバーバージョン5.1、および2バージョン5.5)

スレーブのステータスを確認していると、seconds_behind_masterが0になり、2000にジャンプするのを確認してから0.5秒後、4番目になります。

それはおそらく何でしょうか?どうすればデバッグできますか?

レプリケーショントポロジ:1-> 2-> 3-> 4-> 1

[〜#〜]更新[〜#〜]

サーバー3のSBMは0で、他のサーバーは上下にジャンプしているようです。それは役に立ちますか?

UPDATE 2サーバー1に問題があるようです。サーバー4でテストテーブルを作成するときに、サーバー1のリレーログを確認すると、createステートメントが表示されます。サーバー1のリレーログに即座にコピーされましたが、テーブルは作成されません。サーバーが何かを実行するのに忙しいようで、サーバーがステートメントを取得してから実行するまでに大きな遅延があります。

UPDATE 3サーバー4でも同じことが起こります。

UPDATE 4Ok問題が見つかりました。サーバー12および4に「クエリキャッシュエントリの無効化(テーブル)」がありました。 「レプリケーションスレッドでスタックしました。キャッシュを無効にした後、サーバー4は問題ありませんが、1と2ではまだこの問題が発生しています。

一般的なバグのようです: http://bugs.mysql.com/bug.php?id=60696

誰かがそれを修正する方法を知っているなら、私は聞いてうれしいです

2
shaharmor

問題は確かに、古い非Perconaサーバーのinvalidating query cache entries (table)であり、キャッシュが無効になるまでレプリケーションが停止していました(これには多くの時間がかかりました)。
ここで述べたように: http://bugs.mysql.com/bug.php?id=60696

クエリキャッシュを完全に無効にする機能を備えたPerconaMySQLサーバーv5.5に完全に移行することで、この問題を解決しました。

0
shaharmor

Mysqlのseconds_behind_master値には1つの欠陥があります。それは、1つのアップストリームホップからの相対的な位置のみを考慮します。少し単純なレプリケーショントポロジで最も簡単に示されます。

server1-> server2-> server3

Server2が遅れて、実行時間の長いクエリを処理している場合、開始点として00:00を想定すると、次のことが発生します。

00:00:みんな大丈夫
00:01:server1は2つの10分のクエリをbinlogに書き込み、レプリケーションの遅延はどこにもありません
00:02:server2がクエリ1の処理を開始します。 server2のレプリケーション遅延は大きくなり始め、server3のレプリケーション遅延はゼロのままです
10:02:server2はクエリ1で完了し、クエリ2の処理を開始します。 server2レプリケーションの遅延はまだ大きくなっています。 server3レプリケーションの遅延が突然ジャンプから10分。
20:02:server2はクエリ2で実行され、レプリケーション遅延は再びゼロになります。 Server3はクエリ3で実行され、レプリケーション遅延はゼロに戻り、次のクエリを処理するときに最大10に戻ります。

したがって、ジャンプ動作は、レプリケーションの遅延にグローバルタイムスタンプを使用せず、レプリケーションチェーンの最後の「ホップ」からの遅延によって発生します。これは非常に煩わしいことがわかり、MySQLのイベントスケジューラを使用して各マスターのタイマーテーブルを毎秒更新するため、グローバルマスターからの実際の遅延(非リングトポロジ)またはリング内の任意のピアからの遅延を実際に確認できます。

4