2017-01-18 13 views
0

私のエンドツーエンドスタックがより多くのTPSをサポートできるように、私のgaleraクラスタ内の両方のノードの十分なCPUリソースを活用することを私の目標としています。現在、私の完全なスタックは36vcpuの単一のmariadbサーバーによって制約され、10000 TPSになる可能性があります。galeraクラスタで驚くほど低いパフォーマンス

GaleraクラスタでDBの2つのノードを使用して約20000のTPSをサポートしたいと考えています(これはCPUによって制約されています)。この時点では、私は脳の分割や他の複製や境界線のシナリオには関心がありません。私はhaプロキシロードバランサを使用してgaleraの2つのノードで最初にテストしましたが、非常に悪い結果を得ました(3500 TPSのみ)。 ガレラではできないことを達成しようとしていますか?いくつかの視点をお願いします。

1つのノードで10000 TPSの制限を超えてアプリケーション用のDBをクラスタ化することができる他のメカニズムはありますか?

+0

私はMySQLクラスタリングの専門家ではありませんが、レプリケーションではなくスピードを目指しているため、Galeraのようなレプリケーション中心のクラスタではなく、NDBのようなMySQL用のShared-Nothingクラスタアーキテクチャを検討する必要があります。 – JNevill

+0

ProductionシステムでGaleraを2ノードで使用することはできません。 1つのノードがクラッシュして再同期すると、再同期に2番目のノードが使用されるため、クラスタがダウンしてしまいます。負荷を見ることも重要です。高い読み込み負荷のGaleraにとっては最高です。また、ネットワーク内のマルチキャストについて考えてみると、ノードは各ノードではなく1つのアドレスに送信する必要があります。 my.cnfを最適化します。最後にHaProxyではなくMaxScalを使用します。 –

答えて

1

各トランザクション(Galera)は、COMMITの時間に、他のすべてのノードと話し合って、トランザクションがどこでも機能することを確認する必要があります。最終的には、これらのノードはトランザクションを実行する必要があります。多くの要因に応じて、この努力は、元のノードの努力よりもずっと少ないかもしれません。

すべての形式の複製では、スレーブでマスターで発生した「書き込み」が繰り返されます。トリックはスレーブの努力を最小限に抑えることです。しかし、これは部分的にしかできません。

スタンドアロンサーバーが10Kトランザクションで最大値に達した場合、レプリケーションセットアップでは2つのノードにわたって20Kを実行することはできません。それはかもしれない 3つ以上のノードで20Kを得ることは可能である。

Galeraは4-5ノードでトップに見えます。つまり、同期が圧倒的になり、スケーリングが制限されます。

Oracleの「InnoDB Cluster」は、おそらく5つのノードを超える可能性が高いと考えられます。これは5.7と8.0でいくらか入手可能です。

NDBクラスタは、GaleraまたはInnoDBクラスタの「非同期」(通常のレプリケーション)、「セミシンク」、または「同期」とはまったく異なるモデルである「最終整合性」に依存します。トランザクションがお互いに矛盾しない場合、あるいは少なくとも異なるノードノードでない場合、NDBはおそらく輝きます。

10Kを達成した実験があります。試してくださいthis

「取引」をご記入ください。パフォーマンスを向上させるための他の手法があるかもしれません。例えば、100行の1つのINSERTは、100行の約10倍の速さで実行されます。INSERTs; CPUの節約の多く。

関連する問題