Temat: Load balancing and failover
Witam,
Miałem taki problem, u mnie na wsi (osiedle domów jednorodzinnych pod Szczecinem) niestety tylko nieliczni mogą cieszyć się urokami Neostrady, itp., przede wszystkim dostęp do neta opiera się o prywatnych dostawcach WISP działających w pasmie 5GHz. Niestety jakość usług jest przeciętna, co burza to Internet pada, na wiele godzin, a jak jest burza jest w weekend ooo, to i do poniedziałku nie ma ;(
Postanowiłem to usprawnić, kupiłem sobie routerek TL-MR3420 oraz modem K3765 oraz kartę Aero2. Niestety simplefailover w moim przypadku jest bezużyteczny, bo dostęp jest przez bezprzewodowe bridge i nawet jak nie ma łączności to interface jest i tak podniesiony, a więc kupa ...
Cóż jednynym rozwiązaniem jest zatem zastosowanie "multiwan", co zresztą zrobiłem ...
Przede wszystkim należy skonfigurowac interface, w moim przypadku bedą to wan (do WISP) oraz 3g (do Aero2). Poniżej przedstawiam konfigurację interface, należy wprowadzić poniższe zmiany w pliku /etc/config/network , i tak:
config 'interface' 'wan'
option 'ifname' 'eth1'
option 'proto' 'dhcp'
config 'interface' '3g'
option 'proto' '3g'
option 'service' 'umts'
option 'device' '/dev/ttyUSB0'
option 'apn' 'darmowy'
option 'peerdns' '0'
option 'defaultroute' '0'
option 'auto' '1'
opcję peerdns ustawiamy na wyłączone, bo w obecnej wersji pakiet multiwan nie radzi sobie zbyt dobrze z obsługą DNS, które przydzielane są dynamicznie, to samo z defaultroute
oczywiście modyfikujemy /etc/config/firewall dodając poniższe wpisy:
config zone
option name 3g
option network '3g'
option input REJECT
option output ACCEPT
option forward REJECT
option masq 1
config forwarding
option src lan
option dest 3g
No to już mamy skonfigurowane interface i firewall rules
teraz wprowadzamy modyfikacje:
/ect/init.d/network restart
/etc/init.d/firewall restart
OK, teraz instalacja pakietu multiwan
# opkg update
# opkg install multiwan
Teraz musimy wprowadzić reguły do łącza równoległego/zapoasowego, poniżej moje modyfikacje:
config 'multiwan' 'config'
option 'default_route' 'balancer'
# health_monitor below is defaulted to parallel, and can be set to
# serial to save system resources.
option 'health_monitor' 'serial'
# option 'debug' '1'
config 'interface' 'wan'
option 'weight' '1'
option 'health_interval' '10'
option 'icmp_hosts' 'dns'
# icmp_count is defaulted to 1, and can be increased to reduce
# false positives.
option 'icmp_count' '3'
option 'timeout' '5'
option 'health_fail_retries' '3'
option 'health_recovery_retries' '3'
option 'failover_to' 'balancer'
option 'dns' 'auto'
config 'interface' '3g'
option 'weight' '10'
option 'health_interval' '10'
option 'icmp_hosts' 'dns'
option 'icmp_count' '1'
option 'timeout' '10'
option 'health_fail_retries' '1'
option 'health_recovery_retries' '1'
option 'failover_to' 'balancer'
option 'dns' '8.8.8.8 8.8.4.4'
#config 'mwanfw'
# option 'src' '192.168.2.0/24'
# option 'dst' 'ftp.netlab7.com'
# option 'proto' 'tcp'
# option 'ports' '21'
# option 'wanrule' '3g'
# Used by 3gtester script
config 'mwanfw'
option 'src' '192.168.2.0/24'
option 'dst' '8.8.4.4'
option 'proto' 'icmp'
option 'wanrule' '3g'
Co oznaczaja te wpisy?, mianowicie, ze mamy dwa łącza jedno o priorytecie 1 drugie 10, oba łacza działają jednocześnie, ale traffic idzie głównie przez łącze wan, chociaż przez 3g też, podane są "ręcznie" DNSy do 3G, bo jak pisałem multiwan nie radzi sobie najlepiej z dynamicznym ich przypisaniem. I teraz jak pada wan to głownym interface staje się 3g, więc zawsze mamy łączność, to taki "turbo" failover, bo przecież jest balancing także ))
I sekcja #Used by 3gtester script
tak, to barzdo istotne, bo Aero2, niestety co 60 minut zrywa połaczenie i tak mielibyśmy loadbalancing tylko przez 60 minut, pózniej interfejs 3g byłby połozony ;(
No więc tworzyny taki wpis, na potrzeby działania skryptu /bin/3gtester, by każdy ping szedł przez Aero2, a nie domyślny interface.
Dobrze, zrobiliśmy te zmiany teraz czas to odpalić ...
/etc/init.d/multiwan enable
/etc/init.d/multiwan start
/etc/init.d/multiwan single
Już prawie działa, ale trzeba jeszcze zmodyfikowaś skrypt 3gtester, w mnie wyglada to tak:
#!/bin/sh
[ "x"$(uci -q get network.3g.proto) == "x3g" ] || return
[ "x"$(uci -q get network.3g.auto) == "x1" ] || return
[ -e $(uci -q get network.3g.device) ] || return
if ! ping -q -c 3 -W 10 8.8.4.4 > /dev/null; then
logger -t 3gtester "Restart 3G connection"
(ifup 3g; sleep 5; /etc/init.d/multiwan restart) &
fi
Niestety należy zrestartować multiwan, bo loadbalancing nie pdonosi się automatycznie pod położeniu interface, stąd ten wpis "/etc/init.d/multiwan restart", ale to tak na marginesie
Cóż testuję to od 2 dni i wyglada to dobrze, jak macie uwagi to komentujcie ten wpis