Рішення для дзеркального відображення - 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