UNISON синхронизация папок между серверами linux

Автор George, Нояб. 09, 2023, 11:57

« назад - далее »

George

Проблему синхронизации каталогов на двух серверах с операционными
системами семейства 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. Это должно быть
сделано на обоих серверах. Зайдите на оба сервера и введите команду:

Код: bash
sudo apt-get install unison unison-all -y
Дождитесь окончания установки Unison и продолжайте.

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

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

Код: bash
ssh-copy-id 192.168.1.19
Как только ключ будет скопирован, можете приступить непосредственно к делу.

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

Код: bash
sudo mkdir -p /data1
Для server2:

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

Код: bash
sudo chown -R $USER.$USER /data2
Сделайте то же самое для server1:

Код: bash
sudo chown -R $USER.$USER /data1
Положим несколько тестовых файлов в /data1:

Код: bash
touch /data1/{test1,test2,test3}
Синхронизируем наши каталоги с помощью следующей команды (запустив её на server1):

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

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

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

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



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

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

Код: bash
nano ~/.unison/default.prf
Когда конфигурационный файл откроется для редактирования, добавьте в него две строки:

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

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

Код: bash
sudo nano /usr/local/bin/unisonsync
В этот файл нужно добавить следующее:

Код: bash
#!/bin/bash/
unison /data1 ssh://192.168.1.19//data2
Далее нужно выдать скрипту права на исполнение:

Код: bash
sudo chmod ugo+x /usr/local/bin/unisonsync
Создайте задание для Cron с помощью команды:

Код: bash
crontab -e
После этого наберите:

Код: bash
*/5 * * * * /usr/local/bin/unisonsync &> /dev/null
Теперь синхронизация будет автоматически запускаться каждые 5 минут.

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

🡱 🡳

Отметьте интересные вам фрагменты текста и они станут доступны по уникальной ссылке в адресной строке браузера.