2011-07-06 69 views
9

我們正在努力擴展我們的EC2體系結構,以便我們管理自己的負載平衡。我們目前在HAProxy上配置了一系列機器來執行基本的負載均衡,但我們正在尋找「最佳實踐」,即讓新實例上線並自動(或幾乎自動)加入HAProxy。讓EC2實例自動加入HAProxy的最佳做法是什麼?

理想情況下,我們會監控系統上的負載或依靠幾年的分析數據來制定一個分時計劃,當我們達到閾值或計劃時間時,讓一個進程啓動一個新實例,讓新節點連接到HAProxy機器上的系統,將其主機名寫入配置並重新加載HAProxy,使其成爲池的一部分。

我們正在考慮亞馬遜的ELB一旦我們的成長足夠大,需要多個區覆蓋,但在那之前,我們需要一個簡單的設置,可以從HAProxy的添加/刪除機器。

我知道有些服務可以支付我們管理這些東西的費用,但是Scalr似乎將我們限制在非常具體的實例類型中,而且Rightscale太貴了,所以和其他許多人一樣,我們正在尋找滾動我們的自己解決。

不幸的是,那些誰推出自己的解決方案似乎是對他們的過程有點隱祕。

+1

什麼用scalr你的問題是什麼?只要安裝scalr客戶端,就可以使用自定義實例類型。我們正在使用他們的nginx負載均衡器,直到現在它的工作情況都很好。 – aporat

+0

啊,不知道Scalr會允許自定義構建。我瞥了一眼他們的產品,看起來他們有預先配置的實例,您必須使用它才能正常工作。 – iandouglas

回答

10

你不需要過度覺得這個解決方案;)

你可以在你HAProxy的配置文件只是「預先配置」的服務器。他們會出現「失望」,並且直到您真正將他們聯機後纔會收到請求。

這裏有一個例子,假設你只有5臺機器上網,並期望有10在未來2年:

listen web *:80 
    balance source 
    server web1 192.168.0.101:80 check inter 2000 fall 3 
    server web2 192.168.0.102:80 check inter 2000 fall 3 
    server web3 192.168.0.103:80 check inter 2000 fall 3 
    server web4 192.168.0.104:80 check inter 2000 fall 3 
    server web5 192.168.0.105:80 check inter 2000 fall 3 
    server web6 192.168.0.106:80 check inter 2000 fall 3 
    server web7 192.168.0.107:80 check inter 2000 fall 3 
    server web8 192.168.0.108:80 check inter 2000 fall 3 
    server web9 192.168.0.109:80 check inter 2000 fall 3 
    server web10 192.168.0.110:80 check inter 2000 fall 3 

有了這個配置,你會不會需要重新啓動HAProxy的或做任何形式的的醜陋黑客至少一年(除非你需要超過10個,然後只需加100,你就會被設置)。

你也可以編寫一個快速的shell腳本來自動生成這個配置,實際上如果你要爲你的池添加100個服務器,你應該編寫一個腳本。

+1

只是一個調整上述對策的探討,和我一直在爭奪與過去幾個小時...... insted的直接指向內部IP,因爲在亞馬遜,你不要有一個靜態的內部IP,即使可以使用靜態外部IP地址,有一個讓他們未分配的費用,你可能有與防火牆/交通chages問題,我sugestion是使用動態DNS服務(如dyndns.org)或誰提供了一個API一個DNS提供商(如Zerigo )並在機器上設置一些主機。如果你創建了10臺主機,併爲其分配內部的亞馬遜IP,它應該可以工作。 – TiernanO

+1

,因爲我跑出來的上述評論的空間,我會注意:您可能需要時不時來清潔您的DNS,因爲如果你擴展到,說6個實例,然後回到剛纔4,其他2仍然有IP現在可以屬於一個新的實例。也許是一個啓動和關閉腳本,並使用亞馬遜的實例數據命名機器......這就是我要解決我的問題的方式。 – TiernanO

+1

更新:自從我上次發佈這個問題以來,在我的新工作中,我面臨同樣的問題,但使用RackSpace的數百臺計算機的規模,這將需要一種方法讓這些計算機ping haproxy機器上的守護程序以獲得添加到配置中。 – iandouglas

相關問題