Синхронизация файлов в реальном времени

22

Существует ли какой-либо инструмент для синхронизации файлов между двумя или более серверами Linux сразу после записи файла на диск? Команда rsyncне подходит для этого, потому что, если я установлю rsyncв cron, минимальное время, которое я могу установить, составляет 1 минуту, но оно мне нужно в режиме реального времени.

Sourav
источник
2
Вам нужна синхронизация с одного сервера чтения-записи на один или несколько серверов, доступных только для чтения, или вам нужна двусторонняя синхронизация (с распространением в обоих направлениях) или n-way? Если вы хотите двух / n-way, как вы решаете конфликты?
Жиль "ТАК - перестань быть злым"

Ответы:

18

Сам не использовал, но читал об этом недавно. Есть демон под названием lsyncd, который, я полагаю, делает именно то, что вам нужно.

Подробнее об этом ЗДЕСЬ

MelBurslan
источник
2
ИМХО, это должен быть принятый ответ. lsyncdиспользует inotify& должен быть самым быстрым на уровне фс. Больше на github.com/axkibe/lsyncd . С этой страницы: Lsyncd просматривает интерфейс монитора событий деревьев локальных каталогов (inotify или fsevents). Он объединяет и объединяет события в течение нескольких секунд, а затем запускает один (или более) процесс (ы) для синхронизации изменений. По умолчанию это rsync. Таким образом, Lsyncd - это легкое решение для живого зеркала, которое сравнительно легко установить, не требующее новых файловых систем или блочных устройств, и не снижающее производительность локальной файловой системы.
Сачин ГАРГ
5

Inotify-инструменты

Предоставить интерфейс inotify, состоящий из:

inotifywait

Эта команда просто блокирует события inotify, что делает ее подходящей для использования в сценариях оболочки. Он может просматривать любой набор файлов и каталогов, а также может рекурсивно просматривать целые деревья каталогов.

inotifywatch

Эта команда собирает статистику использования файловой системы и выводит количество каждого события inotify.

Pro Backup
источник
4

Синхронизация файлов в реальном времени между несколькими серверами в режиме нескольких мастеров

Существует хороший инструмент lsyncdдля синхронизации файлов между несколькими серверами в режиме реального времени. Здесь я попробовал с двумя серверами.

Хосты: Сервер1 и Сервер2

Используемая ОС: CentOS 7

Установите ниже пакеты на обоих серверах.

# yum install -y epel-release
# yum -y install lua lua-devel pkgconfig gcc asciidoc lsyncd

сгенерируйте ssh-ключ на обоих серверах и добавьте в authorized_keysфайл. [добавить открытый ключ server1 к server2 authorized_keysи открытый ключ server2 к authorized_keysфайлу server1 ]

Конфигурация Server1

Откройте /etc/lsyncd.confи закомментируйте конфигурацию по умолчанию, используя --в начале строки, и добавьте ниже конфигурацию в файл.

settings {
  logfile = "/var/log/lsyncd/lsyncd.log",
  delay = 1
}
sync {
  default.rsync,
  source="/home/test/public_html/",
  target="server2:/home/test/public_html/",
  rsync = {
    compress = true,
    acls = true,
    verbose = true,
    owner = true,
    group = true,
    perms = true,
    rsh = "/usr/bin/ssh -p 22 -o StrictHostKeyChecking=no"
  }
}

Измените целевой IP в targetпараметре.

Вы можете изменить delayпараметр согласно вашему требованию. Здесь установлено 1 секунда.

Теперь создайте каталог журналов.

# mkdir -p /var/log/lsyncd

Включите lsyncdсервис для автоматического запуска.

# systemctl enable lsyncd.service

Запустите сервис.

# systemctl start lsyncd.service

Конфигурация Server2

Следуйте той же конфигурации, что и Server1, и измените targetIP.

Теперь синхронизация установлена.

Вы можете проверить активность от tailf /var/log/lsyncd/lsyncd.log

Спасибо MelBurslan за его предложение.

Sourav
источник
Параметр задержки в функции настроек недействителен. Вместо этого используйте переменную maxDelays . Я реализовал этот инструмент. Это действительно мощный.
Хасануззаман Саттар
3

Синхронизация может быть вариантом. Это очень быстро, передача зашифрована и есть клиенты для нескольких платформ. Он использует «inotify» для мгновенной синхронизации измененных файлов.

ням
источник
2

Вам нужно будет подойти к этому с помощью решения типа кластеризованной файловой системы - простая синхронизация между двумя компьютерами не даст вам ответа в реальном времени.

Джон
источник
На самом деле эти серверы на AWS. Таким образом, мы не можем получить кластерную среду! Разве нет другого пути?
Сурав