Есть каталог /home/user1/filedata на server1 и каталог /home/user2/filedata на server2. В любой из этих каталов извне сохраняются данные. Задача стоит засинхронизировать содержимое этих каталогов.
В ядре linux есть механизм inotify - который позволяет отслеживать изменения в файловой системе. Для использования этого механизма установим пакет inotify-tools
Теперь для обработки событий , связанных с изменением в наших каталогах воспользуемся следующей конструкцией:
inotifywait -r -e create,attrib,delete,modify,move /home/user1/filedata/
где -r просматривать каталог рекурсивно
-e create,attrib,delete,modify,move слушать следующие события
для передачи изменений воспользуемся программой rsync. Так как сервера находятся в интернете, то данные между ними передавать будем по протоколу ssh.
А так как желательно запуск синхронизации оформить в виде демона сгенерируем ключи доступа от пользователей root на серверах:
server1@root#mkdir .ssh
генерируем ключ без пароля
server1@root#ssh-keygen -t rsa
и отправим открытый ключ пользователю другого сервера
server1@root#ssh-copy-id -i .ssh/id_rsa.pub user2@server2
и на втором сервере:
server2@root#mkdir .ssh
server2@root#ssh-keygen -t rsa
server2@root#ssh-copy-id -i .ssh/id_rsa.pub user1@server1
можем проверить как , как работет rsync через ssh:
server1@root#rsync -e 'ssh -p 22' -avzp --delete /home/user1/filedata/ user2@server2:/home/user2/filedata/
и в обратную сторону:
server2@root#rsync -e 'ssh -p 22' -avzp --delete /home/user2/filedata/ user1@server1:/home/user1/filedata/
Теперь оформим эту всю красоту в виде демонов
создадим в /etc/init.d/ файлик sshync следующего содержания:
#!/bin/sh
while inotifywait -r -e create,attrib,delete,modify,move /home/user1/filedata/;do
rsync -e 'ssh -p 22' -avzp --delete /home/user1/filedata/ user2@server2:/home/user2/filedata/
done
А в /etc/init создадим файл sshync.conf :
description "syncronisation filedata"
start on runlevel [2345]
stop on runlevel ![2345]
respawn
exec /etc/init.d/sshync
Теперь можем создать символические ссылки в скриптах запуска:
update-rc.d sshync start 70 2 3 4 5 . stop 20 0 1 6 .
Можем стартовать сервисы. Протокол работы сервиса в /var/log/upstart/sshync.log
Чтобы все работало корректно, внешние изменения в каталоги filedata должны осуществляться с правами user1 и user2 соответственно
Комментариев нет:
Отправить комментарий