Синхронизация файлов по FTP

Статус
В этой теме нельзя размещать новые ответы.

Veditos

Полезный
Регистрация
1 Сен 2008
Сообщения
150
Реакции
19
Извиняюсь, возможно запостил вопрос не в тот раздел.
Стоит задача - настроить автоматическую синхронизацию файлов и папок между двумя серверами. На одном сервере стоит Ubuntu Linux, на втором FreeBSD. Хотелось бы реализовать это напрямую между двумя серверами.
Кто что может посоветовать? Какие есть для этого решения?
 
можно очень просто это сделать
crond + rsync
 
Их нужно запускать только с одной стороны? Если изменения будут призводиться только на одном сервере?
 
Да, там откуда надо сливать.
Или надо синхронизировать в обе стороны?
 
не помню за опцию, но думаю в мане все это есть. Если не может в обе стороны синхрить(в чем я сомневаюсь), то можно два скрипта один в одну, другой в другую )))

Rsync - современный способ синхронизации файлов

Итак, для чего нужен RSync?

RSync — был разработан как замена старой команды rcp. С помощью которой производилось копирование файлов между машинами UNIX-систем. RSync очень удобен, так как его алгоритм построен так, что он отслеживает как изменился файл и копирует только необходимые части. Причём для выявления изменений, ему не надо сравнивать два файла. И работает это очень быстро.

Кроме того, очень полезным будет его способность работать через ssh. Что обеспечивает шифрование канала, что очень важно, если вы синхранизируете два сервера в сети интернет. Для уменьшение трафика, rsync так-же умеет сжимать данные, при передаче по сети. Это очень мощная утилита, и надо быть с ней осторожным, с её помощью можно испортить данные.

Мы будем рассматривать rsync как средство синхронизации файлов между серверами, а не как систему раздачи файлов. В первом случае мы используем ssh, а во втором нам необходимо запускать сервер rsync.

Разберём на примере:

rsync -e ssh --progress -lzuogthvr --compress-level=9 \
--delete-after root@<MASTER SERVER>:/home/<USER> /home/

или

rsync -e ssh --progress -lzuogthvr --compress-level=9 \
--delete-after /home/<USER> root@<MASTER SERVER>:/home/

зависит от того, в какую сторону синхронизируем файлы

Обратите внимание на последний слеш, так как он имеет значение для rsync. Если на конце исходной директории стоит «/», то это означает копирование содержимого директории; отсутствие слеша означает копирование директории и ее содержимого.

Ключи:

* e — заменяет протокол с rsh на ssh

* progress — вывод хода процесса работы на терминал
* l — пересоздание symlinks, это значит, что символические ссылки будут так же переноситься

* z — использовать сжатие
* u — update. Обновление, он будет пропускать файлы которые новей, чем на удалённом сервере

* o — установить владельца конечного файла таким же, как и у исходного
* g — установить группу конечного файла таким же, как и у исходного

* t — передача времени модификации и его обновление на удаленной системе. Этот ключ должен быть установлен для точной синхронизации
* h — вывод информации на терминал в удобном для чтения (human-readable) виде

* v — verbose. Вывод сообщений в терминал.
* r — рекурсивный режим

* n — отладочный режим
* compress-level — уровень сжатия

* delete-after — удалять файлы, которые не были найдены на удалённом сервере, “-after” означает, что удалить их нужно, только после окончания синхранизации. Так-же есть delete-before, delete-during, delete-excluded и просто delete

отладочный режим
Перед тем как запустить скрипт на рабочей машине, опробуйте всё в отладочном режиме, для этого используется ключь “-n”. В этом случае, rsync

не будет менять или удалять файлы, но покажет, весь ход работы.

исключение файлов
RSync может как исключать, так и включать файлы, по заданному шаблону. Например —exclude *.run исключит все файлы с расширением run.
 
Всё красиво... Но есть одно большое НО. Если файл используется, то каковы вы будут ваши действия? Тоесть если надо синхронизировать два файловых хранилища, которые постоянно используться, и есть открытые файлы. Если файл как минимум не заблокируется, то при одновременно открытом файле у 2- пользователей в итоге получим тот, кто последний сохранит.

Это не вариант. Продолжу свою мысль. При rsync по сети мы имеем фактически два хранилища. Блокировками файла управляет ОС на каждом своем хранилище. Тоесть что бы такая система работала необходимо что бы, когда открыт файл в 1 хранилище, во втором хранилище этот файл был заблокирован, и доступен только для чтения!
 
Всё красиво... Но есть одно большое НО. Если файл используется, то каковы вы будут ваши действия? Тоесть если надо синхронизировать два файловых хранилища, которые постоянно используться, и есть открытые файлы. Если файл как минимум не заблокируется, то при одновременно открытом файле у 2- пользователей в итоге получим тот, кто последний сохранит.

Это не вариант. Продолжу свою мысль. При rsync по сети мы имеем фактически два хранилища. Блокировками файла управляет ОС на каждом своем хранилище. Тоесть что бы такая система работала необходимо что бы, когда открыт файл в 1 хранилище, во втором хранилище этот файл был заблокирован, и доступен только для чтения!

все будет шоколадно )
в данный момент rsync заберет файл как есть, при сл синхре забере уже новый. Даже если в этот файл постоянно что-то будет писаться. ему все равно. только что сам проверял, чтобы убедиться. Еще могу даже больше сказать, что есть решения которые используют rsync как бекап данных. Что в принцыпе похоже на синхронизацию. Есть еще один момент. К примеру в папке, Которую надо синхронизировать есть три файла, но после первой синхронизации кто-то удалил один файл и уже там два файла. В rsynct есть опция, котороя может при синхронизации удалять файлы и приводить оба каталога к одинаковому состоянию ПРоще всего прочитать ман и побаловаться с натсройками.
т.е. при синхронизации всегда есть потеря информации, т.к. это не репликация данных.
 
Небольшой готовый скрипт для backup. Юзается rsync и cron.
#!/bin/sh
DATE=`date "+%Y-%m-%d"`
LOCAL_PATH="/Users/jimmy/Documents/"
REMOTE_HOST="jimmy@localhost"
REMOTE_PATH="/Users/jimmy/backup/"
EXCLUDE="--exclude=OpenTTD/ --exclude=.DS_Store"
rsync -e "ssh -p 22" -av --delete-after ${EXCLUDE} --backup
--backup-dir="${REMOTE_PATH}/${DATE}/" ${LOCAL_PATH}
${REMOTE_HOST}:${REMOTE_PATH}/current/
ssh работает на ключах - пароля не требуется.
 
  • Нравится
Реакции: Akme
Народ предложивший rsync - название темы читаем? :D С каких пор rsync стал работать по ftp. В инете я не разу ни видел. Вы предлагаете обертку над ssh.

Есть только специальные программы для синхронизации по ftp - под Linux к сожалению не видел (.
 
Да, там откуда надо сливать.
Или надо синхронизировать в обе стороны?
Мне достаточно синхронизировать только в одну сторону.

EugeneVC написал(а):
Есть только специальные программы для синхронизации по ftp - под Linux к сожалению не видел (.

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