Binlog MySQLレプリケーションは“ Bag of Hurt”です。良い選択肢はありますか?
-
07-07-2019 - |
解決
マスターはパラレルで実行され、スレーブはシリアルで実行されます。マスターが実際の1時間で1.5時間の挿入/更新/実行を処理できる場合、スレーブは遅れます。
スレーブの書き込みパフォーマンスを改善する方法が見つからない場合(メモリの増設、ディスクの高速化、不要なインデックスの削除)、アプリケーションアーキテクチャの制限に直面しています。最終的には、マスターが並行して実行できるほど速く変更をリアルタイムで実行できないという点にぶつかります。
多くの大きなサイトがデータベースを分割しています。マスター+スレーブを複数のマスター+スレーブクラスタに分割することを検討してください。次に、これらのクラスターに顧客ベースを分割します。スレーブが遅れ始めたら、別のクラスターを追加します。
安価ではありませんが、binlogレプリケーションでステートメントを並行して実行する方法を見つけられない限り、おそらくそれを行うより良い方法は見つかりません。
更新(2017):MySQLは並列スレーブワーカースレッド。スレーブが遅れる原因となる変数はまだ多くありますが、スレーブはシリアル順序で書き込む必要がなくなりました。並列スレーブスレッドのコミット順を保持することは、ある時点でのスレーブの正確な状態が重要かどうかを確認するための重要なオプションです。
他のヒント
試してみましたか: 1)SET innodb_flush_log_at_trx_commit = 0 2)SET sync_binlog = 0
どちらも、サーバーに障害が発生した場合にわずかなリスクを追加して、スレーブを高速化するのに役立ちます。
スレーブにメモリを追加するとおそらく役立つでしょう。 32メガバイトから128メガバイトになり、遅れはほぼなくなりました。しかし、すべての状況で安価でも十分でもありません。
3台目のサーバーを購入してもそれほど役には立たない可能性がありますが、遅れているスレーブをもう1つ入手する可能性が高いでしょう。