Новости из Блогов Синхронизация файлов на хостах локальной сети и резервное копирование с пом-ю Unison

Discussion in 'Мировые новости. Обсуждения.' started by VY_CMa, 19 Dec 2012.

  1. VY_CMa

    VY_CMa Green member

    Joined:
    6 Jan 2012
    Messages:
    917
    Likes Received:
    492
    Reputations:
    724
    Синхронизация файлов на хостах локальной сети и резервное копирование с помощью утилиты Unison

    Описание: В статье рассматривается применение утилиты Unison для выполнения повседневных задач синхронизации файлов и папок между хостами локальной сети, а также для организации процесса резервного копирования.

    Введение
    Даже в небольших локальных сетях рано или поздно возникает проблема синхронизации содержимого файлов и папок на двух и более компьютерах. Опытный и аккуратный пользователь вполне может обойтись хорошо известной утилитой rsync. Вне всякого сомнения rsync является великолепным инструментом, подтверждающим свою репутацию уже в течение многих лет в мире Unix, тем не менее и у него есть один небольшой недостаток: односторонняя синхронизация. Разумеется, можно написать хитроумные shell-скрипты с использованием rsync, осуществляющие корректную синхронизацию в обоих направлениях, но можно в качестве альтернативного решения использовать программу Unison.

    Unison использует достаточно эффективный подход к синхронизации, в чём-то схожий с подходом rsync, но работающий в двух направлениях. По словам авторов программы, «Unison – это инструмент синхронизации файлов для Unix и Windows-систем. Он позволяет хранить два варианта наборов файлов и каталогов на разных хостах (или на различных дисках одного и того же хоста), изменяемых по отдельности, независимо друг от друга, и в дальнейшем время от времени полностью синхронизировать их, перенося изменённые объекты между этими наборами».

    Автором и лидером проекта является Бенджамин Пирс (Benjamin Pierce). В проектировании и разработке последних версий также приняли активное участие Тревор Джим (Trevor Jim) и Джером Вуийон (Jérôme Vouillon). Справедливости ради, следует отметить, что проект Unison развивается не слишком интенсивно: последняя стабильная версия 2.40.61 датирована 2009 годом, хотя в настоящее время в разработке находится бета-версия 2.45.4.

    Решение практических задач с помощью Unison
    Различные аспекты и тонкости использования программы Unison на уровне пользователя подробно описаны в документации http://www.cis.upenn.edu/~bcpierce/unison/download/releases/stable/unison-manual.html, поэтому более полезным станет рассмотрение решения конкретной практической задачи, например, синхронизации содержимого каталогов /var/www двух http-серверов.

    Допустим, что в локальной сети существует сервер srv_a.home.lan с IP-адресом 192.168.3.101 и сервер srv_z.home.lan с IP-адресом 192.168.3.111. Задача состоит в том, чтобы периодически сихронизировать так называемый "контент" серверов, то есть содержимое файлов и подкаталогов, расположенных в /var/www.

    Программа Unison должна быть установлена на обоих серверах. Установка не должна вызывать каких-либо затруднений, поскольку пакет Unison включён в репозитории большинства современных дистрибутивов. Важно только проследить за тем, чтобы версии устанавливаемых пакетов полностью совпадали. Кроме того, требуется наличие на серверах установленных пакетов openssh-server и ssh (так именуются пакеты в Debian, в других дистрибутивах наименования пакетов могут отличаться от указанных), поскольку синхронизацию лучше всего проводить по протоколу SSH из соображений безопасности. Вообще говоря, последнее требование не является обязательным, так как Unison может проводить операции синхронизации и через незащищённые соединения.

    Подготовка: создание пары ключей "секретный/открытый" на одном из серверов
    Прежде всего необходимо сгенерировать пару "секретный ключ – открытый ключ" на одном из серверов, в данном случае пусть это будет srv_a.home.lan. Операция генерации ключей показана в листинге 1.

    Листинг 1. Создание пары "секретный ключ – открытый ключ" на сервере srv_a.home.lan
    Code:
    root@srv_a:~# ssh-keygen -t dsa
    Generating public/private dsa key pair.
    Enter file in which to save the key (/root/.ssh/id_dsa): 
    Enter passphrase (empty for no passphrase): 
    Enter same passphrase again: 
    Your identification has been saved in /root/.ssh/id_dsa.
    Your public key has been saved in /root/.ssh/id_dsa.pub.
    The key fingerprint is:
    d4:6f:ec:ec:5c:a6:63:af:73:97:e6:1d:f5:ad:d1:95 root@srv_a.home.lan
    The key's randomart image is:
    +--[ DSA 1024]----+
    |                 |
    |         .       |
    |        . .      |
    |       .   o    .|
    |        S   +  Eo|
    |           +   .=|
    |            o +.=|
    |           o++.=+|
    |           .=*=o.|
    +-----------------+
    root@srv_a:~#
    
    Здесь важно отметить, что в ответ на предложение ввести контрольную фразу (passphrase) необходимо просто нажать клавишу Enter, то есть не вводить никакого значения для этого параметра. Это делается для того, чтобы в дальнейшем исключить участие пользователя в процессе синхронизации.

    Далее нужно скопировать сгенерированный открытый ключ на сервер srv_z.home.lan. Команда и все последующие действия и результаты показаны в листинге 2.

    Листинг 2. Передача открытого ключа на сервер srv_z.home.lan
    Code:
    root@srv_a:~# ssh-copy-id -i $HOME/.ssh/id_dsa.pub [email protected]
    The authenticity of host '192.168.3.111 (192.168.3.111)' can't be established.
    RSA key fingerprint is 42:53:b6:a8:bf:3f:e2:fa:5a:98:62:53:53:07:68:6c.
    Are you sure you want to continue connecting (yes/no)? <<yes>>
    Warning: Permanently added '192.168.3.111' (RSA) to the list of known hosts.
    [email protected]'s password: <<пароль root на srv_z>>
    root@srv_a:~#
    
    К листингу 2 необходимо сделать замечание: сообщение о невозможности установить соединение и предложение продолжить процесс установления данного соединения появляются только в том случае, если соединение с сервером srv_z устанавливается в первый раз. Поэтому на вопрос о продолжении установления соединения следует ответить "yes", как показано в листинге 2.

    Для проверки работоспособности соединения можно зарегистрироваться на сервере srv_z с помощью команды:
    Code:
    ssh [email protected]
    и проверить в каталоге .ssh наличие файла authorized_keys, а также его содержимое командой:
    Code:
    cat $HOME/.ssh/authorized_keys
    Открытый ключ, сгенерированный операциями, показанными в листинге 1, и скопированный на сервер srv_z (см. листинг 2), показан в листинге 3.
    Code:
    ssh-dss AAAAB3NzaC1kc3MAAACBAN0OwIDClgmVQkqwWlyiLlWuQnvKHcmNheye+1OVyshnw7WZmMvRw
    6K8dTgfKQWDPSkE47jvIhfRKYngqvOTqv5gjoShJngJrPk7bFL3CoO/Z74n6mqX6REzJ3SRP1c+rrIAz/
    sYSA4mLXxvjLpyqOZ8xOGpeyxrSByHRfiKPCmbAAAAFQCIwJoWjJpOWFoEkHfo6pNoZcMb2QAAAIBK3P0
    M0hBjhOMVqKpTdOcgL4605gbhEGRcOiEnpjX6aycVP3NT4wEzZzGX4e2kton24gLCwqiwFVYbmau/tAEd
    jAhRO5K5mFAQu9Aax44fjguIXVG31AKIdDuHiO5uxaSVSx4IuROcirwcbnhZgIi5ohXNlxO2jSmFFlMZF
    JwYYgAAAIARoYmqC9f11Hr8WpWoFl6yCR3I3yKJ39HjpVhqSh6sgSB3eZasKu5N20Y6YUKxaDoFZ+4mc9
    SEtfbei3Ondmi9fKGjojLtBwMpFJ2tvE+dk3UeY/Wb+yb5Cx9fja+SA5IA4UsEVaSkJNsSKFqMhAZgzle
    JGfBFvDboPVdw11E/2g== root@srv_a.home.lan
    Ключи авторизации созданы, теперь можно начинать работу.

    Запуск Unison и выполнение операции синхронизации
    Для синхронизации определённых каталогов выполняется следующая команда:
    Code:
    unison /var/www ssh://192.168.3.111//var/www
    Процесс выполнения этой команды показан в листинге 4.

    Листинг 4. Операция синхронизации с помощью Unison
    Code:
    root@srv_a~# unison /var/www ssh://192.168.3.111//var/www
    Contacting server...
    Connected [//srv_a.home.lan//var/www -> //srv_z.home.lan//var/www]
    Looking for changes
    Warning: No archive files were found for these roots, whose canonical names are:
            /var/www
            //srv_z.home.lan//var/www
    This can happen either
    because this is the first time you have synchronized these roots,
    or because you have upgraded Unison to a new version with a different
    archive format.
    Update detection may take a while on this run if the replicas are large.
    ...
    ...
    Waiting for changes from server|webalizer
    Reconciling changes
    local          srv_z.home.lan
    dir    --->    apps [f]
    file   --->    index.html [f]
    link   --->    ispconfig [f]
    dir    --->    php-fcgi-scripts/apps [f]
    dir    --->    webalizer [f]
    link   --->    webmail [f]
    Proceed with propagating updates? [y/n] <<y>>
    Propagating updates
    UNISON 2.27.57 started propagating changes at 18:43:29 on 17 May 2012
    [BGN] Copying apps from /var/www to //srv_z.home.lan//var/www
    [BGN] Copying index.html from /var/www to //srv_z.home.lan//var/www
    [BGN] Copying ispconfig from /var/www to //srv_z.home.lan//var/www
    ...
    [END] Copying ispconfig
    [END] Copying apps
    [END] Copying index.html
    ...
    UNISON 2.27.57 finished propagating changes at 18:43:30 on 17 May 2012
    Saving synchronized state
    Synchronization complete at 18:43:30 (6 items transferred, 0 skipped, 0 failed)
    root@srv_a~#
    
    В листинге 4 для экономии места пропущены некоторые информационные сообщения, выводимые программой Unison в процессе работы.

    Автоматизация выполнения операции синхронизации
    Поскольку синхронизация содержимого каталогов серверов должна происходить без участия пользователя, необходимо исключить все элементы этой операции, которые требуют интерактивности. В первую очередь, следует создать файл, содержащий требуемые параметры синхронизации, в данном случае /root/.unison/default.prf. Для расматриваемого здесь примера файл default.prf приведён в приложении к данной статье.

    А для того, чтобы полностью автоматизировать процесс конфигурации, необходимо создать задание для планировщика cron, выполнив команду crontab -e и напечатав, например, следующую строку:
    Code:
    * */1 * * * /usr/bin/unison &> /dev/null
    После этого синхронизация каталогов на заданных серверах будет выполняться каждый час.

    Возможности резервного копирования с помощью Unison
    Описанным выше способом можно выполнять операции резервного копирования как в пределах одного хоста, так и между различными хостами локальной сети. Кроме того, Unison позволяет выполнять операции не только суперпользователю root, но и рядовым пользователям в пределах отведённого им пространства. Для удобства менее опытных пользователей существует графическая оболочка для программы Unison, позволяющая без затруднений выполнять синхронизацию буквально в несколько щелчков кнопкой мыши.

    Заключение
    В данной статье рассматривался процесс синхронизации объектов файловых систем на хостах локальной сети с помощью программы Unison, подробно описаны операции, выполняемые в ходе этого процесса. Unison вполне способен стать повседневным инструментом любого пользователя для синхронизации и резервного копирования файлов и каталогов.

    Автор: Алексей Снастин, независимый разработчик ПО, начальник отдела
    Дата: 18.12.2012
    http://www.ibm.com/developerworks/ru/library/l-Unison_edited/
     
    _________________________
Loading...