web-dev-qa-db-ja.com

マスターあたりのスレーブ数の制限は何ですか?

現在、2つのスレーブを持つマスターがあり、すべてMySql 5.5を実行しています。

単一のマスターに接続できるスレーブの数にはどのような制限がありますか?どのパラメータを有効にする必要がありますか?

5
Ran

設定に制限はありませんが、いくつかの側面を認識する必要があります。

スレーブのリレーログに最新のSQLがすべて含まれていることを確認することで、SQLをスレーブに送信するためのNiceアルゴリズムを使用するため、準同期レプリケーションを使用できます。 (私の2011年8月5日の投稿を参照してください MySQLレプリケーションは高遅延相互接続の影響を受けますか?

ただし、準同期レプリケーションはNスレーブのうち1つにのみ有効です。

準同期レプリケーションがあるかどうかに関係なく、スレーブが多いほど、マスターがスレーブを最新の状態に保つために実行する必要があるCPU処理が増えると言えます。

Nスレーブを持つマスターの場合、それは...

  • スレーブに送信するN SQLステートメント
  • SQLが実行されたスレーブ1-NからのN確認

半同期レプリケーションでは、N個のスレーブを持つマスターの場合、それはそれほど良いことではありません...

  • スレーブに送信するN SQLステートメント
  • スレーブからの謝辞
    • 1スレーブ1が最新のSQLを受信したことの確認
    • SQLが実行されたことを示すスレーブNからのN-1確認

多くのスレーブが必要な場合は、スタートポロジで配布マスターを使用することを検討してください

スタートポロジでディストリビューションマスターをセットアップできない場合は、次の簡単なルールがあります。

3
RolandoMySQLDBA

マスターに接続できるスレーブの数にハード制限はありませんが、実際的な制限はあり、ワークロードとハードウェアに基づいています。スター型トポロジー(1マスター、lotsaスレーブ)にまとめたい同一マシンの「束」があるとします。この架空のクラスターで、マスターが1秒あたり2000オペレーションの最大容量に達し、1000が書き込み、1000が読み取りであるため、マスターが過負荷になったと仮定しましょう(簡単にするために、1つの読み取りと1つの書き込みは同等であると仮定します) "費用")。

したがって、スレーブを追加し、すべての読み取りをスレーブに移動します。実際には、すべての読み取りをスレーブに移動することは不可能ですが、これは練習のためです。書き込みは依然として各ノードで発生する必要があるため、レプリケーションで書き込みをスケーリングすることはできません。

Master - 1000 wps/0 rps - 1000 free ops
Slave1 - 1000 wps/1000 rps - 0 free ops

うーん...スレーブを追加しましたが、実際には容量を増やしていません。スレーブはすでに最大容量に達しています。したがって、別のスレーブを追加して、読み取りの負荷を分散します

Master - 1000 wps/0 rps - 1000 free ops
Slave1 - 1000 wps/500 rps - 500 free ops
Slave2 - 1000 wps/500 rps - 500 free ops

今、私たちはどこかに着いており、少し成長する余地があります。しかし、ええと、スラッシュドットの最初のページに到達したため、突然トラフィックが2倍になり、現在2000 wpsと2000 rpsを実行しています!

Master - 2000 wps/0 rps - 0 free ops
Slave1 - 2000 wps/1000 rps - 1000 ops OVER CAPACITY!
Slave2 - 2000 wps/1000 rps - 1000 ops OVER CAPACITY!

それで大丈夫です。いくつかの追加のボックスを配置するので、さらにスレーブを追加します

Master - 2000 wps/0 rps - 0 free ops
Slave1 - 2000 wps/500 rps - 500 ops OVER CAPACITY!
Slave2 - 2000 wps/500 rps - 500 ops OVER CAPACITY!
Slave3 - 2000 wps/500 rps - 500 ops OVER CAPACITY!
Slave4 - 2000 wps/500 rps - 500 ops OVER CAPACITY!

ええとああ。私たちが何をしようとも、書き込みを減らすためにシャーディングするか、すべてのサーバーを1秒あたりの操作の容量を増やすようにスケールアップすることなく、この状況を改善できません。

別の考慮事項は、マスターが複数の読み取りを同時に取り込んでいることですが、それらはバイナリログにシリアル化され、スレーブの単一スレッドで再生されます。したがって、マスターで1000 wpsに追いつくことはできても、スレーブは250 wpsしか処理できず、大幅に遅れることはありません。これは、書き込みの多い環境では、スレーブが追いつくために、マスターよりも(CPUおよびI/O容量の点で)より強力である必要がある場合があることを意味します。

2
Aaron Brown

私は、12人以上のスレーブがマスターからぶら下がっているシステムを扱います。問題ない。

マスターのオーバーヘッドは非常に低く、ソケットから(スレーブごとに)押し出します。

「ファンアウト」することは可能ですが、「リレー」は「単一障害点」になります。つまり、マスターはいくつかのリレー(スレーブとマスターの両方)に送信でき、それぞれがいくつかのスレーブに送信されます。

ほとんどの読み取りをスレーブに移動します。これは「読み取りスケーリング」です。これはマスターをオフロードするのに役立ちます。

書き込みスケーリングにはシャーディングが必要です。 (アーロンはこれをほのめかしています。)

「デュアルマスター」は、マスターとスレーブの両方である2つのマシンです。フェイルオーバーには便利ですが、書き込みスケーリングには役立ちません。デュアルマスターセットアップで両方のマシンに書き込みしないでください。あなたはトラブルを求めています。代わりに、読み取りを「バックアップマスター」に送信してください。

アーロンの数についてのコメント-マスターが「0 rps」を持つことはめったにありません。通常、書き込みの準備に必要な読み取りがいくつかあります。これらは「クリティカル読み取り」と呼ばれ、スレーブに移動できません。

0
Rick James