Представь, что твои данные на сервере TrueNAS — это золотой запас компании. Одна ошибка диска, сбой питания или человеческий фактор — и всё может быть потеряно. Репликация в TrueNAS — это не просто бэкап, это создание точной, синхронизированной копии данных в реальном времени или по расписанию. Давай разберем, как настроить эту систему так, чтобы спать спокойно.
Что такое репликация в TrueNAS и зачем она нужна
В основе TrueNAS лежит файловая система ZFS, и её репликация — это не просто копирование файлов. Это создание атомарных, консистентных снимков (snapshots) состояния твоего пула или набора данных (dataset) и их эффективная передача на удалённую систему. В отличие от rsync, ZFS репликация передаёт только изменённые блоки данных, что делает процесс быстрым и экономичным по трафику.
Типы репликации в TrueNAS
Перед настройкой важно выбрать стратегию. TrueNAS предлагает несколько подходов:
| Тип | Как работает | Идеально для |
|---|---|---|
| Периодическая (Scheduled) | Автоматическая отправка снапшотов по расписанию (ежечасно, ежедневно) | Регулярное резервное копирование, аварийное восстановление (DR) |
| Репликация вручную | Разовая отправка данных по требованию | Миграция данных, первоначальная синхронизация |
| Репликация в облако | Использование облачных провайдеров как цели репликации | Географическое распределение, защита от локальных катастроф |
Пошаговая настройка репликации между двумя серверами TrueNAS
Давай настроим самый распространённый сценарий: локальный сервер (источник) → удалённый сервер (цель).
Шаг 1: Подготовка целевого сервера (куда копируем)
На удалённом TrueNAS (цели) нужно создать пул или dataset для приёма данных и настроить SSH-ключи.
# На целевом сервере создаём dataset для репликации
zfs create tank/replica_backup
# Устанавливаем правильные права (если нужно)
chown -R user:group /mnt/tank/replica_backup
# Генерируем SSH-ключ для аутентификации (если нет)
ssh-keygen -t ed25519 -f ~/.ssh/truenas_replica
Шаг 2: Настройка SSH-аутентификации на источнике
Копируем публичный ключ с источника на цель для беспарольного доступа.
# На сервере-источнике копируем публичный ключ на цель
ssh-copy-id -i ~/.ssh/truenas_replica.pub user@remote-truenas-ip
# Тестируем подключение
ssh -i ~/.ssh/truenas_replica user@remote-truenas-ip
Шаг 3: Создание периодической задачи репликации через веб-интерфейс
Теперь самое интересное — настройка автоматической репликации.
- Переходим в Задачи → Репликация и нажимаем Добавить
- В разделе Источник выбираем пул/dataset для репликации (например,
tank/project_data) - В Периодичность снапшотов выбираем, как часто создавать точки восстановления (например, ежечасно)
- В разделе Назначение указываем:
- Тип: SSH
- Сервер: IP-адрес целевого TrueNAS
- Порт SSH: 22 (или кастомный)
- Путь:
tank/replica_backup - Пользователь SSH: пользователь с доступом к ZFS
- Приватный ключ: выбираем импортированный ранее
- В Расписание настраиваем, когда запускать репликацию (например, каждый день в 02:00)
- Сохраняем задачу
Шаг 4: Мониторинг и проверка
После первой синхронизации проверяем статус репликации.
# На целевом сервере проверяем полученные снапшоты
zfs list -t snapshot -r tank/replica_backup
# Пример вывода
# NAME USED AVAIL REFER MOUNTPOINT
# tank/replica_backup/project_data@auto-2024-01-15-0200 1.2G - 500G -
# tank/replica_backup/project_data@auto-2024-01-16-0200 850M - 501G -
Расширенные настройки и оптимизация
Компрессия и ограничение трафика
При репликации через медленный канал можно сэкономить трафик:
# В задаче репликации используем эти опции:
--compress=gzip # Сжатие данных перед отправкой
--limit=5000 # Ограничение скорости (КБ/с)
--dedup # Отправка только уникальных блоков (если включён дедупликация)
Ретенция снапшотов: политики хранения
Автоматически удаляй старые снапшоты по политикам:
# В настройках задачи репликации:
Удерживать снапшоты: 2w # Хранить 2 недели
Или используй продвинутые правила:
--keep-source=10 # Оставить 10 последних снапшотов на источнике
--keep-target=30 # Оставить 30 снапшотов на цели
Восстановление данных из реплики
Всё настроено, но что делать, когда нужно восстановить данные? Есть несколько сценариев:
# Восстановление конкретного файла из снапшота на цели
# 1. Находим нужный снапшот
zfs list -t snapshot -r tank/replica_backup | grep project_data
# 2. Клонируем снапшот во временный dataset
zfs clone tank/replica_backup/project_data@auto-2024-01-15-0200 tank/temp_restore
# 3. Копируем нужный файл из /mnt/tank/temp_restore
# 4. Удаляем временный клон
zfs destroy tank/temp_restore
Частые проблемы и их решение
Ошибка: "Permission denied (publickey)"
Решение: Проверь:
- Правильность приватного ключа в веб-интерфейсе TrueNAS
- Права на файл ключа на источнике (
chmod 600 ~/.ssh/truenas_replica) - Доступ пользователя SSH к ZFS командам на цели (
sudo -u user zfs list)
Репликация работает медленно
Оптимизация:
- Увеличь размер записи:
--blocksize=131072(128K) - Используй параллельные потоки:
--parallel=2 - Проверь сетевую задержку между серверами
- Рассмотри локальную репликацию для первоначальной синхронизации
Лучшие практики от Senior DevOps
- 3-2-1 правило: 3 копии данных, на 2 разных носителях, 1 из которых в другом месте. TrueNAS репликация — идеально для "другого места".
- Тестируй восстановление: Раз в квартал делай тестовое восстановление файлов из реплики. Работоспособность бэкапа подтверждается только успешным восстановлением.
- Мониторинг: Настрой оповещения о сбоях репликации через email или в систему мониторинга (Prometheus + Grafana).
- Версионирование: Храни снапшоты с разной гранулярностью: ежечасно — 24 часа, ежедневно — 30 дней, еженедельно — 12 недель.
- Шифрование: При репликации в облако или через ненадёжные каналы используй опцию
--encrypt.
Репликация в TrueNAS — это мощный, но гибкий инструмент. Начни с простой настройки между двумя серверами, затем добавь облачную репликацию для географического распределения. Помни: надёжность системы определяется не наличием бэкапа, а скоростью и предсказуемостью восстановления. Настроив ZFS репликацию один раз, ты получаешь автоматизированную систему защиты данных, которая работает пока ты занимаешься более важными задачами.