mysurik.ru

Зачем я поднял свой NFS-сервер и как он упростил мне жизнь

Почтовый сервер Postfix Dovecot

Проблема разрозненных данных

У меня три сервера: Proxmox хост, VM 101 с веб-сайтами, VM 200 с OpenWRT. И на каждом свои файлы, свои бекапы, свои скрипты. Когда я захотел перенести бекап базы с VM 101 на Proxmox, пришлось гонять через scp, вводить пароли, проверять, доехало ли. Отвратительно.

Решение: общая файловая папка, доступная всем серверам по сети. Выбрал NFS — потому что это стандарт для Linux, не нужно ставить дополнительный софт.

Настройка

На Proxmox хосте (у него больше всего дискового пространства) я создал папку /nfs/share, расшарил через exports:

echo "/nfs/share 192.168.0.0/24(rw,sync,no_subtree_check)" >> /etc/exports
exportfs -a

На VM 101 смонтировал:

mount -t nfs 192.168.0.196:/nfs/share /mnt/backup

Добавил в fstab, чтобы монтировалось при загрузке. Всё, теперь бекап базы пишу прямиком на общую папку, а Proxmox оттуда забирает.

Где пригодилось

Бекапы баз данных. Каждую ночь cron скрипт делает дамп MySQL на NFS. Утром Proxmox Backup Server забирает эти дампы. Если что-то идёт не так — все данные в одном месте, не надо искать по разным серверам.

Логи. Я настроил rsyslog на всех VM так, чтобы логи писались сразу на NFS. Теперь я могу смотреть логи всех серверов из одной папки. tail -f на хосте — и вижу, что происходит на всех VM.

ISO образы. Храню установочные образы Ubuntu, Alpine, GParted на NFS. Не надо каждый раз качать заново.

Что может пойти не так

Скорость. По гигабитной сети NFS работает достаточно быстро для бекапов, но для баз данных, которые пишут каждую секунду — тормозит. Для продакшн баз такое не годится.

Если NFS сервер лёг — все VM теряют доступ к своим бекапам. Я решил это дублированием критичных бекапов на локальный диск каждой VM.

Права доступа. На NFS пользователи маппятся по UID. Если на хосте uid 1000 это root, а на VM uid 1000 это www-data — будут коллизии. Пришлось унифицировать UID на всех машинах или использовать опцию anonuid в exports.

Итог

NFS — это просто и удобно. Поднять за 10 минут, а пользу даёт колоссальную. Бекапы, логи, общие файлы — всё в одном месте.

Зачем мне вообще понадобился NFS

У меня три сервера дома: один крутит сайты, второй — базы данных, третий — файлопомойка для бекапов. Каждый раз, когда надо было перенести файл с одного на другой, я использовал scp. Это работало, но жутко бесило: надо помнить IP, пути, пароли. А если файлов много — rsync.

Решение — общая файловая система. NFS (Network File System) позволяет примонтировать папку с одного сервера на другой так, будто она локальная. Настроил раз — и забыл.

Как я настраивал

На сервере-хранилище (назовём его NAS) я установил nfs-kernel-server, создал папку /srv/nfs и добавил её в экспорт. В /etc/exports прописал строку: /srv/nfs 192.168.0.0/24(rw,sync,no_subtree_check). Перезапустил сервис и всё.

На клиентах установил nfs-common, создал точку монтирования /mnt/nfs и выполнил mount -t nfs 192.168.0.50:/srv/nfs /mnt/nfs. Теперь на каждом сервере есть общая папка. Кидаю туда бекапы, скрипты, обновления — доступно отовсюду.

Грабли

Первые — права доступа. NFS использует UID/GID. Если на серверах разные пользователи с одинаковыми UID — файлы видны всем. Пришлось синхронизировать пользователей через LDAP. Пока возился, пару раз случайно затирал чужие файлы.

Вторые — скорость. По гигабитной сети NFS работает быстро, но если кто-то качает торрент — задержки растут. Я выделил для NFS отдельную подсеть и настроил QoS на роутере.

Третьи — безопасность. NFS — не шифрованный протокол. Я ограничил доступ по IP (только локальная сеть) и не пробрасываю наружу. Для дополнительной защиты можно использовать Kerberos, но для дома это перебор.

Теперь у меня общая папка для всех серверов. Бекапы складываются автоматически, скрипты синхронизируются, обновления распространяются через NFS. В итоге сэкономил кучу времени и нервов.

Ваш комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *