Lsyncd is awesome tool to make backup of home files or other directory we define to another server. It duplicates files with rsync. When there are changes or new files in home directory of master server, lsyncd will automatically in real time duplicates files to slave or subordinate server.

Here I share how to install and configure Lsyncd with 2 servers:

Ingredients

  1. Two servers with two IP Addreses (Server A and Server B)
  2. Linux OS: Centos 6 or 7.
  3. Software SSH tool (Putty or Bitvise SSH).

Paswordless SSH

On master server (Server A), input this command:

ssh-keygen -t rsa

It will creates file with extension .pub in directeory /root/.ssh/. Usually named with id_rsa.pub.

Copy id_rsa.pub from /root/.ssh with SFTP and paste it to Slave Server (Server B) into directory /root/.ssh.

After paste the .pub file, run this command in the Slave Server:

cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys 

From Master Server do login to Slave server with SSH command:

ssh [email protected] (change the IP with slave server IP).

Choose Yes to generate keys, and now Server A can do SSH login to Server B without password.

Install Lsyncd

Still in Master Server, do install dependencies:

yum -y install lua lua-devel pkgconfig gcc asciidoc

Install lsyncd:

cd /var/tmp
wget http://lsyncd.googlecode.com/files/lsyncd-2.1.5.tar.gz
tar xzvf lsyncd-2.1.5.tar.gz
cd lsyncd-2.1.5
./configure && make && make install

Configurate Lsyncd

We need to make new file to configurate Lsyncd:

nano /etc/init.d/lsyncd

Paste this code:

#!/bin/bash
	#
	# lsyncd: Starts the lsync Daemon
	#
	# chkconfig: 345 99 90
	# description: Lsyncd uses rsync to synchronize local directories with a remote
	# machine running rsyncd. Lsyncd watches multiple directories
	# trees through inotify. The first step after adding the watches
	# is to, rsync all directories with the remote host, and then sync
	# single file buy collecting the inotify events.
	# processname: lsyncd

	. /etc/rc.d/init.d/functions

	config="/etc/lsyncd.lua"
	lsyncd="/usr/local/bin/lsyncd"
	lockfile="/var/lock/subsys/lsyncd"
	pidfile="/var/run/lsyncd.pid"
	prog="lsyncd"
	RETVAL=0

	start() {
    	if [ -f $lockfile ]; then
        	echo -n $"$prog is already running: "
        	echo
        	else
        	echo -n $"Starting $prog: "
        	daemon $lsyncd -pidfile $pidfile $config
        	RETVAL=$?
        	echo
        	[ $RETVAL = 0 ] && touch $lockfile
        	return $RETVAL
    	fi
	}
	stop() {
    	echo -n $"Stopping $prog: "
    	killproc $lsyncd
    	RETVAL=$?
    	echo
    	[ $RETVAL = 0 ] && rm -f $lockfile
    	return $RETVAL
	}
	case "$1" in
    start)
        start
        ;;
    stop)
        stop
        ;;
    restart)
        stop
        start
        ;;
    status)
        status $lsyncd
        ;;
    *)
        echo "Usage: lsyncd {start|stop|restart|status}"
        exit 1
    esac
    
    exit $?

Give executable permission:

chmod 775 /etc/init.d/lsyncd

Create log rotation directory:

mkdir /var/log/lsyncd

Configure log rotation file:

nano /etc/logrotate.d/lsyncd

Paste this code:

cat << EOF > /etc/logrotate.d/lsyncd
 	 /var/log/lsyncd/*log {
    	 missingok
    	 notifempty
    	 sharedscripts
    	 postrotate
    	 if [ -f /var/lock/lsyncd ]; then
        	/sbin/service lsyncd restart > /dev/null 2>/dev/null || true
    	 fi
    	 endscript
	 }
	 EOF

Then, make main configuration to sync files:

nano /etc/lsyncd.lua

Paste this code:

settings  {
    statusFile = "/tmp/lsyncd.stat",
    statusInterval = 1,
            pidfile = "/var/run/lsyncd.pid",
            logfile = "/var/log/lsyncd/lsyncd.log",
}

sync {
    default.rsync,
    source="/var/www",
    target="ip-10-10-10-10:/var/www",
    rsync = {
    compress = true,
    acls = true,
    verbose = true,
    owner = true,
    perms = true,
    group = true,
    
    rsh = "/usr/bin/ssh -p 22 -o StrictHostKeyChecking=no"

    }
}

Note: Do not forget to change source and destination directory to your home directory and IP Address of your Slave Server.

Start Lsyncd

/etc/rc.d/init.d/lsyncd start

Use this command to lsyncd run on startup:

chkconfig lsyncd on

Now, do test with creating new files in Master Server:

nano /var/www/test.txt

And input some text. And finish, Server A will automatically duplicate test.txt to Server B. You can check it via SFTP.**