2013-04-03 71 views
1

我正在寫在工作中使用PHP一個BI工具,它由一個Linux + Apache的+ PHP機服務報表和儀表盤,包含從我們的MySQL數據庫獲取的數據。數據庫結構由一個主控(我無權訪問)和兩個從控制器組成,兩者都可以運行查詢。這裏的想法是,如果一個從機出現故障,該平臺可以繼續從另一個機構讀取數據。我打算使用try/catch從一臺機器故障切換到另一臺機器。PHP檢查爲最不繁忙的MySQL服務器

我的問題是,如果兩個從屬服務器是那麼有沒有使用PHP我可以檢查哪些是最繁忙的,然後直接查詢到本機到兩臺服務器之間最佳平衡負載什麼辦法?

我在這裏有答案環顧四周,我被多麼少出現了,也許我失去了一些東西很明顯感到驚訝。向正確的方向推動會很好。

在此先感謝您的幫助,

詹姆斯

回答

1

我不會用你的PHP代碼選擇的奴隸。在所有查詢指導您的請求之前,它會花費太多的檢查費用,或者不夠聰明,無法成爲真正的負載平衡器。

首先,它可能只是隨機的一個奴隸的選擇是一件好事。這可能是獲得奴隸之間最佳分工的好方法,但也有一些好處。

如果有一些極端查詢會使奴隸癱瘓,那麼您不想在此處進行更多查詢以獲取更多信息,並且如果有一個客戶端支持slave2上方的slave1,則可能需要對此進行調整,因此它不是適用於所有環境:在這種情況下,專用(IP級)負載均衡器將您的(所有)流量重定向至最佳機器似乎是最佳選擇。


正如您所說,您可以通過PHP找到機器的當前負載。

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

但這隻適用於本地機器。要獲得此爲遠程機器,你可以通過一個Web服務器暴露這些值:您可以重複該文件的內容,或者好一點,做一個小的「Web服務」返回JSON或XML或任何你使用這些值喜歡。

+0

Nanne - 感謝您抽出寶貴回覆的時間。爲了提供更多信息,正如您所提到的,查詢的性質(90%便宜查詢/ 10%昂貴查詢)並不適用於隨機負載平衡。同時,我沒有在PHP之外實現負載均衡器的技術實力,我希望根據哪個服務器的活動最少來選擇要使用哪個服務器來填充MySQLI連接。我有沒有辦法通過PHP訪問遠程計算機上的'/ proc/loadavg'?唯一的方法是使用exec嗎? –

+0

是的,你可以,但它不是一個很好的解決方案。讓我給答案加點東西 – Nanne

+0

太好了,謝謝Nanne,James –