星期三, 12月 16, 2009

load balance in difference internet interfaces

如果你有兩張網卡都是連上外部網路的話,可以透過 ip route 來做 load balance,方法很簡單,基本上就是把 default route 改成 multipath route。當然在這之前需要先把 ip route 設好讓一個 IP (TCP/UDP)連線只經由該連線存在的 interface 送出。

當然這只是很簡單的提供 load balance 的機制.. 有時候並不是那麼有用,不過將就點用吧 XD

其實設定上也很簡單,network split 的部份我就不再重複紀錄了,跟我之前寫過的這篇 差不多。
balance 的部份就是把default route 分成兩個 channel 依照 weight 決定連線走哪一條。步驟大概是這樣:

ip route del default #把目前 defualt route 刪掉
ip route add default scope global nexthop via [gw1] dev [if1] weight [weight1] \
nexthop via [gw2] dev [if2] weight [weight2]
假如我要從兩個 ISP 出去, 一個ip 是 A 另一個 B,分別透過 eth0 跟 eth1 連線,而 A 的連線速度比較快,可能是 B 的兩倍,那麼我可以這樣設定:(gateway 可以用 route -n 看)
ip route del default
ip route add default scope global nexthop via gw1 dev eth0 weight 2 \
nexthop via gw2 dev eth1 weight 1

這樣就設定好了,如果看 ip route 的話會看到下面這樣的結果

default
    nexthop via gw1  dev eth0 weight 2
    nexthop via gw2  dev eth0 weight 1
觀察流量的話也可以大略用 iptraf 看一下各個network interface 上面的流量。

沒有留言: