Вопрос или проблема
Стандартная проблема: ~60 ТБ данных, к которым я хотел бы получить доступ с нескольких устройств (Android, Linux, возможно, Web) вне моей квартиры. Узкое место: местный интернет-провайдер, который не может предоставить мне более 5 Мбит/с исходящего и 50 Мбит/с входящего трафика.
Рассмотренные решения
- Syncthing. Хороший опыт синхронизации музыки, камеры и важных документов. Нет выборочной синхронизации или “потоковой передачи” файлов.
- Nextcloud. Уязвимость в одной точке; ограничивается домашней исходящей скоростью.
- NAS. Те же проблемы, что и у Nextcloud.
Я считаю, что может решить эту проблему размещение второго сервера вне моей квартиры. У меня есть два подходящих места (оба с симметричным соединением 100 Мбит/с): офисный кабинет, дом родителей. Это также обеспечит резервную копию вне дома. Тем не менее, обе сети управляются, а это значит, что у меня НУЛЕВОЙ доступ к администрированию. Я знаю, что Syncthing будет работать с обеих сетей. Однако это не решает проблему доступа с этих устройств, а не с ограниченного по пропускной способности устройства из моей квартиры.
Мне нужно сетевое хранилище, которое может “предоставлять” файлы с двух географически удаленных и синхронизированных серверов “клиентам” таким образом, чтобы оно могло функционировать в сетях, которыми я не могу управлять.
Попробуйте Ceph, он способен соединять разные хостинги в узлы кластера в единый кластер и предоставлять к нему доступ как к единому хранилищу, подобно S3.
Он также поддерживает потоковую передачу.
Больше информации о аналогичных программных решениях здесь:
https://en.wikipedia.org/wiki/Comparison_of_distributed_file_systems
.
Ответ или решение
Создание сети NAS/облачного хранения с двумя или более синхронизированными серверами – это задача, требующая внимательного планирования и понимания как сетевой инфраструктуры, так и особенностей программных решений. В данном контексте мы сталкиваемся с ограничениями локальной сети (ограниченная пропускная способность в 5 Мбит/с на загрузку) и внешними, управляемыми сетями, к которым нет административного доступа. В этом ответе мы рассмотрим, как можно справиться с такими задачами и каким образом можно организовать систему, отвечающую поставленным требованиям.
Теория
Проблема распределенного хранения и доступа к данным, в особенности когда речь идет о больших объемах, как ваши 60 ТБ данных, обычно требует использования распределенных файловых систем или мягкого использования облачных решений. В таких системах данные могут храниться на нескольких географически удаленных узлах, и доступ к ним осуществляется таким образом, будто это локальное хранилище.
Одним из таких решений является Ceph – распределенная файловая система, спроектированная для работы с большими объемами данных и предоставляющая клиентам единое пространство имен для доступа. Ceph поддерживает функцию RADOS (система объектов для распределенных вычислений) и позволяет масштабироваться, добавляя новые узлы. Более того, Ceph поддерживает доступ к данным, как в объектно-ориентированном, так и в блочном или файловом виде, что делает его гибким решением для множества задач, включая стриминг данных, что может быть критично в вашем сценарии использования.
Пример
Предположим, у нас есть два узла, один из которых находится у вас дома, а второй в офисе с 100 Мбит/с симметричным соединением. Если рассматривать классические NAS решения, каждый из узлов будет представлять собственное хранилище, что может накладывать ограничения по доступу и скорости из-за вашего медленного домашнего соединения. Применение Ceph позволит объединить эти два узла в один виртуальный кластер. Узлы будут обмениваться данными между собой, обеспечивая синхронизацию и прозрачность для пользователя, который будет видеть только одно общее файловое пространство. В случае сбоя одного из узлов, данные остаются доступными через другие узлы, что повышает отказоустойчивость системы.
Для реализации на практике, на каждом из узлов устанавливается Ceph, где вы разворачиваете кластер как минимум с двумя мониторами и несколькими менеджерами хранилищ. Ceph способен динамически распределять и управлять данными, основываясь на политике доступности и нагрузке, что помогает оптимизировать использование сети, особенно если она имеет асимметричные каналы, как в вашем случае.
Применение
-
Настройка инфраструктуры: Для начала, вам потребуется настроить оборудование и сети так, чтобы обеспечить хорошую связь между вашими узлами. Это особенно важно в мягких сетях, где есть ограниченное или никакое административное влияние, но где, например, Syncthing уже работает. Это свидетельство того, что базовая сеть все же позволяет пересылку данных.
-
Развертывание Ceph: Установка Ceph потребует хороших знаний Linux и сетей. Вы можете следовать документации по развертыванию кластера Ceph на официальном сайте. В первую очередь, обеспечьте аутентифицированный и безопасный доступ между нодами.
-
Конфигурация и тестирование: После установки, настройте конфигурации для объектного и блочного хранения. По итогам этого шага будет полезно провести тестирование на разных типах клиентов: мобильных (Android), настольных (Linux) и веб-приложениях, что позволит оценить реальную производительность и функциональность.
-
Оптимизация и мониторинг: Для того чтобы улучшить использование сети и ресурсов, настройте мониторинговые инструменты, такие как Prometheus или встроенные решения Ceph, которые позволят следить за нагрузкой и распределением данных.
Таким образом, решение с использованием Ceph может стать адекватным выходом из вашей ситуации, оставляя ваши данные доступными с минимумом вмешательства в административные задачи на управляемых сетях.