Nginx

如何為兩個相同的 Icecast 主伺服器設置自動故障轉移反向代理?

  • November 26, 2015

我正在嘗試在 Icecast 主流伺服器的前端高可用性中使用反向代理來做簡單的所有事情(即,我在這裡不是在談論 Icecast 中繼)。所以,三個虛擬機:

  • 2 個相同的獨立 Icecast VM(每個都有一個本地 MPD 音樂源和一個本地 nginx 前端以獲取正確的標頭
  • 單個負載均衡器/反向代理 nginx VM。

我的問題是——我如何配置反向代理來進行自動故障轉移,以防其中一個 Icecast VM 發生故障而流客戶端的中斷很少?

插圖:

                            /--- [ local nginx A <-> icecast master A <- mpd A]
-> [nginx reverse proxy] ---<
                            \--- [ local nginx B <-> icecast master B <- mpd B]

我首先嘗試了這個簡單的教程來設置一個反向代理 nginx,之後我可以通過打開 nginx 虛擬機來監聽流。

upstream backend  {
 ip_hash; # try to send the same clients to the same servers
 server 1.2.3.4;
 server 1.2.3.5 max_fails=1  fail_timeout=15s;
}
server {
 location / {
   proxy_pass  http://backend;
 }
}

但是,當我在作為最終端點的 Icecast VM 上停止 Icecast 服務時,客戶端不會故障轉移到良好的 Icecast。即使出於某種原因刷新後也沒有。我嘗試嘗試其他站點提到ip_hash的各種, max_fails,fail_timeout選項、不同的響應標頭屬性、緩衝區大小等,但沒有任何效果。我覺得我有點像在黑暗中釣魚,考慮到流行廣播電台的數量,應該有一些明顯的流式故障轉移解決方案。關於如何最好地設置它或一些好的資源的任何建議?我想要 302 重定向還是真正的代理通行證?

如果這也是一種更好的方法,我願意接受基於 HAProxy 的建議。

正如您所發現的,反向代理 Icecast 並不是一個好主意。沒有真正的好處,雖然有幾個缺點,你仍然有一個單點故障:你的前端。

Icecast 是一個非常穩定和可靠的伺服器,用於通過 HTTP 服務網頁的典型策略不一定適用於它。

您最好花點時間了解 Icecast、它的配置和限制。也就是說,如果配置得當,Icecast 將很容易使 1 GBit/s 連接飽和並為超過 20.000 個並發偵聽器提供服務。測試實際上表明它的擴展性遠遠超出此範圍,但可能存在極端情況。

之後問問自己:我真正想解決的可用性問題是什麼,問題的答案很可能不是“反向代理”。

引用自:https://serverfault.com/questions/739178