Getty Images/iStockphoto

Проблему синхронизации каталогов на двух серверах с операционными системами семейства Linux на борту можно решить проще, если использовать специализированные инструменты. Давайте посмотрим, как это можно сделать с помощью Unison.

Возможно, у вас есть несколько серверов, и перед вами стоит задача синхронизировать определенные каталоги на этих серверах. Например, вам необходимо синхронизировать каталог /data на каждом из этих серверов, чтобы некое приложение имело доступ к актуальной информации. Или, может быть, вам просто нужно периодически выполнять синхронизированное резервное копирование данных одного сервера на другой.

Unison похож на утилиту синхронизации rsync, но в отличие от неё он поддерживает двустороннюю синхронизацию. То есть, он позволяет синхронизировать две копии файлов, обновляя каждую копию в зависимости от произведённых изменений.

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

Что ещё нужно для использования Unison


Я покажу весь процесс на примере двух серверов Ubuntu (оба 18.04). Вы можете установить и использовать Unison c другими дистрибутивами, но тогда вам нужно будет изменить команду установки, иначе Unison может быть установлен из стандартных репозиториев (разумеется, ваш пользователь должен иметь права sudo).

Я буду использовать вот такие сервера:

  • server1 — 192.168.1.6
  • server2 — 192.168.1.19

Как установить Unison


Первое, о чем нужно позаботиться, это установка Unison. Это должно быть сделано на обоих серверах. Зайдите на оба сервера и введите команду:

sudo apt-get install unison unison-all -y

Дождитесь окончания установки Unison и продолжайте.

Как сгенерировать и скопировать SSH-ключ


Сначала генерируем SSH-ключ только для server1. Для этого используем команду:

ssh-keygen -t rsa

Когда вас попросят ввести пароль — просто нажмите клавишу ENTER.
Когда ключ будет сгенерирован скопируйте его на server2 с помощью команды:

ssh-copy-id 192.168.1.19

Как только ключ будет скопирован, можете приступить непосредственно к делу.

Как использовать Unison


Давайте в тестовых целях создадим по одной директории на каждом сервере. Команда для server1:

sudo mkdir -p /data1

Для server2:

sudo mkdir -p /data2

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

sudo chown -R $USER.$USER /data2

Сделайте то же самое для server1:

sudo chown -R $USER.$USER /data1

Положим несколько тестовых файлов в /data1:

touch /data1/{test1,test2,test3}

Синхронизируем наши каталоги с помощью следующей команды (запустив её на server1):

unison /data1 ssh://192.168.1.19//data2

Поскольку вы пытаетесь синхронизировать эти корневые каталоги впервые, вы получите предупреждение о том, что синхронизация может занять некоторое время (но в нашем случае этого не произойдет, поскольку мы добавили в каталог всего лишь три тестовых файла минимального объёма). Если бы это был бэкап на продакшне, первый запуск действительно мог бы занять некоторое время.

Так что чай попьёте в следующий раз. А пока нажмите клавишу Enter, чтобы запустить процесс. После того, как вы это сделаете, вам будет предложено подтвердить синхронизацию каждого файла. По завершении введите ‘y’, чтобы продолжить.

Поскольку мы синхронизируем только три тестовых файла, это произойдёт очень быстро и вернёт вас в оболочку bash. Чтобы убедиться, что файлы синхронизированы, перейдите на server2 и введите команду:

ls /data2

Далее система сообщит о том, что в каталоге /data2 лежат наши файлы test1, test2 и test3:



У нас получилось: Unison синхронизировал оба каталога.

Как запускать Unison без необходимости взаимодействия с пользователем


Я думаю, вы не хотите постоянно подтверждать синхронизацию каждого файла каталога каждый раз, когда вы запускаете Unison. Это особенно напрягает, когда вы синхронизируете каталоги с большим количеством файлов. Поэтому нужна автоматизация. Зайдите на server1 и введите команду:

nano ~/.unison/default.prf

Когда конфигурационный файл откроется для редактирования, добавьте в него две строки:

auto=true
batch=true

Затем сохраните и закройте файл.
Теперь Unison не будет вас тревожить по мелочам. Но это ещё не всё.

Как создать задание для планировщика Cron


Я думаю, вы вряд ли хотели бы запускать синхронизацию вручную, потому что можете где-то допустить ошибку или, например, не учесть изменение структуры каталогов на серверах. Чтобы настроить автоматизацию, вам нужно создать задание cron для server1.
Давайте создадим скрипт для запуска синхронизации:

sudo nano /usr/local/bin/unisonsync

В этот файл нужно добавить следующее:

#!/bin/bash/
unison /data1 ssh://192.168.1.19//data2

Далее нужно выдать скрипту права на исполнение:

sudo chmod ugo+x /usr/local/bin/unisonsync

Создайте задание для Cron с помощью команды:

crontab -e

После этого наберите:

*/5 * * * * /usr/local/bin/unisonsync &> /dev/null

Теперь синхронизация будет автоматически запускаться каждые 5 минут.

Я показал, что Unison позволяет легко синхронизировать каталоги на двух серверах Linux. Можете проверить это сами, добавив файлы в соответствующие тестовые каталоги /data1 и /data2 на обоих серверах. Убедившись, что синхронизация работает, вы можете использовать её в боевом режиме на продакшн-серверах.



На правах рекламы


VDSina всегда рада предложить надёжные серверы для любых задач. Вам доступен огромный выбор операционных систем для автоматической установки, есть возможность установить любую ОС с собственного образа, а также использовать высокоскоростную локальную сеть между серверами в пределах одной локации.

Комментарии (6)