Binlog MySQLレプリケーションは“ Bag of Hurt”です。良い選択肢はありますか?

StackOverflow https://stackoverflow.com/questions/272704

  •  07-07-2019
  •  | 
  •  

質問

正直に試しました this right でも、レプリケーションスレーブとして設定されたミラーサーバーがまだ遅れていることがわかります。私のアプリのユーザーベースは成長を続けており、今では「シャットダウン」を続けることができなくなっています。 「再同期」するデータベース(週末でもない)。

とにかく、私の質問:もっともらしい、手頃な価格の、binlogレプリケーションに代わるものはありますか?私は2つのサーバーを持っているので、唯一のオプションでない限り、負荷分散のためにまだ3つ目のサーバーを購入することを検討しません。

乾杯、

/ mp

役に立ちましたか?

解決

マスターはパラレルで実行され、スレーブはシリアルで実行されます。マスターが実際の1時間で1.5時間の挿入/更新/実行を処理できる場合、スレーブは遅れます。

スレーブの書き込みパフォーマンスを改善する方法が見つからない場合(メモリの増設、ディスクの高速化、不要なインデックスの削除)、アプリケーションアーキテクチャの制限に直面しています。最終的には、マスターが並行して実行できるほど速く変更をリアルタイムで実行できないという点にぶつかります。

多くの大きなサイトがデータベースを分割しています。マスター+スレーブを複数のマスター+スレーブクラスタに分割することを検討してください。次に、これらのクラスターに顧客ベースを分割します。スレーブが遅れ始めたら、別のクラスターを追加します。

安価ではありませんが、binlogレプリケーションでステートメントを並行して実行する方法を見つけられない限り、おそらくそれを行うより良い方法は見つかりません。

更新(2017):MySQLは並列スレーブワーカースレッド。スレーブが遅れる原因となる変数はまだ多くありますが、スレーブはシリアル順序で書き込む必要がなくなりました。並列スレーブスレッドのコミット順を保持することは、ある時点でのスレーブの正確な状態が重要かどうかを確認するための重要なオプションです。

他のヒント

試してみましたか: 1)SET innodb_flush_log_at_trx_commit = 0 2)SET sync_binlog = 0

どちらも、サーバーに障害が発生した場合にわずかなリスクを追加して、スレーブを高速化するのに役立ちます。

スレーブにメモリを追加するとおそらく役立つでしょう。 32メガバイトから128メガバイトになり、遅れはほぼなくなりました。しかし、すべての状況で安価でも十分でもありません。

3台目のサーバーを購入してもそれほど役には立たない可能性がありますが、遅れているスレーブをもう1つ入手する可能性が高いでしょう。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top