Настройка Unison синхронизации файлов между двумя серверами на Ubuntu 11.10

Звезда не активнаЗвезда не активнаЗвезда не активнаЗвезда не активнаЗвезда не активна
 

UbuntuВ этом учебнике показано, как настроить синхронизацию файлов между двумя Ubuntu 11.10 серверами с Unison. Unison представляет собой файл-инструмент синхронизации похож на Rsync, но большой разницей в том, что он отслеживает / синхронизирует изменения в обоих направлениях, то есть файлы, измененные на server1 будет реплицироваться на server2, и наоборот.

Я не даю никаких гарантий, что это будет работать для Вас!

Предварительные замечания

В этом уроке я использую следующие два Ubuntu 11,10 серверов:

  • server1.example.com с IP адресом 192.168.0.100
  • server2.example.com с IP-адресом 192.168.0.101

Я хочу, чтобы синхронизировались каталоги /var/www между двумя серверами. Я буду баллотироваться Unison в качестве корневого пользователя в этом уроке, так что Unison имеет достаточные права для синхронизации пользователей и групп разрешений.

Я выполняю все шаги в этом учебнике с привилегиями суперпользователя, поэтому убедитесь, что Вы вошли в систему с правами администратора:

  • sudo su

Установка Unison

server1/server2:

Unison должен быть установлен на обоих серверах: server1 и server2, а так как мы соединяемся с server1 на server2 используя SSH, мы также должны иметь SSH пакеты. Это может быть достигнуто следующим образом:

  • apt-get install unison openssh-server ssh

Создание Private / Public ключей пар на server1

server1:

Теперь мы создадим Private / Public ключ пары на server1.example.com :

  • ssh-keygen -t dsa
root@server1:~# ssh-keygen -t dsa
Generating public/private dsa key pair.
Enter file in which to save the key (/root/.ssh/id_dsa): - ENTER
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase): - ENTER
Enter same passphrase again: - ENTER
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:
32:0f:f5:49:f0:32:f8:d0:63:8d:44:88:a5:12:f9:73 Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра.
The key's randomart image is:
+--[ DSA 1024]----+
|  .. o.o+        |
|  .....+ =       |
|  ... o O +      |
|   .o E= * .     |
|     o+ S o      |
|       =         |
|        .        |
|                 |
|                 |
+-----------------+
root@server1:~#

