2011-06-30 77 views
4

我有2臺Web服務器和1臺旨在用作反向代理或負載平衡器的服務器。 2個Web服務器具有真實/公共IP以及負載均衡器。負載平衡器服務器尚未配置,因爲我沒有確定哪個選項對我的Web應用程序最合適。我意識到一個負載平衡器是有風險的,因爲「單點故障」但我想與它一起。使用三臺服務器負載均衡PHP Web應用程序

2個Web服務器包含具有相同域和不同子域的多個PHP應用程序/虛擬主機(Apache + fastcgi)。他們都使用會話,cookies和其中一些需要SSL。我的主要目標是純粹將傳入的連接分成兩半,並將它們轉發給2個網絡節點。如果一個網絡節點脫機,另一個應該接受所有連接。我認爲如果需要,我們可以使用memcache進行會話共享。

我讀過關於Nginx,HaProxy和我可以在網上找到的任何其他應用程序。但我不能決定,因爲:

1)我有1臺服務器,我可以用作負載平衡器,但我在網上找到的所有配置需要2個負載平衡器節點。 2)我不知道應該在哪裏安裝SSL證書(在負載平衡器或網絡節點上),以及哪種解決方案在使用HTTPS連接時最好。

任何幫助/想法是必要的,非常感謝。

+0

也有一個想一想萊蒂 - http://www.lighttpd.net/ – Brian

回答

4

我在類似的設置中使用了HAProxy,我強烈推薦它。它可以在單臺服務器上運行得非常好,並且只有兩臺服務器才能實現負載平衡,以防您需要高可用性。

有許多教程,如this,提供瞭如何在您尋找的配置中設置的詳細說明。

1

我剛纔昨天創建了一個配置,NGINX服務器作爲負載均衡器,後面有2個PHP-FPM服務器,1個Memcache服務器和1個MySQL服務器。 NGINX使用上游化的功能配置和相關的配置線是這樣的:

html { 

    ... 

    # loadbalancing   
    upstream myLoadBalancer { 
     ip_hash; # makes sure same user uses the same server, not 100% effective - application 
       # should handle this; in my case 1 Memcached and 1 MySQL servers commonly used 
       # by all App-servers work just fine. I store sessions in Memcache, so Session 
       # management isn't a problem at all. Its shared across all App-servers. 
     server 192.168.1.10:9000; # location of my first php-fpm server 
     server 192.168.1.11:9000; # second php-fpm server 
     # server aaa.bbb.ccc.ddd:80; # let's say, an Apache server 
    } 

    #vhost 
    server { 
     listen 80; 
     server_name mydomain.com; 
     index index.php; 

     location ~* \.php$ { 
      gzip on; 
      try_files $uri =404; 
      include fastcgi_params; 
      fastcgi_pass myLoadBalancer; 
      fastcgi_index index.php; 
      fastcgi_param SCRIPT_FILENAME /path/to/webdir$fastcgi_script_name; 
      fastcgi_param PATH_INFO $fastcgi_script_name; 
     } 
    } 
} 

HTTPS:他們應該在NGINX負載平衡器安裝,如果我沒有記錯的話 - 從來沒有嘗試過自己。一旦客戶端請求傳遞給App-server,它將處理它,獲取請求並將其發送回NGINX。 NGINX在將響應轉發給客戶端之前,會加密內容。它的理論當然。但我100%肯定NGINX可以很輕鬆地處理SSL。當與各種CLI的FASTCGI功能相結合時,它是速度最快,最健壯的代理/平衡器和良好的網絡服務器。

注意:這不是生產環境的配置,而是測試用例場景。生產環境需要很多安全設置。以下資源可以利用:

0

在任何情況下,你想HTTPS超過1臺網絡服務器,你的理想的解決方案是安裝在前面的Nginx你的網絡服務器。它也可以用於負載平衡,但是如果您需要更復雜的配置選項,那麼將Nginx請求轉發到您的HAProxy實例是一個不錯的主意。這兩個服務使用最少的資源,所以不用擔心兩者都運行。

我熟悉的只是具有3臺服務器,而不是想要冗餘負載均衡的想法。我實際上編寫了一個縮放體系結構的電子書,它包含一些使用2-3-4個服務器和只有1個負載平衡器的例子。也許它可以提供更多信息並幫助您開始。

0

你可以做你需要的東西只有一個HAProxy的節點(儘管這仍然給你留下一個單一故障點)。

我已經寫了tutorial for installing HAProxy on Rackspace Cloud,它可以適用於任何Ubuntu的設置。通過使用cookie選項,您還可以實施會話持久性,因此不需要在框之間共享會話,用戶只會在會話中斷時丟失會話。

一旦你有你的標準的HTTP流量通過HAProxy的平衡,你可以再通過使用爲好mode tcp選項發送您的SSL。這不能將cookie插入到請求中,因此請使用sourcebalance模式。這取決於用戶的IP,因此除非添加其他節點,否則不會在會話中更改。

您的SSL證書隨後會安裝在您的Web節點上,因爲HAProxy只是平衡了TCP通信。順便提一句,您可以使用這種平衡模式,通過TCP進行任何操作,包括用於某些真正高可用性解決方案的MySQL連接。

相關問題