Per albero di file di grandi dimensioni intendo circa 200k file e in costante crescita. Un numero relativamente piccolo di file viene modificato in ogni ora.
Per bidirezionale intendo che possono verificarsi cambiamenti su entrambi i server e devono essere inviati all'altro, quindi rsync non sembra appropriato.
Per distante intendo che i server si trovano entrambi nei data center, ma geograficamente distanti tra loro. Attualmente ci sono solo 2 server, ma possono espandersi nel tempo.
In tempo reale, va bene che ci sia un po 'di latenza tra la sincronizzazione, ma eseguire un cron ogni 1-2 minuti non sembra giusto, dal momento che una piccolissima frazione di file può cambiare in una determinata ora, figuriamoci in un minuto.
EDIT : Questo è in esecuzione su VPS, quindi potrei essere limitato sui tipi di cose a livello di kernel che posso fare. Inoltre, i VPS non sono ricchi di risorse, quindi eviterei soluzioni che richiedono un sacco di RAM (come Gluster?).
Qual è l'approccio migliore / più "accettato" per farlo? Sembra che questo sarebbe un bisogno comune, ma non sono stato ancora in grado di trovare un approccio generalmente accettato, il che è stato sorprendente. (Sto cercando la sicurezza delle masse. :)
Mi sono imbattuto in lsyncd per attivare una sincronizzazione a livello di modifica del filesystem. Sembra intelligente ma non molto comune, e sono un po 'confuso dai vari approcci di lsyncd. Si sta usando solo lsyncd con rsync, ma sembra che questo potrebbe essere fragile per bidirezionalità poiché rsync non ha una nozione di memoria (ad es. Per sapere se un file eliminato su A deve essere eliminato su B o se si tratta di un nuovo file su B che dovrebbe essere copiato in A). lipsync sembra essere solo un'implementazione lsyncd + rsync, giusto?
Quindi sta usando lsyncd con csync2 , in questo modo: https://icicimov.github.io/blog/devops/File-system-sync-with-Csync2-and-Lsyncd/ ... Mi sto inclinando verso questo approccio, ma csync2 è un po 'strano, anche se ho fatto un test di successo. Sono principalmente preoccupato di non essere stato in grado di trovare molte conferme da parte della community di questo metodo.
Le persone qui sembrano apprezzare molto Unison, ma sembra che non sia più in fase di sviluppo attivo e non è chiaro che abbia un trigger automatico come lsyncd.
Ho visto Gluster menzionato, ma forse è eccessivo per quello che mi serve?
AGGIORNAMENTO: finalmente ho scelto la soluzione originale che ho citato: lsyncd + csync2. Sembra funzionare abbastanza bene, e mi piace l'approccio architettonico di avere i server uniti in modo molto libero, in modo che ogni server possa funzionare indefinitamente da solo, indipendentemente dalla qualità del collegamento tra di loro.