リアルタイムMySQLスケーリング

画像 glix トピックは 、私にこの投稿を書くよう促しました。 要するに:

Amazonは現在、フォールトトレラントでスケーラブルなデータベースサービスを提供しています。 MySQLはクラウドになりました。 詳細については記事自体で読むことができますので、再説明ません。



このソリューションの唯一のマイナスは価格です。 Amazonのサービスが非常に高いとは言えません:)高価ですが、サーバーが1日24時間稼働していると、かなりの費用がかかります。 DevConfに座って、これを回避する方法を考えました。





解決策


2つのデータベースサーバーがあり、1つ目は「デフォルト」と呼びましょう。これはフロントエンドがアクセスするサーバーで、2つ目の「クラウド」は同じMySQLクラウドサーバーです。 タスク:メインデータベースサーバーの負荷を増やす場合は、クラウドをオンにし、クラウドをメインサーバーと同期してから、SQLクエリをリダイレクトします。



システムは4つのモードで動作します。



デフォルト


メインデータベースサーバーの使用モード。 負荷がしきい値(max)、パラメーターで指定された一定の期間(max-timeout)を超えると、システムはSyncCloud状態になります



Synccloud


クラウドサーバーとの同期モード。

  1. Amazon RDS APIへのリクエストを介して、クラウドデータベースサーバーの電源を入れます。
  2. サーバーのロードを待機しています
  3. これをスレーブとしてメインサーバーに接続します。
  4. スレーブに複製します。
  5. マスターへの書き込み要求をブロックします。
  6. 再度複製します。 これは、ウィザードをすぐにブロックしないようにして、データベースをロックする時間があまりないようにする必要があります。
  7. クラウドサーバーをマスターから切断します。 メインサーバーでmysqldをオフにします。
  8. デフォルトサーバーでmysl-proxyを有効にします。これにより、すべてのリクエストがクラウドサーバーに転送されます。


クラウド


クラウドサーバーモード。

このモードでは、デフォルトサーバーがクラウドサーバーにプロキシ要求を行います。 メインサーバーでは、この時点で負荷が減少し、一定時間(min-timeout)にしきい値(min)未満の値に達すると、システムはSyncDefault状態になります



Syncdefefault


デフォルトサーバーとの同期モード。

  1. 空きポートでmysqldを開始します(mysql-proxyが現在そこにあるため、3306ではありません)。
  2. デフォルトサーバーをスレーブとしてクラウドサーバーに接続します。
  3. デフォルトサーバーに複製します
  4. クラウドサーバー上の記録をブロックします
  5. 複製する
  6. mysql-proxyをオフにする
  7. mysqldサーバーを標準ポート(3306)のデフォルトにリダイレクトし、mysql-proxyを解放します。
  8. Amazon RDS APIを介してクラウドサーバーをオフにするリクエストを送信します


まとめ


その結果、適切なタイミングでのみ使用されるため、クラウドサーバーと節約によるスケーラビリティが得られます。

そのような計画の実行可能性に関するハブロフスクの住民の意見に非常に興味があります。 一般に、特にUbuntu Enterprise Cloud(Eucalyptus)に基づくクラスターでMySQLを実行する場合、この分野には大きな展望があります。



参照資料



All Articles