Синхронизацию на уровне файлов уже подсказали (надеюсь не забыли про то что копировать нужно с использованием снапшотов фс), ее настраивать особо сложно, если есть базы данных, так как для каждой базы свои способы и ограничения.
Существует способ организации работы, когда синхронизация идет на блочном уровне файловой системы. Например DRBD (когда несколько блочных устройств в сети настраиваются как raid1 mirror). Или файловые системы типа glusterfs, когда сетевое хранилище организуется на базе файловой системы, в догонку еще варианты типа lustre или ceph.
Если сетевое подключение не стабильно или вообще периодическое, я бы посоветовал организовать простым набором скриптов механизм репликации на базе снапшотов btrfs, с помощью
btrfs-send, этот штатный механизм позволяет получить разницу между двумя снапшотами файловой системы в виде файла (поток), отправить его на удаленную машину и там либо хранить либо применить как патч изменений к копии файловой системы, таким образом на удаленной машине будет храниться копия файловой системы с управляемым лагом.
Так как создание снапшота - атомарная операция, работа с базами данных более безопасна чем их онлайн копирование обычными средствами копирования файлов (восстановленнная копия будет работать так будто сервер был аварийно остановлен, к чему базы данных готовы и с большими шансами потери данных не будет, в противовес возможности получить кашу из перемешанных данных, если файлы будут копироваться во время записи новых данных в них)