Важно, чтобы Вы не ввели ключевую фразу иначе зеркальное не будет работать без вмешательства человека так просто нажмите ENTER! Далее, мы копируем наш открытый ключ server2.example.com (обратите внимание, что root учетная запись должна быть включена на server2.example.com, и что root логин должн быть разрешен. Чтобы включить root войдите в систему Ubuntu, запустите:

  • sudo passwd root

Чтобы проверить, если root логин разрешен, проверите директивы PermitRootLogin в /etc/ssh/sshd_config - впоследствии Вам, возможно, придется перезапустить демон SSH.

  • ssh-copy-id -i $HOME/.ssh/id_dsa.pub Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра.
root@server1:~# ssh-copy-id -i $HOME/.ssh/id_dsa.pub Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра.
The authenticity of host '192.168.0.101 (192.168.0.101)' can't be established.
ECDSA key fingerprint is a2:38:f3:df:7a:6c:b6:3c:d6:c3:9c:88:93:e2:f0:63.
Are you sure you want to continue connecting (yes/no)? - yes (you will see this only if this is the first time you connect to server2)
Warning: Permanently added '192.168.0.101' (ECDSA) to the list of known hosts.
Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра.'s password: - server2 root password
Now try logging into the machine, with "ssh Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра.'", and check in:

  ~/.ssh/authorized_keys

to make sure we haven't added extra keys that you weren't expecting.

root@server1:~#

Теперь посмотрите на server2 если server1 открытый ключ правильно были переданы:

server2:

  • cat $HOME/.ssh/authorized_keys
ssh-dss AAAAB3NzaC1kc3MAAACBAJgYGqpkEPBIV/Uiygz2FbOwCE9ggjXQK8anG/VxaTqH0KhZR+oL1i+Av2aZmK/D3msUQEkqClO51jarQXbm9i7ie7Y6OwQ4G8DBZXzy8A8nQ6V1bEikqif8xmmSayqVKPvHXMv3yINteUdCNYBHAuci1NB5iAf3Gmt/bo5SRpU1AAAAFQDJnh+a6lODf+zSF2eX1L4HvQgtxwAAAIAIOdjsJkzBDseOdTMD5oVZqrrp6cy0e1846DZ4C0PKQSeT9RQqKmbOICa8t94FF8MRLdV0p4x+R8I8VHRloErQ5v1CIVvrtzOGIGAR//Bo5wPI+8lsfbsOj8ZyZI6+bF6wHKjzNFLbgFpZjnIf/CisP87GtPp8MXq3bH7SI/7i6gAAAIAfByiUkqQZ7fOM18BHTqQhopxMjhJhvrATt0PJ/k2JzQp0lQm/Z31azpvccK5GF61AwWbfQSFAGy4AOKtVXZ6ztz80sKZeDwECNFJpT6rubjsbaSX2PvacrV8sAuJI1XZPAgQTl06mJLL9dC7rNrY+2QgXoJqFtgjiFGWhCC+UjQ== Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра.

Запуск Unison

server1:

Теперь мы можем запустить Unison в первый раз для синхронизации /var/www каталога на обоих серверах. На server1 выполните команду:

  • unison /var/www ssh://192.168.0.101//var/www

Вывод будут, вроде этого - Вам возможно, придется ответить на несколько вопросов, поскольку это первый запуска Unison:

root@server1:~# unison /var/www ssh://192.168.0.101//var/www
Contacting server...
Connected [//server1.example.com//var/www -> //server2.example.com//var/www]
Looking for changes
Warning: No archive files were found for these roots, whose canonical names are:
        /var/www
        //server2.example.com//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.

Unison will assume that the 'last synchronized state' of both replicas
was completely empty.  This means that any files that are different
will be reported as conflicts, and any files that exist only on one
replica will be judged as new and propagated to the other replica.
If the two replicas are identical, then no changes will be reported.

If you see this message repeatedly, it may be because one of your machines
is getting its address from DHCP, which is causing its host name to change
between synchronizations.  See the documentation for the UNISONLOCALHOSTNAME
environment variable for advice on how to correct this.

Donations to the Unison project are gratefully accepted:
http://www.cis.upenn.edu/~bcpierce/unison

  Waiting for changes from server| webalizer
Reconciling changes

local          server2.e...
dir      ---->            apps  [f] - ENTER
file     ---->            index.html  [f] - ENTER
link     ---->            ispconfig  [f] - ENTER
dir      ---->            php-fcgi-scripts/apps  [f] - ENTER
dir      ---->            webalizer  [f] - ENTER
link     ---->            webmail  [f] - ENTER

Proceed with propagating updates? [] - y
Propagating updates


UNISON 2.32.52 started propagating changes at 14:25:02 on 09 Dec 2011
[BGN] Copying apps from /var/www to //server2.example.com//var/www
[BGN] Copying index.html from /var/www to //server2.example.com//var/www
[BGN] Copying ispconfig from /var/www to //server2.example.com//var/www
[BGN] Copying php-fcgi-scripts/apps from /var/www to //server2.example.com//var/www
[BGN] Copying webalizer from /var/www to //server2.example.com//var/www
[BGN] Copying webmail from /var/www to //server2.example.com//var/www
[END] Copying ispconfig
[END] Copying webmail
[END] Copying apps
[END] Copying webalizer
[END] Copying index.html
[END] Copying php-fcgi-scripts/apps
UNISON 2.32.52 finished propagating changes at 14:25:03 on 09 Dec 2011


Saving synchronizer state
Synchronization complete at 14:25:03  (6 items transferred, 0 skipped, 0 failed)
root@server1:~#

Проверьте /var/www каталоги на server1 и server2, и Вы увидите, что сейчас они синхронизированны. Конечно, мы не хотим запускать Unison в интерактивном режиме, поэтому мы можем создать файл настроек ( /root/.unison/default.prf ), который содержит все настройки, которые мы иначе бы указsdfkb в командной строке:

  • nano /root/.unison/default.prf
# Unison preferences file
# Roots of the synchronization
root = /var/www
root = ssh://192.168.0.101//var/www

# Paths to synchronize
#path = current
#path = common
#path = .netscape/bookmarks.html

# Some regexps specifying names and paths to ignore
#ignore = Path stats    ## ignores /var/www/stats
#ignore = Path stats/*  ## ignores /var/www/stats/*
#ignore = Path */stats  ## ignores /var/www/somedir/stats, but not /var/www/a/b/c/stats
#ignore = Name *stats   ## ignores all files/directories that end with "stats"
#ignore = Name stats*   ## ignores all files/directories that begin with "stats"
#ignore = Name *.tmp    ## ignores all files with the extension .tmp

#          When set to true, this flag causes the user interface to skip
#          asking for confirmations on non-conflicting changes. (More
#          precisely, when the user interface is done setting the
#          propagation direction for one entry and is about to move to the
#          next, it will skip over all non-conflicting entries and go
#          directly to the next conflict.)
auto=true

#          When this is set to true, the user interface will ask no
#          questions at all. Non-conflicting changes will be propagated;
#          conflicts will be skipped.
batch=true

#          !When this is set to true, Unison will request an extra
#          confirmation if it appears that the entire replica has been
#          deleted, before propagating the change. If the batch flag is
#          also set, synchronization will be aborted. When the path
#          preference is used, the same confirmation will be requested for
#          top-level paths. (At the moment, this flag only affects the
#          text user interface.) See also the mountpoint preference.
confirmbigdel=true

#          When this preference is set to true, Unison will use the
#          modification time and length of a file as a `pseudo inode
#          number' when scanning replicas for updates, instead of reading
#          the full contents of every file. Under Windows, this may cause
#          Unison to miss propagating an update if the modification time
#          and length of the file are both unchanged by the update.
#          However, Unison will never overwrite such an update with a
#          change from the other replica, since it always does a safe
#          check for updates just before propagating a change. Thus, it is
#          reasonable to use this switch under Windows most of the time
#          and occasionally run Unison once with fastcheck set to false,
#          if you are worried that Unison may have overlooked an update.
#          The default value of the preference is auto, which causes
#          Unison to use fast checking on Unix replicas (where it is safe)
#          and slow checking on Windows replicas. For backward
#          compatibility, yes, no, and default can be used in place of
#          true, false, and auto. See the section "Fast Checking" for more
#          information.
fastcheck=true

#          When this flag is set to true, the group attributes of the
#          files are synchronized. Whether the group names or the group
#          identifiers are synchronizeddepends on the preference numerids.
group=true

#          When this flag is set to true, the owner attributes of the
#          files are synchronized. Whether the owner names or the owner
#          identifiers are synchronizeddepends on the preference
#          extttnumerids.
owner=true

#          Including the preference -prefer root causes Unison always to
#          resolve conflicts in favor of root, rather than asking for
#          guidance from the user. (The syntax of root is the same as for
#          the root preference, plus the special values newer and older.)
#          This preference is overridden by the preferpartial preference.
#          This preference should be used only if you are sure you know
#          what you are doing!
prefer=newer

#          When this preference is set to true, the textual user interface
#          will print nothing at all, except in the case of errors.
#          Setting silent to true automatically sets the batch preference
#          to true.
silent=true

#          When this flag is set to true, file modification times (but not
#          directory modtimes) are propagated.
times=true

Комментарии должны сделать самообъяснение файла, за исключением директив пути. Если Вы не укажите путь директивы, то каталоги в корневой директивы будут синхронизированы. Если указать путь директивы, то пути относительно корневого пути (например, root = /var/www and path = current преобразуется в /var/www/current ), и только эти подкаталоги будут синхронизированы, а не весь каталог, заданный в корне директивы.

Вы можете узнать больше о доступных вариантов, принимая посмотреть на странице Unison это:

  • man unison

Теперь, когда мы вставили все настройки в файл настроек (особенно root (и возможно путь ) директивы), мы можем запустить Unison без каких-либо аргументов:

  • unison

Создание заданиями cron

server1:

Мы хотим, автоматизировать синхронизацию, для этого мы создаем задание, на server1.example.com:

  • crontab -e
*/5 * * * * /usr/bin/unison &> /dev/null

Это позволило бы запускать Unison каждые 5 минут; настроите его под свои нужды:

  • man 5 crontab

Я использую полный путь к unison здесь ( /usr/bin/unison ) просто выполните, уверен что cron знает, где найти unison. Ваш unison может быть расположен в отличном от моего месте. Запустите:

  • which unison

Чтобы выяснить, где он у Вас.


Обмениваться, хранить, передавать Ваши файлы стало просто как никогда.
yandex-disk
Читать подробнее: для чего Yandex-Диск проекту Mini-Server. Практика установки, настройки и использования сетевого хранилища на Ubuntu server LTS 12.04 в статье Резервное копирование сервера Ubuntu на Яндекс Диск.

>> Ubuntu 12.04 + Nginx Скачать сервер
>> Fedora 15 Скачать сервер
>> Простой Debian 6.0.6 Скачать сервер
>> CentOS 6.0 и
+ (5.6) другой
Скачать сервер
>> OpenSUSE 11.4
MAX
Скачать сервер

Вход на сайт

ВНИМАНИЕ!

Регистрация на сайте только по согласованию с администратором ресурса. Обращаться через форму обратной связи.