web-dev-qa-db-ja.com

MySQL XtraDB / Galera Cluster High Availability RamDisk * SuperFast *

さて、これは投機的な質問になるでしょう、主にデザイン指向で、かなり長い質問です。もし私があなただったら、私はクッパをつかむでしょうcovfefe

序文:それで私はデータベースを研究していて、次のように本当に速い(Like really-really)database(engine) 必須/

  1. ACIDコンプライアンス
  2. 高速IOのためのインメモリっぽい。
  3. 永続的(well ... duh
  4. Cluster/master-slave/etcのように拡張可能
  5. 高可用性(HA)
  6. MySQL ドロップイン置換
  7. オープンソース
  8. 商品サーバー(IYKWIM)で実行する必要があります

したがって、私の楽観的な要件のリストから判断すると、すでにジャンプしているはずです。

How to speed up mysql, slow queries

さてさて、冗談はさておき、innodb_buffer_pool_sizeが適切に調整されていれば、ほとんどの場合メモリが不足するでしょうが、

それはインメモリではありませんよ!

しかし、あなたはねえ、その2k18人はすでにメモリDBで約100%を作成しているかもしれませんよね?うーん...実際にはありますが、それぞれ独自のトレードオフがあります。

  1. VoltDB Community Edition それが交換品のドロップではないと気づくまで、すべてが正常に見えます。 Javaにいくつかの stored procedure -ishコマンドが必要です。これには、アプリケーション全体または少なくともphpアプリのdbレイヤー/ドライバー/ etcを書き換える必要があります。そう? ディールブレーカー!!!

  2. MemSQL 、まあ、これは「史上最高のオープンソースIn-MemスケーラブルSQL Acid DB /」コンテストのかなり強力な候補のようです。だけのために、memSQLボスは次のようになります...

MemSQL Server Requirements

言うまでもなく、memSQLには少なくとも4コアと8ギガのRAMが最低限必要であり、 4コアおよび32でかなり insaneが推奨されますギグコアごと !!!!また、コミュニティバージョンのmemSQL(は完全にオープンソースではありません!無料)は有料機能であるため、高可用性をサポートしていません。また、そのNoSQL。そう? ディールブレーカー!!!

  1. Membase、Redis、Memcachedなどの他のすべてのNoSQLishデータベースは、完全に除外されています。

だから今私の天才的なアイデアのために!!!

すべてのインスタンスが RAMDisc から定期的にスナップショットを実行してXtraDB/Galeraクラスターを実行できるかどうか疑問に思いましたか?

チェックされているすべてのチェックボックスを取得します。

聞いてください、最初に部屋の象に対処します。RAMDiscsから完全なmysql Dbsを実行するのはかなりうーん...大胆で、最も礼儀正しい方法で行われます。したがって、サーバーがクラッシュしたり、シャットダウンしたりした場合、ノードが失われます。私たちのDBクラスターは全体として、まだ活気に満ちています。実装する必要があるのは、最後のスナップショットからデータベースを起動し、本質的にクラスターがかなり得意なクラスターと同期することです!

わかった、のぞき、私を甘くしないでください。私の実装に欠陥がある場合は、私を案内してください。

1

OK、3つのGaleraノード、

  • すべてのディスクがRAMディスクにあります。
  • 十分なRAMそれを可能にするために。
  • ノードは地理的に分離されているため、火山や洪水などはそれらすべてを一度に取り出すことができません。
  • 高速ネットワーク。

ノート:

  • oneサーバーの損失からの完全な自動回復が可能になります。
  • 障害時の唯一の遅延は、クライアントを他の2つのノードのいずれかに切り替えることです。
  • ただし、ネットワークがスローポイントである場合があります。 (絡み合いはまだ完全ではありません。)
  • スナップショットは必要ありません。 (データの完全なコピーを持つ他の2つのノードが常にあります。)
3
Rick James

(@RickJamesによるコメントに対処するために編集され、さらにMySQL Clusterおよび一般的な改善についてもう少し。)

あなたの計画にはいくつかの問題があります:

  1. 永続化が必要な場合は、RAMディスクをデータファイルに使用することはできません。

  2. すべてのデータベースファイル(テーブルデータファイル、ログファイル、一時ファイルなど)にRAMディスクを使用することを計画している場合は、量RAMメモリのみのデータベースシステムで必要な場合。テーブル自体とそのデータファイル(通常はディスクに永続化されます)の両方をRAMに格納しているためです。

  3. RAMディスクがすべての可能なユースケースに十分な大きさであることをどのように保証しますか?たとえば、クエリが大きすぎて処理できない場合、ディスク上の内部一時テーブルを作成できます。したがって、RAM diskをディスクストレージとして使用すると、 "disk"が不足し、何らかの悪影響を与える可能性があります(これにより、 MemSQLがこのように大きいRAM要件...)

    ストレージを構成する方法があるかもしれません/ RAMディスクがストレージの一部になるようにRAMディスク(最初に使用される部分/優先される)そして他の部分は実ディスクにありますか?

つまり、クエリがメモリ内で処理された可能性がある場合でも、InnoDBがディスク上の一時テーブルを作成するケースがあります。詳細は 8.4.4 MySQLでの内部一時テーブルの使用 を参照してください。これらは、RAMディスクがおそらく役立つ可能性がある場合です。ここに MySQL tmpdir on RAM-disk を配置する方法に関するブログエントリ(2012年から)を示します。

ただし、RAMディスクソリューションのtmpdirに使用されるRAMはすべてRAMであり、これは非常に重要なInnoDBバッファープールに使用される可能性があるためです。 RAMディスクでRAMのいずれかを使用する前に、データワーキングセット用に十分な大きさのバッファプールがあることを確認してください。

テーブルのデータファイルをRAMディスクに配置し、それをスナップショットする予定であると仮定すると、ポイントインタイムの一貫性のあるバックアップを確実に取得するための手順を実行する必要があります。これらの種類の手順により、RAMディスクが遅くなります。

したがって、代わりにRAMディスクを使用する代わりに、Galeraをそのまま使用することもできますが、ディスク上の内部一時テーブルが作成されないように、可能な限りの予防策を講じてください。ディスクを回転させる代わりにSSDを使用します。

考慮すべきもう1つのテクノロジーは MySQL NDB Cluster です。

MySQL Clusterは、シェアードナッシングシステムでインメモリデータベースのクラスタリングを可能にするテクノロジーです。シェアードナッシングアーキテクチャにより、システムは非常に安価なハードウェアで動作し、ハードウェアまたはソフトウェアの最小限の特定要件で動作します。 [...]

MySQL Clusterは本当に高速で、2015年2月に2億(NoSQL)QPSが報告されています。 MySQL Clusterベンチマーク を参照してください。それについて私が心配しているのは、2015年以来進歩がなかったかのように、彼らが今でも2018年にそれらのベンチマークをまだ使用していることです。また、なんらかの理由で、NDB Clusterの人気がGaleraや他のソリューションと比較して衰退しているという感覚を得ます。 (例:DBA.SEのさまざまなタグの統計を参照してください。)

2
dbdemon