Рішення для дзеркального відображення - lsyncd
Передумови¶
- Комп’ютер під керуванням Rocky Linux
- Комфортний рівень зі зміною файлів конфігурації з командного рядка
- Знання того, як користуватися редактором командного рядка (тут
vi
, але використовуйте свій улюблений редактор) - Вам потрібен доступ root або привілеї
sudo
(використанняsudo -s
з самого початку є хорошою ідеєю) - Пари відкритих і закритих ключів SSH
- Репозиторії EPEL (додаткові пакети для Enterprise Linux) від Fedora
- Вам потрібно буде ознайомитися з inotify, інтерфейсом монітора подій
- Додатково: знайомство з tail
Вступ¶
Якщо ви шукаєте спосіб автоматичної синхронізації файлів і папок між комп’ютерами, lsyncd
— чудовий варіант. Але ви повинні налаштувати все з командного рядка.
Це програма, яку варто вивчити будь-якому системному адміністратору.
Найкращий опис lsyncd
міститься на сторінці довідки. Трохи перефразовуючи, lsyncd
— це легке рішення для живого дзеркала, яке неважко встановити. Він не потребує нових файлових систем або блокових пристроїв і не перешкоджає продуктивності локальної файлової системи. Коротше кажучи, він відображає файли.
lsyncd
спостерігає за інтерфейсом моніторингу подій локального дерева каталогів (inotify). Він агрегує та об’єднує події протягом кількох секунд і породжує один (чи більше) процес(ів) для синхронізації змін. За замовчуванням це rsync
.
У цьому посібнику ви називатимете систему з оригінальними файлами «джерелом»; той, з яким ви синхронізуєтеся, буде «ціллю». Можна повністю віддзеркалити сервер за допомогою lsyncd
, ретельно вказавши каталоги та файли, які потрібно синхронізувати.
Ви також захочете налаштувати пари публічних закритих ключів Rocky Linux SSH для віддаленої синхронізації. У наведених тут прикладах використовується SSH (порт 22).
Встановлення lsyncd
¶
Встановлення lsyncd
відбувається двома способами. Включено описи кожного методу. RPM, як правило, трохи відстає від вихідних пакетів, але лише трохи. Версія, встановлена методом RPM на момент написання цієї статті, — 2.2.3-5, тоді як версія вихідного коду зараз — 2.3.1. Виберіть спосіб, який вам зручніше.
Встановлення 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
Виконання цих дев’яти кроків перед наступними дозволить вам завершити збірку без повернення назад.
Ось залежності, необхідні для 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=
- це шлях до каталогу, з якого ми синхронізуємо.host=
- це наш цільовий комп'ютер, з яким ми синхронізуємоexcludeFrom=
повідомляєlsyncd
, де знаходиться файл виключень. Він повинен існувати, але може бути порожнім.targetdir=
- це цільовий каталог, до якого ми надсилаємо файли. У більшості випадків це буде відповідати джерелу, але не завжди.- Потім у нас є розділ
rsync =
, і це параметри, з якими ми запускаємо rsync. - Розділ
ssh =
вказує порт SSH, який прослуховує цільовий комп’ютер
Якщо ви додаєте більше ніж один каталог для синхронізації, ви повинні повторити весь розділ «синхронізації», включаючи всі відкриваючі та закриваючі дужки для кожного каталогу.
Файл lsyncd.exclude¶
Як зазначалося раніше, файл excludeFrom
має існувати. Створіть це зараз:
touch /etc/lsyncd.exclude
Наприклад, якщо ви синхронізуєте папку /etc
на своєму комп’ютері, у процесі lsyncd
буде багато файлів і каталогів, які потрібно виключити. Кожен виключений файл або каталог знаходиться у файлі, по одному на рядок:
/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