Для быстрой синхронизации файлов между двумя серверами, когда изменения могут появиться на любом из них, прекрасно подходит связка из lsyncd и unison.
Lsyncd - это демон который слушает дерево каталогов и выполняет синхронизацию при событии (inotify или fsevents) на нём. Синхронизировать он может с помощью rsync или любым другим способом, который можно прописать у него в настройках в виде скрипта на Lua.
Unison позволяет синхронизировать файлы между серверами (или локально два различных каталога). В отличие от rsync он позволяет синхронизировать файлы одновременно в обе стороны. В качестве транспорта при синхронизации может быть использован ssh. Пример буду приводить для CentOS/RedHat, для .deb систем отличия в мелочах. Начнём с установки:
1
|
|
Далее правим конфигурационный файл lsyncd: /etc/lsyncd.conf
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
|
На втором сервере меняем имя хоста в строке вызова unison. Проверить можно запустив lsyncd в режиме nodaemon (или без этой опции и читать логи):
1
|
|
Если всё отлично завершаем и переходим к настройке запуска lsyncd под corosync. Тут есть два способа: использовать lsb ресурс corosync или написать свой ресурс агент. Я рассмотрю первый вариант. Для второго у меня на github лежит ресурс агент, но я его ещё не до конца протестировал.
Corosync lsyncd LSB ресурс.
Нам понадобится скрипт lsyncd daemon: /etc/init.d/lsyncd. Он должен входить в пакет lsyncd начиная с версии 2.1. Учитывая один момент в нём:
1 2 3 4 5 |
|
нам обязательно надо прописать опции запуска в файле /etc/sysconfig/lsyncd:
1
|
|
Опция “-log scarce” уменьшает уровень логирования. Теперь осталось добавить lsyncd в конфигурацию corosync:
1 2 |
|
На втором сервере делаем соответствующие поправки. Вот в принципе и всё. Данное решение синхронизации хорошо себя показало на высоких нагрузках. Если есть вопросы, я постораюсь помочь.