Content Sync For Load Balancer With Unison
This Unison program is great. It neatly handles syncing between two servers where changes are occurring on both sides. On one client site it takes about 30 seconds to compare/sync a 23GB /var/www/html/ structure with about 100 sites. 1) Install unison (http://www.cis.upenn.edu/~bcpierce/unison/). Requires “ocaml” compiler (http://caml.inria.fr/), and needs the “etags” command from emacs (so “yum install emacs”, whatever) 2) Set up a “/root/.unison/profile-name.prf” file. See example pasted below. Comment out “batch=true” and “silent=true” for initial test runs. Uncomment them for running from a cron job. 3) Run manually to test: unison profile-name 4) If you leave the logging turned on, make an /etc/logrotate.d/unison file, something like this:
|
1 2 3 4 5 6 7 8 9 |
/var/log/unison.log { notifempty daily rotate 7 missingok compress } |
5) Set up cron job(s). Create multiple profiles if specific paths need more frequent syncing. With silent=true, the jobs should produce no output (silent=true automatically sets batch=true). Sample profile (/root/.unison/profile-name.prf)
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
# Reasonable defaults auto=true confirmbigdeletes=true contactquietly=true fastcheck=true group=true maxthreads=20 numericids=true owner=true times=true # Dump an archive listing to ~/unison.dump #dumparchives=true # Skip confirmation batch=true # Suppress output (sets batch=true) silent=true # Run in a loop, repeating every X seconds (sort of daemon mode) #repeat=60 # Log all sync operations log=true logfile=/var/log/unison.log # Backup deleted files backup=Name * backuplocation=central backupdir=/var/www/unison-backups # Local root root=/var/www/html/ # Remote root (the double forward-slash between IP and remote path is correct) root=ssh://1.2.3.4//var/www/html/ # Resolve conflicts in favor of local root prefer=/var/www/html/ # Limit to specific relative path (can specify multiple path= params) #path=somepath/ # Don't sync (can specify multiple ignore lines) ignore=Path */var/cache |