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!
- 2179 megtekintés
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.
- A hozzászóláshoz be kell jelentkezni
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.
- A hozzászóláshoz be kell jelentkezni
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.
- A hozzászóláshoz be kell jelentkezni
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.
- A hozzászóláshoz be kell jelentkezni
Köszi, valószinüleg ez lesz a megoldás. Holnap kipróbálom.
- A hozzászóláshoz be kell jelentkezni
+1
- A hozzászóláshoz be kell jelentkezni
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
* REDIRECT
This target is only valid in the nat table, in the PREROUTING and OUTPUT chains, and user-defined chains which are only called from those chains.
It redirects the packet to the machine itself by changing the destination IP to the primary address of the incoming interface (locally-generated packets are mapped to the 127.0.0.1 address).
--
A vegtelen ciklus is vegeter egyszer, csak kelloen eros hardver kell hozza!
- A hozzászóláshoz be kell jelentkezni
Igen ez is egy jó ötlet, de nem akartam nat-olni és iptablest belekeverni.
- A hozzászóláshoz be kell jelentkezni
Üdv!
conntrackd-t próbáltad esetleg?
K.
A szokás hatalma, nem hét!!!
- A hozzászóláshoz be kell jelentkezni
Köszi, már közben megoldottam.
- A hozzászóláshoz be kell jelentkezni
Hu de jo lenne tudni, hogy hogyan? :D
- A hozzászóláshoz be kell jelentkezni
Ott van a végén leírva. :-)
- A hozzászóláshoz be kell jelentkezni
ooops, csak a kommenteket olvastam...bocs :D
- A hozzászóláshoz be kell jelentkezni
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. :)
- A hozzászóláshoz be kell jelentkezni
.
- A hozzászóláshoz be kell jelentkezni
sub
- A hozzászóláshoz be kell jelentkezni
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)
- A hozzászóláshoz be kell jelentkezni