Newsgroup: it.comp.os.linux.sys
Titolo: Keepalived e "alta disponibilità"

Titolo un po' strano dato che LVS è sinonimo di HA essendo un cluster
director, ma io ho delle esigenze un po' particolari. Avrei bisogno di
poter configurare due "real server" di keepalived in modo active-inactive,
ovvero che normalmente keepalive passi sempre tutti i pacchetti al server
active, se questo è vivo, e altrimenti lo passi all'altro server.
Non rispondetemi con "usa heartbeat" per favore, perchè uso già heartbeat
(ovvero: lo conosco) e in questo caso per come è montata la mia
infrastruttura non andrebbe bene per questo caso specifico (in altri casi
lo utilizzo già con soddisfazione)
Leggendo qua
http://www.linuxvirtualserver.org/docs/scheduling.html
non sembrerebbe possibile, per questo chiedo conferme qui :)
-- 
Vide

 non sembrerebbe possibile, per questo chiedo conferme qui :)
Quinid "usa heartbeat" non si può dire, giusto? :-P
Mi riesce difficile immaginare il perchè, ma amen. :-)
Una soluzione "near" active passive potrebbe essere usare wrr
mettendo ad un real server il peso massimo ed all'altro il minimo
(65535 e 1)
La cosa più lurida sarebbe mettere un solo real server nel pool e
mettere il secondario come sorry server.
Il contro di questa soluzione è che non hai garanzie che il sorry
server sia ok, nel momento in cui debba fare il suo sporco lavoro
visto che non viene sottoposto ad healthchecking non essendo un real
server.
Riguardando gli algoritmi di scheduling possibili nell'url da te riportato
mi viene in mente, ma il tutto andrebbe verificato, che l'algoritmo
Shortest Expected Delay potrebbe fare al caso tuo.
Leggo infatti che
expected delay=(Ci + 1) / Ui
dove Ci è il numero attuale di connessioni e Ui è un peso opportuno
assegnato a ciascuno dei real server.
Se 1 è il server che debba essere "active" e 2 quello passive, quello
che vuoi è che sia sempre (C1+1)/U1<1/U2 
(perchè assumiamo che sul real server *non* ci siano connessioni, in 
condizioni normali)
Rimaneggiando:
U1>U2*(C1+1)
Dovrebbe bastare quindi scegliere U1 tale che
U1>U2*(Cmax+1)
dove Cmax è il numero massimo di connessioni possibili
per avere ciò che cerchi
Fissando U2=1 abbiamo quindi che U1 deve essere maggiore di Cmax+1
per garantire il risultato
(ricontrolla che magari ho scritto qualche boiata nel maneggiare
le disequazioni, ma dovrebbe filare...)

 per garantire il risultato
Questa sembrerebbe una ottima soluzione, mi rimane però da capire come
conteggiare esattamente le connessioni.
Prendendo in esempio il server che mi interessa mettere in HA, ora sta
dietro LVS come unico real server:
# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  
192.168.1.80:84
 rr
  -> 
192.168.1.116:84
             Route   1      6          335
il Cmax è 335 (connessioni non attive), 6 (connessioni attive) o altro (tipo
la somma)?
A rigor di logica dovrebbero essere le attive, però non si sa mai. Ti dice
qualcosa? Sennò mi sa che devo "scalare" alla mailing list di LVS :)
Comunque farò un po' di prove e ti/vi dico. Grazie ancora.
-- 
Vide

 (tipo la somma)?
Cmax è un valore sufficientemente alto tale da garantirti che il numero
di connessioni che avrai nelal realtà non raggingerà mai tale numero.

 lo utilizzo già con soddisfazione)
Si potrebbe utilizzare (io uso ldirectord, ma la base è la stessa)  una 
configurazione del tipo 1 server reale solo (l'autoritativo) ed un 
server di fallback.
angeloxx