易實現的ISP負載平衡設置
很多朋友都會發現,我們的一些列關于負載平衡的文章都是比較專業的。一般不學習技術的人感覺都用不上負載平衡這個技術。但是,最簡單的,我們在家里面可以對我們的寬帶網絡進行負載平衡設置。這也是最容易理解和調控的一種負載平衡技術實現。那么現在我們就為大家演示一下如何進行ISP負載平衡的設置。
將兩個ISP綁定,并做負載平衡,可以實現帶寬加倍。 也就是說,假如我們有兩條ADSL包月線路,可以使帶寬變為1M!
做這個工作,涉及到兩個工作
1、流量分割
首先是如何保證:回應來自某一個ISP的數據包時,仍然使用相同的ISP。 讓我們先定義一些符號。
令第一塊網卡的名字叫 $IF1,而第二塊網卡叫做 $IF2 。
然后設置 $IF1 的IP地址為 $IP1,$IF2 的IP地址為 $IP2。
并且,令ISP1 的網關地址為 $P1,ISP2 的網關地址為 $P2。
最后,令$P1的網絡地址為 $P1_NET ,令$P2的網絡地址為 $P2_NET。
額外創建兩個路由表, T1 和 T2。 加入到 /etc/iproute2/rt_tables 中。
然后如下設置兩個路由表中的路由:
ip route add $P1_NET dev $IF1 src $IP1 table T1
ip route add default via $P1 table T1
ip route add $P2_NET dev $IF2 src $IP2 table T2
ip route add default via $P2 table T2
沒什么大不了的,不過是建立了通向該網關的一條路由,并使之成為默認網關,分別負責一個單獨的上行流,并且為這兩個ISP都作這樣的配置。
要指出的是,那條網絡路由是必要條件,因為它能夠讓我們找到那個子網內的主機,也包括上述那臺網關。
下一步,我們設置“main"路由表。把包通過網卡直接路由到與網卡相連的局域網上不失為一個好辦法。要注意“src" 參數,他們能夠保證選擇正確的出口IP地址。
ip route add $P1_NET dev $IF1 src $IP1
ip route add $P2_NET dev $IF2 src $IP2
然后,設置你的缺省路由:
ip route add default via $P1
接著,設置路由規則。這實際上在選擇用什么路由表進行路由。你需要確認當你從一個給定接口路由出數據包時,是否已經有了相應的源地址:你需要保證的就是如果你已經有了相應的源地址,就應該把數據包從相應的網卡路由出去:
ip rule add from $IP1 table T1
ip rule add from $IP2 table T2
以上命令保證了所有的回應數據都會從他們來的那塊網卡原路返回。 現在,完成了非常基本的配置。這將對于所有運行在路由器上所有的進程起作用,實現IP偽裝以后,對本地局域網也將起作用。如果不進行偽裝,那么你要么擁有兩個ISP的地址空間,要么你想對兩個ISP中的一個進行偽裝。無論哪種情況,你都要添加規則,基于發包的主機在局域網內的IP地址,選擇從哪個ISP路由出去。
2、負載平衡
第二個問題是如何對于通過兩個ISP流出的數據進行負載平衡。
如果你已經成功地實現了流量分割,這件事并不難。
與選擇兩個ISP中的一個作為缺省路由不同,這次是設置缺省路由為多路路由。
在缺省內核中,這會均衡兩個ISP的路由。
象下面這樣做(基于前面的流量分割實驗):
ip route add default scope global nexthop via $P1 dev $IF1 weight 1 nexthop via $P2 dev $IF2 weight 1
這樣就可以均衡兩個ISP的路由。通過調整“weight"參數我們可以指定其中一個ISP的優先權高于另一個。
應該指出,由于均衡是基于路由進行的,而路由是經過緩沖的,所以這樣的均衡并不是100%精確。也就是說,對于一個經常訪問的站點,總是會使用同一個ISP。