1

PHP を使用して BI ツールを作成しています。これは、MySQL データベースから取得したデータを含む、レポートとダッシュボードを提供する 1 台の Linux + Apache + PHP マシンで構成されています。データベース構造は、マスター (私はアクセスできません) と 2 つのスレーブで構成されており、どちらもクエリを実行できます。ここでの考え方は、1 つのスレーブに障害が発生した場合でも、プラットフォームは他のスレーブからデータを読み取って機能し続けることができるということです。あるマシンから別のマシンへのフェールオーバーに try/catch を使用する予定です。

私の質問は、両方のスレーブが稼働している場合、PHP を使用してどちらが最も忙しくないかを確認し、クエリをこのマシンに送信して両方のサーバー間の負荷を最適に分散させる方法はありますか?

ここで答えを探してみましたが、その少なさに驚きました。おそらく、明らかな何かが欠けているのでしょう。正しい方向へのナッジは素晴らしいでしょう。

助けてくれてありがとう、

ジェームズ

4

1 に答える 1

1

あなたのPHPコードを使ってスレーブを選択するつもりはありません。リクエストを送信するすべてのクエリの前にチェックするコストがかかりすぎるか、実際のロードバランサーになるほど賢くありません.

まず、スレーブの選択をランダム化することは良いことかもしれません. これは、奴隷間の分業を最適化するための良い方法ですが、いくつか問題があります。

スレーブを無効にするいくつかの極端なクエリがある場合、abit に対してこれ以上クエリを実行したくないでしょう。また、slave2 よりもスレーブ 1 を優先するクライアントが 1 つある場合は、それを調整する必要がある可能性があるため、すべての環境に対応するわけではありません。その場合、(すべての?) トラフィックを最適なマシンにリダイレクトする専用の (IP レベルの) ロード バランサーが最適なオプションのようです。


おっしゃる通り、マシンの現在の負荷は PHP で知ることができます。

if(file_exists("/proc/loadavg")) {
    $load = file_get_contents("/proc/loadavg");
    $load = explode(' ', $load);
}

ただし、これはローカル マシン専用です。リモート マシンでこれを取得するには、Web サーバーを介してこれらの値を公開できます。そのファイルの内容をエコーするか、もう少し良い方法として、JSON や XML など、これらの値で好きなものを返す小さな「Web サービス」を作成します。

于 2013-04-03T09:17:44.350 に答える