Hali,
Van két HAproxy node szerver, corosync/heartbeat-el. Úgy van beállítva, hogy az egyiken fut a HAproxy float IP-vel, gond esetén a másik node felhúzza az IP és indítja a HAproxyt.
Ezzel semmi gond, szépen működik.
De, ha az aktuális node-on pl. MAINT állapotba helyezek egy backend-et, és közben átkapcsol a másik node-ra, akkor ez az állapot nem megy át, hanem minden backend megint online módban lesz a mások node-on.
A haproxy-hoz a heartbeat-es scriptet innen töltöttem le. Abban nem volt semmi olyan dolog, ami átvinné az állapotokat.
A kérdésem az, hogy aki üzemeltet hasonlót, az hogyan oldja ezt meg?
UPDATE:A megoldás
# echo “1” > /proc/sys/net/ipv4/ip_nonlocal_bind
Így nem kell leállítani/elindítani a HAproxy-kat, hanem állandóan futnak. a Corosync csak az IP-t húzza fel.
Az 'server state' infók pedig átmennek ha beállítom a peers-t, sőt a kapcsolatok is.
A haproxy konfig valahogy így néz ki:
global
log /dev/log local0
log /dev/log local1 notice
chroot /var/lib/haproxy
stats socket /run/haproxy/admin.sock mode 660 level admin
stats timeout 30s
user haproxy
group haproxy
daemon
pidfile /var/run/haproxy.pid
maxconn 1000
ulimit-n 65535
tune.bufsize 16384
tune.maxrewrite 1024
defaults
log global
mode http
...
peers haproxy
peer haproxy1 10.10.10.1:9999
peer haproxy2 10.10.10.2:9999
frontend gateway
bind 10.10.10.10:443 <-- közös IP
default_backend nginx
backend nginx
balance leastconn
stick-table type ip size 20k peers haproxy
stick on src
...
server s1 127.0.0.1:44301 cookie sl ssl check inter 10000 weight 1 maxconn 1000
server s2 127.0.0.1:44302 cookie s2 ssl check inter 10000 weight 1 maxconn 1000
server s3 127.0.0.1:44303 cookie s3 ssl check inter 10000 weight 1 maxconn 1000
server maint 127.0.0.1:443 ssl check inter 5000 backup
Köszi mindekinek a tippet!
Hozzászólások
Nem ertek a HAProxy-hoz, de gondolom a backend statuszoknak is shared allapotban kell lenniuk? Nem tudom, hogy ez egy konfigba irodik e vagy valami state allomanyba, de a ketto HAProxy kozott ezt meg kellene osztani. Igy elso blikkre.
Ha 1.5-ös, vagy újabb haproxyt használsz, akkor képesek egymással állapotokat és táblákat szinkronizálni. Ehhez az kell, hogy mindkét gépen fusson a haproxy és ne a heartbeat indítgassa, valamint a peers opcióval be kell állítani, hogy megtalálják egymást.
Egy próbát megérne, hogy a kézzel beállított MAINT állapot is szinkronizálódik-e.
HAproxy 1.6-os van. Azért nem fut a passzív node-on, mert egy közös IP címre kell felhúzni a HAproxy-t, ami értelemszerűen csak ez egyiken lehet egyszerre. * bind sajnos nem jó, mert ugyanazon a porton másik IP címen más is fut. De ha más megoldás nem lesz, mergpróbálom átszervezni, hogy ez ne legyen gond.
Köszi a tippet.
Erre megoldás a net.ipv4.ip_nonlocal_bind, amivel akkor is tud listenelni, ha nincs nála az adott ip. Megfelelő feltételekkel persze.
Köszi, valószinüleg ez lesz a megoldás. Holnap kipróbálom.
+1
csak egy otlet, megprobalhatod iptables REDIRECT targettel is:
A haproxynak van egy sajat ipje, amit adott gepnek szol, es azon bindel X porton, iptables redirecttel meg csak odakuldod a bejovo forgalmat.
a man szerint a redirect atirja a cel ipt is (*).
eth0 - 10.0.0.11 < ez a fixed address
eth0:0 - 10.0.0.1 < ez vandorol a heartbeattel
haproxy 10.0.0.11:2180-re bindel es
iptables -t nat -I PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-ports 2180
--
A vegtelen ciklus is vegeter egyszer, csak kelloen eros hardver kell hozza!
Igen ez is egy jó ötlet, de nem akartam nat-olni és iptablest belekeverni.
Üdv!
conntrackd-t próbáltad esetleg?
K.
A szokás hatalma, nem hét!!!
Köszi, már közben megoldottam.
Hu de jo lenne tudni, hogy hogyan? :D
Ott van a végén leírva. :-)
ooops, csak a kommenteket olvastam...bocs :D
A ip_nonlocal_bind nem csak a Corosync-nel jatszik, hanem az osszes tobbi mas failover IP megoldasnal. Pl.: keepalived. ;)
Nalunk van egy jopar "orokolt" regi load-balancer OpenSips szerver, amiken a keepalived jatszik.
Sot a Severalnines (http://severalnines.com/) meg mindig hasznalja a HA-Proxy-s konfigjaiban.
Mondjuk az teny, hogy egy keepalived konfiguracio "5" perc, ellenben a corosync/pacemaker kombot egy kicsit tovabb tart beloni. :)
.
sub
nice job!
--
"nem tárgyszerűen nézem a dolgot, hanem a vádló szerepéből. Sok bosszúságot okoztak, örülnék ha megbüntetnék őket - tudom gyarló dolog, de hát nem vagyok tökéletes." (BehringerZoltan)