web-dev-qa-db-ja.com

log-slave-updatesを使用したフェイルオーバー中のMySqlスイッチングマスター

私はまだmysqlの初心者です。この質問は、オプション -log-slave-updates を使用してスレーブをマスターに昇格させることに関するものです。

スレーブをマスターに昇格させる一般的なスキーマは、 15.3.6フェイルオーバー中のマスターの切り替え で説明されています。ここであなたはそれを行う方法の非常に厳しいステップを見つけることができます:

--log-binオプションを使用し、-log-slave-updatesを使用せずにスレーブを実行します。 --log-slave-updatesなしでスレーブを実行する理由は、スレーブの1つが新しいマスターになる場合にスレーブが更新を2回受信しないようにするためです。

次のようなスキーマがあるとします(画像は 15.3.5。レプリケーションパフォーマンスの向上 から取得されました)。

enter image description here

ここで、Master 2は実際には -log-slave-updates が有効にされ、bin-logが有効になっているスレーブです。 Master 1のbin-logをMaster 2のbin-logに保存してすべてのスレーブに転送するには、-log-slave-updateを有効にする必要があります。 。フェイルオーバーの場合、私はMaster 2Master 1の役割に昇格させる必要があります。しかし、私が--log-slave-updatesを有効にした標準のMySqlフェイルオーバースキーマに矛盾があるため、問題が発生する可能性があります。

あなたの意見では。これを行うために私が取るべき行動は何ですか?

3
com

--log-slave-updatesに関する警告は、複数の中間「マスター/スレーブ」サーバーがある場合にのみ適用されます。

警告はこれです(私の強調):

次に、マスターから受け取った更新を独自のバイナリログに書き込みます。 スレーブ2がマスターからスレーブ1に変更されると、スレーブ1から既にマスターから受信した更新を受信する場合があります。

しかし、あなたのシナリオでは、Slave 2はマスターを変更していません。それでも、以前と同じMaster 2サーバーを指します。

したがって、Master 1が失敗した場合は、次の2つのことを行う必要があります。

  • アプリケーションがMaster 2を指していることを確認してください
  • つのスレーブの1つをプロモートする の指示に従って新しいMaster 2
  • 新しい--log-slave-updatesMaster 2を必ず有効にしてください
3
Derek Downey