2

プライマリ MySQL データベースのレプリケーションをセットアップする可能性を検討しています。レプリケーションのセットアップは非常に簡単に思えますが、アプリケーションの実装は少しわかりにくいようです。

CREATE私の最初のアイデアは、すべての書き込みクエリ ( 、INSERTUPDATE) がマスターになり、すべての読み取りクエリ ( ) がスレーブになるように、マスター/スレーブ構成と RW 分割をセットアップすることですSELECT。それを読んだところ、アプリでこれを実装する方法には基本的に 2 つのオプションがあるようです。

  1. MySQL プロキシDBSlayerなど、すべての MySQL 接続に独立したミドルウェア レイヤーを使用します。ただし、前者はアルファ版で、後者はドキュメントが限られています。
  2. Octopusなどの Ruby ベースの gem/プラグインを使用して、フレームワークで RW 分割を実現します。

マスター/スレーブ セットアップを使用したい場合、今後の推奨事項は何ですか?

私が持っていたもう1つの考えは、マスターマスター構成を使用することでしたが、そのようなセットアップの実装については不明です.

考え?

4

1 に答える 1

2

一般に、コンテキストを理解できるのはフレームワークだけであるため、フレームワークで R/W 分割を行う必要があります。PHP では、書き込み用と読み取り用の 2 つの接続を維持することでこれを行い、コードで明示的にどちらを使用するかを決定します。これは、クエリの種類ごとに分割するほど単純ではないためです。たとえば、書き込み接続でトランザクションを開始する場合、その中のすべての読み取りもそれを通過する必要があります。そうしないと、それらはトランザクションの外になり、古いデータを取得するか、ロックでハングアップする可能性があります。

ワークロードが本当に読み取り負荷が高い場合を除き、レプリケーションはスケーリング ソリューションではありません。レプリケーション ラグによって結果が古くなってしまうからです。マスター - マスターはそれほど特別ではありません - マスター - スレーブの 2 つのインスタンスにすぎませんが、スプリットブレインの悪夢を求めているので、両方のマスターに書き込もうとするという間違いを犯すべきではありません。

私が本当に気に入っている構成は、マスターとマスターのペアでmmmを使用することです。これにより、フェイルオーバーと冗長性が非常に簡単になり、アプリケーションに対して透過的になり、美しく機能します。

于 2011-06-15T11:02:41.840 に答える