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  wink))
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 smile

2

Odp: Load balancing and failover

oj, wkradł się błąd sad
Powinno być w ustawieniach multiwan:

config 'interface' 'wan'
        option 'weight' '10'
        ...

config 'interface' '3g'
        option 'weight' '1'
        ...

Inaczej naszym łązcem podstawowym będzie "Aero2", a nie "wan"

3

Odp: Load balancing and failover

Skoro już masz to i działa to zobacz sobie: https://forum.openwrt.org/viewtopic.php?id=33129 lżejszy jest i ciekawiej wykonany.

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.

4

Odp: Load balancing and failover

Dzięki, sprawdzę to w wolnej chwili, ale to obecne rozwiązanie jest całkiem, całkiem. U mnie się sprawdza smile

5

Odp: Load balancing and failover

Wiem że się sprawdza. Tyle że jest... lekko nieobliczalne i brzydko napisane.

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.

6 (edytowany przez walterm 2012-08-20 13:09:23)

Odp: Load balancing and failover

Maiłeś rację, z tym lekko nieobliczalne. Już maiłem pierwszy problem, a mianowicie po jakiś czasie testowania, 'multiwan' przestaje reagować na DNS typu 'auto', objawia się to tym, że nie pinguje ich (ustawienie 'icmp_hosts") i uznaje interface 'wan' za położony, przełaczajac na zapasowy, no bardzo nieciekawy 'feauture'.
Aby zapobiec takiej sytuacji, musimy niestety DNS na obu interface (nie tylko 3g) ustawić z ręki:

Zmieniamy wpis w /etc/config/network

config 'interface' 'wan'
        option 'ifname' 'eth1'
        option 'proto' 'dhcp'
        option 'peerdns' '0'
        option 'defaultroute' '0'

oraz w pliku /etc/config/multiwan

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' '194.204.159.1 194.204.152.34'
        # powyzsze DNS sa przykladowe, ale wybierz te od swojego ISP

I testujemy dalej ...

7

Odp: Load balancing and failover

Cos nadal nie halo, hmm nie dziala opcja 'weight", ktora powinna być czyms takim jak 'cost" w OSPF, ale też też nie tak do konca, bo do pierwszego restartu 'multiwan" wykonywanego przez 3gtester jest ok, pozniej już nie ...

8 (edytowany przez walterm 2012-08-20 08:48:59)

Odp: Load balancing and failover

Chyba znalazłem wyjaśnienie. Więcej na: https://dev.openwrt.org/ticket/10423

Cezary, mógłbyś sprawdzić/zaktualizować obrazy poprawiając ten bug ?

9

Odp: Load balancing and failover

Tyle że w backfire nigdy nie zostanie to poprawione, ani multiwan ani inne elementy.

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.

10 (edytowany przez walterm 2012-08-20 09:08:47)

Odp: Load balancing and failover

Trudno, trzeba w takim razie poprawkę zrobić samemu.

Edytując skrypt: /usr/share/udhcpc/default.script

Oraz zmienić wpis w linii 72 tego skryptu:

Było:  eval $(route -n | awk '

Ma być:  eval $(route -n | awk '$5 == ('${user_metric:-0}')' | awk '

11

Odp: Load balancing and failover

Lub przestawić się na trunka. Co w sumie ma sens, bo za kilka tygodniu spodziewamy się stabilnego wydania.

(choć w przypadku openwrt to różnie bywa).

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.

12 (edytowany przez walterm 2012-08-29 09:52:49)

Odp: Load balancing and failover

Porażka ! Po tygodniu testów multiwan tak zwiesił mi router, że musiałem wykonać 'failsafe', no nic nie pomagało ;/
Postanowiłem przejść teraz na mwan2 zgodnie ze wskazóką Cezarego, fajny pakiet, o 50% mniejszy niż multiwan.
Od kilkunastu godzin testuję i jest OK,  jak kogoś interesuje co i jak poniżej cała procedura smile

Instalacja Mwan2 w funkcji failover pod Aero2

1. Wprowadzić poprawki /usr/share/udhcpc/default.script" w linii 72 :

Jest: eval $(route -n | awk '

Powinno być: eval $(route -n | awk '$5 == ('${user_metric:-0}')' | awk '

2. Niestety Aero2 zrywa polaczenie co godzine, aby temu zapobiec modyfikujemy skrypt /bin/3gtester

#!/bin/sh
[ "x"$(uci -q get network.wan2.proto) == "x3g" ] || return
[ "x"$(uci -q get network.wan2.auto) == "x1" ] || return
[ -e $(uci -q get network.wan2.device) ] || return
if ! ping -q -c 3 -I 3g-wan2 -W 10 8.8.8.8> /dev/null; then
        logger -t 3gtester "Restart 3G connection"
        (ifup wan2) &
fi

3. skonfigurować interface jak poniżej:

# Interface podstawowy wan
#
config 'interface' 'wan'
        option 'ifname' 'eth1'
        option 'proto' 'dhcp'
        option 'metric' '10'

# Interface zapasowy 3G (wan2)
#
config 'interface' 'wan2'
        option 'proto' '3g'
        option 'service' 'umts'
        option 'device' '/dev/ttyUSB0'
        option 'apn' 'darmowy'
        option 'defaultroute' '0'
        option 'auto' '0'

config 'route'
    option 'interface' 'wan2'
    option 'target' '0.0.0.0'
    option 'netmask' '0.0.0.0'
    option 'metric' '20'

4. Sprawdzić/dopisać do /etc/config/firewall

# Interface 3g
config zone
        option 'name'             'wan2'
        option 'network'         'wan2'
        option 'input'              'REJECT'
        option 'output'           'ACCEPT'
        option 'forward'          'REJECT'
        option 'masq'             '1'

config forwarding
        option 'src'              'lan'
        option 'dest'           'wan2'

5. Sprawdzić/doinstalować pakiety  (najlepiej z http://ecco.selfip.net/backfire/ar71xx/packages/ ):

    - ip
    - iptables
    - iptables-mod-conntrack
    - iptables-mod-conntrack-extra
    - iptables-mod-ipopt

opkg update
opkg list-installed

n.p.: opkg install iptables-mod-conntrack http://ecco.selfip.net/backfire/ar71xx/packages

6. Zainstalować mwan2_1.4-3.ipk

opkg install mwan2_1.4-3 http://213.136.13.52/mwan2_1.4-3.ipk

7. skonfigurowac mwan2

/etc/config/mwan2

config 'interface' 'wan'
        option 'enabled' '1'
        option 'metric' '1'
        option 'weight' '1'
        option 'track_ip' '8.8.8.8'
        option 'count' '1'
        option 'timeout' '10'
        option 'interval' '5'
        option 'down' '3'
        option 'up' '3'

config 'interface' 'wan2'
        option 'enabled' '1'
        option 'metric' '2'
        option 'weight' '1'

config 'rule'
        option 'dest_ip' '0.0.0.0/0'
        #option 'equalize' '1'
        list 'use_interface' 'wan'
        list 'use_interface' 'wan2'

8. Zmienić w /etc/config/network

config 'interface' 'wan2'
    ...
    option 'auto' '1'

9. reboot

Musiałem zmienić poprzednią nazwę interface modemu 3g z '3g' na 'wan2' (ale może to być cokolwiek, byleby nie 3g itp.). OpenWRT jakoś nie chce współpracować poprawnie, jak nazwa interface pokrywa się z nazwą usługi.

Jestem w trakcie testów, zobaczymy jak będzie za tydzień ...

13 (edytowany przez walterm 2012-08-28 13:00:25)

Odp: Load balancing and failover

W dalszym ciągu problemy ...
Tym razem na mwan2 nie mogę narzekać, działa bardzo dobrze, ale, no właśnie zauważyłem, że całość działa stabilnie w ciągu całego dnia, ale coś dzieje się nad ranem (pomiędzy 1.00 a 4.00 rano), po prostu tabela routingu dotycząca wpisu wan2 nie zawiera już wpisu UG dotyczącego trasy przez ten interface, częto również brak jest wpisu UH dotyczącego tego interface PPP. Na pierwszy rzut oka wygląda na problem z komunikacją po PPP. Zresztą ten temat już był poruszany np. na http://aero2forum.pl/archive/index.php/thread-339.html . Nie jestem pewien czy dobrze 'strzelam", bo może to jednak coś innego, ale jeżeli grzebią w nocy przy BTS, co powoduje zwieszanie modemów, to może być powód.
Postanowiłem zatem zmotyfikowac skrypt /bin/3gtester i restartować modem po zerwaniu połączenia i przed każdym uruchomieniem ifup.
Poniżej zmodyfikowany skrypt:


#!/bin/sh
[ "x"$(uci -q get network.wan2.proto) == "x3g" ] || return
[ "x"$(uci -q get network.wan2.auto) == "x1" ] || return
[ -e $(uci -q get network.wan2.device) ] || return
if ! ping -q -c 3 -I 3g-wan2 -W 10 8.8.4.4 > /dev/null; then
        logger -t 3gtester "Restart 3G connection"
        (echo -e "ATZ\r" > /dev/ttyUSB0; ifup wan2) &
fi

Zobaczymy jak teraz ...

14

Odp: Load balancing and failover

Ja bym dla pewności zrobił ifdown wan2 przed tym echo, żeby połączenie nie wisiało.

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.

15

Odp: Load balancing and failover

Słuszna uwaga, zmieniłem:

#!/bin/sh
[ "x"$(uci -q get network.wan2.proto) == "x3g" ] || return
[ "x"$(uci -q get network.wan2.auto) == "x1" ] || return
[ -e $(uci -q get network.wan2.device) ] || return
if ! ping -q -c 3 -I 3g-wan2 -W 10 8.8.4.4 > /dev/null; then
        logger -t 3gtester "Restart 3G connection"
        (ifdown wan2; echo -e "ATZ\r" > /dev/ttyUSB0; ifup wan2) &
fi

16 (edytowany przez walterm 2012-08-29 09:16:37)

Odp: Load balancing and failover

No tak, teraz to chyba już działa stabilnie, ale jeszcze potestuję ...

Mam jeszcze małe pytanie do Cezarego, zauważyłem, że po kilkunastu godzinach uptime routera maleją zasoby w /overlay Niedużo, ale ich ubywa po 20h uptime zużycie wzrosło z 79% do 81% czy to normalne ?
Moim zdaniem wszystkie logi, etc, itp powinny iść do RAM, a nie flasha.

17

Odp: Load balancing and failover

A właściwie czego używasz? Jeżeli gargoyle to tak, gromadzi co kilka godzin kopię czasu i danych o transferach.

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.

18 (edytowany przez walterm 2012-08-29 09:35:01)

Odp: Load balancing and failover

Tak, używam Gargoyle z Twojego repo  z sierpnia 2012

19

Odp: Load balancing and failover

No to jak wyżej. Nie chcesz to zmodyfikuj sobie crontaba żeby tego nie robił (i skrypty startowe które to dodają jak tego nie ma).

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.

20

Odp: Load balancing and failover

A jest jakiś docelowy rozmiar tych wpisów ? Po 28h zajętość 83% i rośnie ...

21

Odp: Load balancing and failover

Nie ma. Czy raczej aż Ci się flash skończy...

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.

22 (edytowany przez walterm 2012-08-29 16:46:13)

Odp: Load balancing and failover

A jak flash się skończy to później zwiesi/przekręci router zapewne ?

Mówimy o tym wpisie w crontab ?
0 0,4,8,12,16,20 * * * /tmp/bw_backup/do_bw_backup.sh

23

Odp: Load balancing and failover

M.in, tak.

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.

24

Odp: Load balancing and failover

To znaczy zwiesi czy zrestartuje, bo to kolosalna różnica ?

25

Odp: Load balancing and failover

Zwykle się restartuje.

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.