Перейти до змісту

Рішення для дзеркального відображення - lsyncd

Передумови

Це все, що вам потрібно зрозуміти та дотримуватися цього посібника:

  • Комп’ютер під керуванням Rocky Linux
  • Комфортний рівень зі зміною файлів конфігурації з командного рядка
  • Знання того, як користуватися редактором командного рядка (тут ми використовуємо vi, але ви можете використовувати свій улюблений редактор)
  • Вам знадобиться root-доступ, і в ідеалі увійдіть як root-користувач у вашому терміналі
  • Пари відкритих і закритих ключів SSH
  • Репозиторії EPEL від Fedora
  • Вам потрібно буде ознайомитися з inotify, інтерфейсом монітора подій
  • Додатково: знайомство з tail

Вступ

Якщо ви шукаєте спосіб автоматичної синхронізації файлів і папок між комп’ютерами, lsyncd є чудовим варіантом. Єдиний недолік для новачків? Ви повинні налаштувати все в командному рядку та текстових файлах.

Незважаючи на це, це програма, яку варто вивчити будь-якому системному адміністратору.

Найкращий опис lsyncd походить з його власної сторінки довідки. Трохи перефразовуючи, lsyncd — це легке рішення для живого дзеркала, яке неважко встановити. Він не вимагає нових файлових систем або блокових пристроїв і не перешкоджає продуктивності локальної файлової системи. Коротше кажучи, він відображає файли.

lsyncd спостерігає за інтерфейсом моніторингу подій локального дерева каталогів (inotify). Він агрегує та комбінує події протягом кількох секунд, а потім породжує один (чи більше) процес(ів) для синхронізації змін. За замовчуванням це rsync.

Для цілей цього посібника ви називатимете систему з оригінальними файлами «source», а той, з яким ми синхронізуємося, — «target». Насправді можна повністю віддзеркалити сервер за допомогою lsyncd, дуже ретельно вказавши каталоги та файли, які ви хочете синхронізувати. Це дуже мило!

Для віддаленої синхронізації також потрібно налаштувати пари відкритих закритих ключів Rocky Linux SSH. У наведених тут прикладах використовується SSH (порт 22).

Встановлення lsyncd

Фактично є два способи встановити lsyncd. Ми включимо їх обох сюди. RPM, як правило, трохи відстає від вихідних пакетів, але лише трохи. Версія, встановлена методом RPM на момент написання цієї статті, — 2.2.2-9, тоді як версія вихідного коду зараз — 2.2.3. Тим не менш, ми хочемо надати вам обидва варіанти та дозволити вам вибрати.

Встановлення lsyncd - метод RPM

Встановити версію RPM нескладно. Єдине, що вам потрібно спочатку встановити, це сховище програмного забезпечення EPEL від Fedora. Це можна зробити за допомогою однієї команди:

dnf install -y epel-release

Потім нам просто потрібно встановити lsyncd, і всі відсутні залежності будуть встановлені разом з ним:

dnf install lsyncd

Налаштуйте службу на запуск під час завантаження, але поки не запускайте її:

systemctl enable lsyncd

Все!

Встановлення lsyncd - вихідний метод

Встановлення з вихідного коду не таке погане, як здається. Просто дотримуйтеся цього посібника, і ви швидко почнете працювати!

Встановити залежності

Нам знадобляться деякі залежності: кілька, які необхідні самому lsyncd, і кілька, які потрібні для створення пакунків із вихідного коду. Використовуйте цю команду на своєму комп’ютері Rocky Linux, щоб переконатися, що у вас є потрібні залежності. Якщо ви збираєтеся створювати з вихідного коду, було б гарною ідеєю встановити всі інструменти розробки:

dnf groupinstall 'Development Tools'

Для Rocky Linux 9.0

lsyncd був повністю протестований у Rocky Linux 9.0 і працюватиме належним чином. Щоб установити всі необхідні залежності, вам потрібно буде ввімкнути додатковий репозиторій:

dnf config-manager --enable crb

Зробивши це в 9 перед наступними кроками, ви зможете завершити збірку без повернення назад.

А ось залежності, які нам потрібні для самого lsyncd і процесу його збирання:

dnf install lua lua-libs lua-devel cmake unzip wget rsync

Завантажте lsyncd і зберіть його

Далі нам знадобиться вихідний код:

wget https://github.com/axkibe/lsyncd/archive/master.zip

Тепер розпакуйте файл master.zip:

unzip master.zip

Це створить каталог під назвою «lsyncd-master». Нам потрібно перейти до цього каталогу та створити каталог під назвою build:

cd lsyncd-master

І потім:

mkdir build

Тепер знову змініть каталоги щоб опинитися в каталозі збірки:

cd build

Тепер виконайте ці команди:

cmake ..
make
make install

Після завершення ви матимете двійковий файл lsyncd, який буде встановлено та готовий до використання в /usr/local/bin

lsyncd Служба Systemd

За допомогою методу встановлення RPM служба systemd буде встановлена для вас, але якщо ви виберете встановлення з джерела, вам потрібно буде створити службу systemd. Хоча ви можете запустити двійковий файл без служби systemd, ми хочемо переконатися, що він запускається під час завантаження. Якщо ні, перезавантаження сервера призведе до зупинки синхронізації. Якщо ви забули запустити його знову, що дуже ймовірно, це буде проблемою для будь-якого системного адміністратора!

Однак створити службу systemd не дуже складно, і це заощадить ваш час у довгостроковій перспективі.

Створіть службовий файл lsyncd

Цей файл можна створити будь-де, навіть у кореневому каталозі вашого сервера. Після створення ви можете перемістити його в потрібне місце.

