Вопрос или проблема
У меня есть HDD-накопители на двух разных серверах, которые мне нужно регулярно синхронизировать. До сих пор я использовал rsync через sshfs, сначала с одного на другой, затем с другого на первый, но этот метод оказывается неудовлетворительным. Когда файл удаляется с диска A, он не копируется на диск B, а затем копируется с диска B на диск A. Таким образом, я никогда не могу ничего удалить, если не делаю это на обоих дисках. То же самое происходит и с переименованием – переименование директории на одном диске вскоре приводит к появлению двух директорий с разными именами, но с одинаковым содержимым.
В идеале мне нужно что-то, что отслеживает изменения на одном диске, а затем дублирует эти изменения на другом. Есть какие-либо предложения?
Если вы можете позволить себе третий сервер для хранения файлов, вы можете использовать Nextcloud. (Вы также можете разместить его на одном из этих серверов, если третье место недоступно).
На мой опыт, он хорошо отслеживает изменения с нескольких мест, если у вас не включены одни машины и выключены другие в одно и то же время; в таком случае легко начинаются конфликты различий файлов.
Похоже, что этот вопрос на ServerFault может быть наиболее подходящим: https://serverfault.com/questions/924294/master-master-file-sync-between-datacenters
Вы рассматривали Syncthing?
Он может постоянно синхронизировать файлы, и если ваши два устройства могут напрямую общаться, вам даже не нужен реле-сервер, так как они могут синхронизироваться напрямую.
Ответ или решение
Для эффективной синхронизации двух дисков на разных серверах с учетом всех изменений, включая удаление и переименование файлов, вам стоит рассмотреть несколько современных методов и инструментов. Рассмотрим различные подходы к решению этой задачи.
1. Проблема с текущими методами
Использование rsync
через sshfs
имеет свои ограничения. При таком подходе у вас возникают проблемы с состоянием файлов:
- Удаление файла на одном диске не отражается на другом.
- Переименование файлов приводит к несоответствию содержимое и имен файлов на обоих дисках.
Эти проблемы свидетельствуют о том, что rsync
лучше всего подходит для односторонней синхронизации данных, а не для двусторонней.
2. Подходы к решению проблемы
На сегодняшний день существует несколько инструментов, способных обеспечить непрерывную синхронизацию данных между двумя серверами.
a. Syncthing
Syncthing – это отличный инструмент для двусторонней синхронизации, который можно использовать для вашей задачи.
- Автоматическая синхронизация: Syncthing непрерывно отслеживает изменения на обоих серверах, мгновенно синхронизируя файлы при их добавлении, изменении или удалении.
- Прямое соединение: Если оба сервера могут общаться напрямую, Syncthing будет работать без необходимости использования промежуточного сервера.
- Конфликты: В случае изменения одного и того же файла на обоих серверах, Syncthing создает конфликтные версии, чтобы избежать потери данных.
- Безопасность: Передача данных защищена с помощью шифрования.
b. Nextcloud
Если у вас есть возможность развернуть облачное решение, Nextcloud позволит вам создавать централизованную систему управления файлами.
- Изменения в реальном времени: Nextcloud поддерживает синхронизацию с изменениями, что позволяет синхронизировать файлы между несколькими серверами и клиентами.
- Управление правами доступа: Вы сможете настраивать права доступа к различным папкам и файлам, что делает его гибким инструментом для командной работы.
Однако, учитывайте, что Nextcloud может оказаться избыточным, если вам просто нужно поддерживать синхронизацию файлов.
3. Конфигурация Syncthing
Если вы решили использовать Syncthing, вот краткие шаги по настройке:
-
Установка: Установите Syncthing на оба сервера. Это можно сделать с помощью пакетного менеджера, например
apt
илиyum
, в зависимости от вашей операционной системы.sudo apt install syncthing # Для Ubuntu/Debian
-
Настройка: Запустите Syncthing на обоих серверах и создайте папки для синхронизации. После этого настройте идентификаторы устройств для обмена данными.
-
Добавление папок: В интерфейсе Syncthing добавьте общие папки на каждом сервере и настройте параметры синхронизации.
-
Мониторинг: Вы можете контролировать состояние синхронизации через веб-интерфейс Syncthing, который предоставляет информацию о статусах файлов и возможных конфликтах.
4. Заключение
Для решения вашей задачи по синхронизации данных между серверами Syncthing представляет собой лучший выбор благодаря простоте использования и надежной поддержке двусторонней синхронизации. Этот инструмент поможет устранить проблемы с конфликтами файлов и потерей данных, с которыми вы сталкивались при использовании rsync
. Если ваша инфраструктура позволяет, рассмотрите интеграцию с Nextcloud для более расширенных возможностей управления данными.