3


5

フロントエンドサーバーがアメリカに1つ、ヨーロッパに1つの、2つのフロントエンドサーバーがある、かなり大きなWebサイト(2Mページビュー/ m、多数のユーザー)を考えてみましょう。 2つの専用URLにより、訪問者はサーバーの1つ、フランス語の言語、もう1つの英語で表示されます。 両方のサイトはまったく同じデータを共有します。

最も費用対効果の高い解決策は何でしょうか。 (私の会社で使用しているDB:MySQL)

  • 1 / Amazon EC2(US)上の単一マスターサーバー、およびフロントエンドサーバー上のスレーブ?

  • 利点:マスター - マスターの担当者がいないため、データが自動インクリメントと競合したり、固有の列に重複したりすることがありません。

  • 欠点:ラグ! あなたがヨーロッパにいるとき、米国で書くのにあまりにも遅れがありませんか? もう1つの欠点は、マスターが死亡した場合の迅速な解決策の欠如です。 そして、フロントと同じサーバー上にスレーブを置くことはどうでしょうか。

  • 2 /米国に1つ、ヨーロッパに1つの2つのAmazon EC2インスタンス。マスター - マスターレプリケーションサーバーとして機能します。 各フロントエンドに2つのスレーブがありますか?*

  • 前へ:データのスピードとセキュリティ。 もちろんロードバランサはありませんが、マスターから別のマスターに切り替えるハックをするのはかなり簡単なようです。

  • Drwbcks:価格。 そしてDBの破損の危険

  • 3 /他の解決策は?*

2大陸のサーバーを扱うのは今回が初めてなので、MySQLを含むかどうかにかかわらず、EC2を含むかどうかにかかわらず、この分野での経験から皆さんから学ぶことを本当に感謝します。

ありがとうマーシャル

4 回答


3


いつものように、私がこれから言おうとしていることは、あなたのアプリケーション、データベースをどのように使用するかなどによって異なります。 あなたは自分自身に尋ねる必要があります。

  • 市販のソフトウェアを使用している場合、他の人が何をしたか この状況?

  • アプリはデータセット全体で動作する必要がありますか、それとも分割できますか?

  • アプリはマルチマスターレプリケーションを処理するように構築されていますか(通常は 自動インクリメントpkを使用)

  • 更新/削除の衝突の可能性は何ですか? 費用はいくらですか。

  • 読み取りと書き込みの比率は何ですか? 書き込みの性質は何ですか? 彼らは 通常、更新または追加操作ですか?

私はフランス語のサーバーがヨーロッパにあり、英語のサーバーがアメリカにあると思いますか? フランス語のサイトが一方のDBを使用し、英語のサイトが他方のDBを使用するようにデータを分割できる場合は、そのほうがいいでしょう。 両方のサイトが両方のDBにアクセスする場合でも、衝突について心配する必要はありません。 各マスターサーバーで2つのmysqlインスタンスを実行して、両方に対してマルチマスターレプリケーションを実行することもできます。

分割できない場合は、おそらく#2を使用しますが、いずれかのマシンを「真の」マスターとして指定し、データの書き換えを避けるためにすべての書き込みを送信します。 このように、ピンチで切り替えるのは簡単です。

コストに敏感で、とにかくフロントエンドサーバーでレプリカを実行する予定がある場合は、フロントエンドサーバーでmasterデータベースを実行するだけです。 あなたはいつでも後でそれをやってのけることができます。 レプリカは、同じ読み込み負荷をかけるマスターよりもCPU / IOコストが高くなることがよくあります。レプリカは書き込みをシリアルで実行する必要があるため、実際に問題が発生する可能性があります。

また、DBにm1.smallインスタンスを使用しないでください。 または、少なくともあなたのパフォーマンスに注目してください。 m1.smallsは大幅にパワーが不足しています、そしてあなたが `top`を見れば、あなたのCPU時間のかなりのパーセンテージがハイパーバイザーによって盗まれているのに気付くでしょう。 c1.mediumをお勧めします。


2


マスター - マスターレプリケーションを使わないでください。 競合を解決するためのメカニズムはありません。 両方のマスターに同時に書き込もうとした場合(または、以前にもう一方のマスターに書き込んだ変更に追いつく前に1つのマスターに書き込んだ場合)、最終的に壊れたレプリケーションシナリオが発生します。 サービスは止まることはありません、彼らはただ遠く離れて漂流して和解を不可能にするでしょう。

うまく動作していることを確認するために、適切に設計された監視なしでMySQLレプリケーションを使用しないでください。 最初から正しく設定したからといって、動いているか同期していると仮定しないでください。

スレーブが同期していない、または停止していることから回復するための、十分に文書化され、よくテストされた手順を持ってください。 ゼロから新しいスレーブをインストールするための同様に文書化された手順を持ってください。

正しいデータや最新のデータを気にする場合は、スレーブが同期していないか停止していること、およびスレーブを使用しないことを認識するために、アプリケーションに十分なインテリジェンスが必要な場合があります。 これを行うには、モニタリングから何らかのフィードバックが必要です。

もしあなたが奴隷を持っているのなら、あなたの奴隷がヨーロッパにいるときにアメリカを言いなさい、それは通常あなたが期待する待ち時間の量を与えるでしょう。 それらが同じ場所に配置されていた場合よりも150ミリ秒のオーダーで何か。

MySQLでは、スレーブはマスタがそれを終了するまでクエリを開始しないので、更新にかかる時間の長さだけ常に遅れます。

また、スレーブはシングルスレッドであるため、単一の「ハード」更新クエリはそれ以降のすべてのものを遅らせます。

スレーブのハードウェアが同じであると仮定して、マスターをマルチスレッドの書き込み負荷に強く動かしているのであれば、それらが対応できない可能性は非常に低いです。


1


Amazon Eastcoastが今週2回完全にネットワークから切り離された後、私たちは同様のシナリオを検討しています。

しかし、DRBは東から西へ、さらにはヨーロッパへの通過を許可していません。

私たちは現在、東西のマスターマスターのアプローチを検討しています。1人のマスターがフェールオーバーとしてのみ機能し、dnsmadeeasyによるフェールオーバーは非常に速く反応します。

利点:迅速で信頼性の高いフェイルオーバー、短い停止時間、フェイルオーバー機能の複雑な管理が不要です。

デメリット:1つの追加システムを使用せずに稼働 - ただしRDBを使用するよりも高価ではありません。

DRBは、Point-in-Timeリカバリなど、Amazonによってうまく管理されています。 しかし、1つの領域内での複製に限定されており、その領域を完全に切り離すことができるという事実は、それを問題にしています。 RDBバックアップに代わるものとして、バックアップ管理の面倒を見るためにZmandaオープンソースツールを検討しています。 まだテストされていませんが、フェイルオーバー、データベース、ハードウェアに関する私たちのすべての詰め物に基づいているため、これは最も単純で、したがって最も有望な高可用性のアプローチのように見えます。


0


この質問は古いですが、解決策は現在存在しています。Galera。 これはMySQL(InnoDB)レプリケーションを行い、WANでもうまく機能します。 http://codership.com/