web-dev-qa-db-ja.com

MySQLラグスレーブを新しいマスターに切り替えて、ラグを継続します(5.1)

次のシナリオがあります。

mysql setup

スレーブのセットはマスターから複製され、別個のスタンバイマスター(別名、binlogを持つスレーブ)は同じマスターから複製されます。 pt-slave-delayを搭載したラグスレーブは、同じソースから複製します。

また、必要に応じてスレーブを1つのマスターから別のマスターに切り替えるために mha4mysql を利用します。

ラグ奴隷がいなければ、すべてがダンディだろう。

問題

ラグスレーブがマスターより12時間遅れて実行されているとしましょう。フェイルオーバーがすぐに発生し(つまり、通常のスレーブと同じ時間にラグスレーブでCHANGE MASTERが実行される)、ラグスレーブが12時間遅れ続けるように、ラグスレーブをマスターからスタンバイマスターに切り替えます。

問題

スレーブが自身のリレーログでマスターbinlogの位置を追跡していることは知っていますが、マスターの位置は過去12時間まで計算できますが、それを理解している限り、スタンバイマスター(binlogを持つスレーブ)は自身とは関係がありません。リレーログと独自のbinlog。

質問

切り替えて(明らかにラグスレーブの残りのリレーログを破棄し)、12時間遅れてから新しいマスターでレプリケーションを再開する必要があるスタンバイマスターの位置を計算する信頼できる方法はありますか?

[〜#〜] note [〜#〜]MySQL 5.1を実行しているため、5.5(またはGTIDの場合は5.6)は今のところ解決策ではありません残念ながら。

ありがとうございました。

3
favoretti

免責事項:mha4mysqlのユーザーではありません。

提案#1

ラグスレーブをスタンバイサーバーから切り離します。どうやって?

  • ステップ01:マスターへのすべての書き込みを停止します
  • ステップ02:StandByMasterでSHOW MASTER STATUS;を実行します
  • ステップ03:Step 02からのbinlogに対してmysqlbinlogを実行します
  • ステップ04:指定された位置からタイムスタンプを取得する
  • ステップ05:取得したタイムスタンプから43200秒(12時間)を引く
  • ステップ06:タイムスタンプを取得する直前の位置を特定する
  • ステップ07:StandByMasterホストIP、ログファイル、および位置を使用して、これをラグスレーブ[.____]で実行します。
    • STOP SLAVE;
    • CHANGE MASTER TO MASTER_Host='...',MASTER_LOG_FILE='...',MASTER_LOG_POS=...;
    • START SLAVE;

すべての手動手順。申し訳ありません。

提案#2

いずれかのスレーブの下にラグスレーブを永続的にセットアップします。ラグスレーブをマスター間で移動することを心配する必要はもうありません。

提案#3

ブラックホールスレーブの下にラグスレーブをセットアップします。ラグスレーブをマスター間で移動することを心配する必要はもうありません。

これらの提案がお役に立てば幸いです。少なくともあなたに考えさせていただければ幸いです。

2
RolandoMySQLDBA