複数のサーバーにMysqlを分割する方法は?
-
05-07-2019 - |
質問
水平パーティショニング...多くのテーブルを作成できることを知っています。
複数のサーバーでこれを行うにはどうすればよいですか? これにより、Mysqlのスケーリングが可能になります。
XサーバーでXテーブルを作成しますか?
説明したい人や、複数のサーバーに分割する方法を教えてくれる初心者向けのチュートリアル(ステップバイステップ)をお持ちですか?
解決
MySQLを使用すると、一般的にアプリケーションベースのシャーディング と呼ばれる処理を実行します。
簡単に言うと、複数のデータベースサーバー上に同じデータベース構造があります。ただし、同じデータは含まれません。
したがって、たとえば:
Users 1 - 10000: server A
Users 10001 - 20000: server B
シャーディングは(もちろん)バックアップ手法ではなく、クラスター全体に読み取りと書き込みを分散させることを目的としています。
シャードに使用される技術は、たとえばMySQL-Proxyです。これはHScaleが発明したものではなく、読み取りと書き込みを異なるバックエンドサーバーに分散する単純なLUAスクリプトです。 MySQL forgeには多くの例があるはずです。
別のツール(MySQLプロキシに基づく)は SpockProxy です。シャーディングに完全に合わせた。また、Luaを削除し、プロキシよりも高速にするためにさまざまな作業を行いました。これまで、私はSpockProxyをテストしただけでしたが、実稼働では実行しませんでした。
これらのプロキシは別として、あなたも自分で破ることができます。必須はマスターテーブルです。例:
-------------------
| userA | server1 |
| userB | server2 |
| userC | server1 |
-------------------
次に、サーバーに対する読み取りと書き込みを作成します。あまりきれいではありませんが、それは動作します。次の障害は、それをより寛容にすることです。したがって、たとえば、 server1
、 server2
、および server3
はそれぞれ小さなクラスターである必要があります。
そして最後になりましたが、サーバー間でデータとインデックスを分割する別の興味深いアプローチは、Diggの IDDB 。彼らがそのコードをリリースしたかどうかはわかりませんが、彼らのブログ投稿はそれが何をするのかについて素晴らしい詳細を提供します。
これが役立つかどうか教えてください!
他のヒント
ただし、何らかの理由でこのソリューションをクラウドに移行してマルチテナントにしたい場合は、上記の構成がより困難になる可能性があることに留意する必要があります。これについて考えてください-
- システムにログインすると、ユーザー組織テーブルに基づいてDBが選択されます(DBスワップ)
- これは、あなたが今話している新しいマスターテーブルであり、それ自身のスレーブです
- ただし、スケールアウトがボトルネックにならないようにしたいので、上記のポイント2もシャーディングが必要です。
だから今、質問は、スレーブが通常読み取り用であり、マスターが書き込み用であるmster-slaveのような環境でこのシャーディングをどのように行うことができるかを考える必要があることです。
乾杯! ゲイリー
HSCALE 0.1の発表時に書かれた内容:
今は分割する必要があります 巨大なテーブルですが、後で パーティションを複数に分配する MySQLサーバーインスタンスが実際に 水平スケールアウト。一番難しい部分 トランザクションを処理します 分散を使用する必要がある場所 トランザクション(XA)または禁止 上のパーティションを含むトランザクション 異なるホスト...
このプロジェクトをご覧ください: http://sourceforge.net/projects/hscale/おそらくあなたに適しているでしょう。