Showing
1 changed file
with
47 additions
and
46 deletions
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 |
-
Please register or login to post a comment