Окунев Дмитрий Юрьевич

Updated for clsync-0.4

1 -++ Введение 1 +++ Введение
2 - 2 +
3 -Нередко могут возникать ситуации, требующие атомарной синхронизации используемых файловых данных. В качестве утрированного примера представить, что имеется большая директория «/var/www» и необходимо перенести её содержимое на другой сервер в целостном виде без долгой сервисов. 3 +Нередко могут возникать ситуации, требующие атомарной синхронизации используемых файловых данных. В качестве утрированного примера представить, что имеется большая директория «/var/www» и необходимо перенести её содержимое на другой сервер в целостном виде без долгой сервисов.
4 - 4 +
5 -Многие администраторы в таких случаях применяют циклический rsync, в результате работы которого ОС накапливают дисковый кеш, в результате чего последующие итерации rsync выполняются всё быстрее и быстрее. После того, как время досинхронизации станет достаточно малым, чтобы downtime таких масштабов был допустим, работу сервисов (использующих «/var/www») останавливают, дожидаются дополнительной итерации rsync, после чего запускают сервисы уже на другом узле. 5 +Многие администраторы в таких случаях применяют циклический rsync, в результате работы которого ОС накапливают дисковый кеш, в результате чего последующие итерации rsync выполняются всё быстрее и быстрее. После того, как время досинхронизации станет достаточно малым, чтобы downtime таких масштабов был допустим, работу сервисов (использующих «/var/www») останавливают, дожидаются дополнительной итерации rsync, после чего запускают сервисы уже на другом узле.
6 - 6 +
7 -Однако данный метод обладает достаточно ограниченной применимостью. Дискового кеша или других ресурсов может оказаться недостаточным, чтобы время итерации rsync сократилось до приемлемых величин. 7 +Однако данный метод обладает достаточно ограниченной применимостью. Дискового кеша или других ресурсов может оказаться недостаточным, чтобы время итерации rsync сократилось до приемлемых величин.
8 - 8 +
9 -Предполагается, что rsync администратор способен настроить самостоятельно, поэтому подробности его настройки в данном тексте не рассматриваются. 9 +Предполагается, что rsync администратор способен настроить самостоятельно, поэтому подробности его настройки в данном тексте не рассматриваются.
10 - 10 +
11 -++ Решение 11 +++ Решение
12 - 12 +
13 -Решение достаточно простое: 13 +Решение достаточно простое:
14 - 14 +
15 - ionice -c 3 clsync --exit-on-no-events=1 --max-iterations=20 --exit-hook=/root/stop-here-start-there.sh --mode=rsyncshell --ignore-exitcode=23 --retries=3 -W /var/www -S /root/rsync.sh -L /dev/shm/clsync 15 + ionice -c 3 clsync --exit-on-no-events=1 --max-iterations=20 --pre-exit-hook=/root/stop-here.sh --exit-hook=/root/start-there.sh --mode=rsyncdirect --ignore-exitcode=23,24 --retries=3 -W /var/www -S rsync -L /dev/shm/clsync -- %RSYNC-ARGS% /var/www/ rsync://clsync@другой_узел/var/www/
16 - 16 +
17 -Далее создаём /root/rsync.sh примерно следующего содержания: 17 +clsync произведёт полную синхронизацию, после чего будет отлавливать изменения на файловой системе внутри «/var/www» и производить досинхронизации только по нужным файлам/директориям. Досинхронизации прекратятся как только будет нéчего синхронизировать (за время последней досинхронизации ничего не изменилось) или завершится 20-ая итерации синхронизации (чтобы процесс не длился вечно).
18 - 18 +
19 - exec rsync --password-file="/root/rsync.pass" -aHv --timeout=3600 --delete-before --exclude-from="$4" --include-from="$3" --exclude='*' /var/www/ rsync://clsync@другой_узел/var/www/ 2>/tmp/clsync-rsync-"$LABEL"-brother.err 19 +Перед последней итерацией синхронизации clsync запустит скрипт «/root/stop-here.sh». Преподалается, что в данном скрипте будет производиться остановка сервиса на данном сервере (например «/etc/init.d/apache2 stop»).
20 - 20 +А уже после последней итерации синхронизации clsync запустит скрипт «/root/start-there.sh». Предполагается, что в данном скрипте будет производится запуск сервиса на удалённом сервере (например «ssh rootuser@другой_узел /etc/init.d/apache2 start»).
21 -clsync произведёт полную синхронизацию, после чего будет отлавливать изменения на файловой системе внутри «/var/www» и производить досинхронизации только по нужным файлам/директориям. Досинхронизации прекратятся как только будет нéчего синхронизировать (за время последней досинхронизации ничего не изменилось) или завершится 20-ая итерации синхронизации (чтобы процесс не длился вечно). 21 +
22 - 22 +Таким образом downtime будет равняться времени:
23 -После окончания синхронизаций clsync запустит скрипт «/root/stop-here-start-there.sh». Предполагается, что в данном скрипте будет описан сценарий остановки сервисов на старом узле и их запуска на новом узле. Таким образом downtime будет минимизирован. 23 + времени отработки stop-here.sh +
24 - 24 + последней досинхронизации (событий отловленных по inotify) +
25 -Установить clsync можно следующим образом: 25 + времени отработки start-there.sh
26 - 26 +
27 - # Debian 27 +Установить clsync можно следующим образом:
28 - apt-get install clsync 28 +
29 - 29 + # Debian
30 - # Gentoo 30 + apt-get install clsync
31 - layman -a bircoph 31 +
32 - emerge --sync 32 + # Gentoo
33 - emerge =app-admin/clsync-0.3 33 + layman -a bircoph
34 - 34 + emerge --sync
35 - # FreeBSD 35 + emerge =app-admin/clsync-0.4
36 - git clone https://github.com/xaionaro/clsync 36 +
37 - cd clsync/freebsd/usr/ports/sysutils/clsync && make install 37 + # FreeBSD
38 - 38 + git clone https://github.com/xaionaro/clsync
39 - # Other 39 + cd clsync/freebsd/usr/ports/sysutils/clsync && make install
40 - pushd /tmp 40 +
41 - git clone https://github.com/xaionaro/clsync 41 + # Other
42 - cd clsync 42 + pushd /tmp
43 - autoreconf -fi 43 + git clone https://github.com/xaionaro/clsync
44 - ./configure 44 + cd clsync
45 - make install 45 + autoreconf -fi
46 - 46 + ./configure
  47 + make install