vi /root/lsyncd.service

Вміст цього файлу має бути таким:

[Unit]
Description=Live Syncing (Mirror) Daemon
After=network.target

[Service]
Restart=always
Type=simple
Nice=19
ExecStart=/usr/local/bin/lsyncd -nodaemon -pidfile /run/lsyncd.pid /etc/lsyncd.conf
ExecReload=/bin/kill -HUP $MAINPID
PIDFile=/run/lsyncd.pid

[Install]
WantedBy=multi-user.target

Тепер давайте встановимо щойно створений файл у правильне розташування:

install -Dm0644 /root/lsyncd.service /usr/lib/systemd/system/lsyncd.service

Нарешті, перезавантажте демон systemctl, щоб systemd «бачила» новий службовий файл:

systemctl daemon-reload

Конфігурація lsyncd

Незалежно від того, який метод встановлення lsyncd ви виберете, вам знадобиться файл конфігурації: /etc/lsyncd.conf. Наступний розділ розповість вам, як створити файл конфігурації та протестувати його.

Зразок конфігурації для тестування

Ось приклад спрощеного файлу конфігурації, який синхронізує /home з іншим комп’ютером. Наш цільовий комп’ютер матиме локальну IP-адресу: 192.168.1.40

  settings {
   logfile = "/var/log/lsyncd.log",
   statusFile = "/var/log/lsyncd-status.log",
   statusInterval = 20,
   maxProcesses = 1
   }

sync {
   default.rsyncssh,
   source="/home",
   host="root@192.168.1.40",
   excludeFrom="/etc/lsyncd.exclude",
   targetdir="/home",
   rsync = {
     archive = true,
     compress = false,
     whole_file = false
   },
   ssh = {
     port = 22
   }
}

Пояснення щодо файлу:

  • logfile і statusFile будуть створені автоматично під час запуску служби.
  • statusInterval - це кількість секунд, яку необхідно зачекати перед записом у файл statusFile.
  • maxProcesses — це кількість процесів, які lsyncd дозволено створювати. Чесно кажучи, якщо ви не використовуєте це на дуже завантаженому комп’ютері, достатньо 1 процесу.
  • У розділі синхронізації default.rsyncssh зазначено, що потрібно використовувати rsync через SSH
  • source= - це шлях до каталогу, з якого ми синхронізуємо.
  • The host= - це наш цільовий комп'ютер, з яким ми синхронізуємо.
  • excludeFrom= повідомляє lsyncd, де знаходиться файл виключень. Він повинен існувати, але може бути порожнім.
  • targetdir= - це цільовий каталог, до якого ми надсилаємо файли. У більшості випадків це буде відповідати джерелу, але не завжди.
  • Потім у нас є розділ rsync =, і це параметри, з якими ми запускаємо rsync.
  • Нарешті, у нас є розділ ssh =, у якому вказано порт SSH, який прослуховує цільовий комп’ютер.

Якщо ви додаєте більше одного каталогу для синхронізації, вам потрібно повторити весь розділ «синхронізації», включаючи всі відкриваючі та закриваючі дужки для кожного каталогу.

Файл lsyncd.exclude

Як зазначалося раніше, файл excludeFrom повинен існувати, тому давайте створимо його зараз:

touch /etc/lsyncd.exclude

Якщо ви синхронізуєте папку /etc на нашому комп’ютері, вам слід виключити багато файлів і каталогів. Кожен виключений файл або каталог перелічено у файлі, по одному на рядок, ось так:

/etc/hostname
/etc/hosts
/etc/networks
/etc/fstab

Перевірте та поверніться

Тепер, коли все інше налаштовано, ви можете все перевірити. Для початку давайте переконаємося, що наш systemd lsyncd.service запуститься:

systemctl start lsyncd

Якщо після виконання цієї команди не з’являється жодних помилок, перевірте статус служби:

systemctl status lsyncd

Якщо він показує, що служба працює, використовуйте tail, щоб побачити кінці двох файлів журналу, і переконайтеся, що все відображається нормально:

tail /var/log/lsyncd.log

І потім:

tail /var/log/lsyncd-status.log

Якщо припустити, що все виглядає правильно, перейдіть до каталогу /home/[user], де [user] є користувачем комп’ютера, і створіть там новий файл за допомогою touch.

touch /home/[user]/testfile

Тепер перейдіть до цільового комп’ютера та подивіться, чи з’являється файл. Якщо так, то все працює як треба. Налаштуйте lsyncd.service на запуск під час завантаження з:

systemctl enable lsyncd

І ви готові йти.

Пам'ятайте, що потрібно бути обережним

Щоразу, коли ви синхронізуєте набір файлів або каталогів з іншим комп’ютером, уважно подумайте про вплив, який це матиме на цільовий комп’ютер. Якщо ви повернетеся до Файлу lsyncd.exclude у нашому прикладі вище, чи можете ви уявити, що може статися, якщо /etc/fstab синхронізувати?

Для новачків fstab — це файл, який використовується для налаштування накопичувачів на будь-якому комп’ютері Linux. Диски та етикетки майже напевно відрізняються. Наступного разу, коли цільовий комп’ютер буде перезавантажено, він, швидше за все, не зможе повністю завантажитися.

Висновки та посилання

lsyncd — потужний інструмент для синхронізації каталогів між комп’ютерами. Як ви бачили, його неважко встановити, і його нескладно підтримувати в подальшому. Ви не можете просити більше, ніж це.

Ви можете дізнатися більше про lsyncd, відвідавши Офіційний сайт

Author: Steven Spencer

Contributors: Ezequiel Bruni, tianci li, Ganna Zhyrnova