1. Введение в Ceph: архитектура RADOS, компоненты кластера и алгоритм CRUSH
Введение в Ceph: архитектура RADOS, компоненты кластера и алгоритм CRUSH
Добро пожаловать на курс «Администрирование и архитектура Ceph». Мы начинаем погружение в одну из самых мощных и востребованных систем хранения данных в мире IT-инфраструктуры. В этой первой статье мы разберем фундамент, на котором строится Ceph, поймем, почему он считается стандартом де-факто для облачных сред, и детально изучим его внутреннюю магию — алгоритм CRUSH.
Что такое Ceph и зачем он нужен?
Ceph — это программно-определяемая система хранения данных (Software Defined Storage, SDS) с открытым исходным кодом. Главная особенность Ceph заключается в том, что она предоставляет унифицированное хранилище. Это означает, что в рамках одного кластера вы можете получить доступ к данным тремя разными способами:
Традиционные системы хранения часто требуют дорогостоящего проприетарного оборудования (RAID-контроллеры, специализированные полки). Ceph же спроектирован для работы на commodity hardware — обычном серверном оборудовании. Вся логика надежности, репликации и восстановления перенесена с «железа» на программный уровень.
Ключевые характеристики Ceph: * Масштабируемость: От нескольких терабайт до эксабайт данных. * Отсутствие единой точки отказа: Все компоненты распределены и дублированы. * Самовосстановление: Система автоматически обнаруживает сбои и восстанавливает целостность данных без участия администратора.
Фундамент системы: RADOS
В основе Ceph лежит технология RADOS (Reliable Autonomic Distributed Object Store — Надежное автономное распределенное хранилище объектов). Независимо от того, используете ли вы блочное устройство, S3 или файловую систему, все данные в конечном итоге превращаются в объекты и сохраняются в RADOS.
Представьте RADOS как огромный, умный бассейн данных. Он берет на себя всю сложную работу: * Репликацию данных (создание копий). * Проверку целостности (Scrubbing). * Балансировку нагрузки. * Восстановление после сбоев.
Пользовательские интерфейсы (RBD, RGW, CephFS) — это лишь надстройки, которые «общаются» с RADOS через библиотеку librados.
Компоненты кластера Ceph
Чтобы RADOS работал, ему необходим набор демонов (сервисных процессов), каждый из которых выполняет свою уникальную роль. Рассмотрим «анатомию» кластера.
1. Ceph Monitor (MON)
Мониторы — это «мозг» кластера. Они не хранят данные пользователей. Их задача — хранить карту кластера (Cluster Map). Карта кластера — это небольшая база данных, описывающая текущее состояние всей системы: какие узлы в строю, какие диски работают, как настроена топология сети.
* Функция: Поддержание кворума и консенсуса о состоянии кластера. * Алгоритм: Использует алгоритм Paxos для обеспечения согласованности данных между мониторами. * Количество: Для надежности всегда требуется нечетное количество мониторов (обычно 3 или 5), чтобы избежать ситуации «split-brain» (расщепления сознания), когда кластер не может договориться, кто прав.
2. Ceph OSD (Object Storage Daemon)
OSD — это «мышцы» кластера. Это демоны, которые непосредственно работают с дисками (HDD или SSD). Обычно на каждый физический диск запускается один процесс OSD.
* Функция: Хранение данных, чтение, запись, репликация данных на другие OSD, сообщение мониторам о своем состоянии («я жив», «я умираю», «соседний диск не отвечает»). * Взаимодействие: Клиенты читают и пишут данные напрямую в OSD, минуя мониторы (после получения карты).
3. Ceph Manager (MGR)
Менеджер работает в паре с монитором. Он берет на себя задачи, которые не требуют строгой консистентности Paxos, разгружая тем самым мониторы.
* Функция: Сбор метрик производительности, управление дашбордом, оркестрация внешних модулей (например, интеграция с Prometheus или Zabbix).
4. Metadata Server (MDS)
Этот компонент нужен только если вы используете файловую систему CephFS. В блочном и объектном хранилище он не участвует.
* Функция: Хранение метаданных файловой системы (имена файлов, права доступа, структура директорий). Сами данные файлов хранятся в OSD.
Магия распределения данных: Алгоритм CRUSH
Самая большая проблема традиционных хранилищ — это таблица размещения файлов. Когда вы сохраняете файл, контроллер записывает в таблицу: «Файл А лежит на диске 5, сектор 100». Когда файлов становятся миллиарды, эта таблица разрастается до гигантских размеров, становится узким местом и точкой отказа.
Ceph решает эту проблему радикально: он избавляется от таблицы размещения. Вместо того чтобы искать, где лежат данные, Ceph вычисляет, где они должны лежать.
Для этого используется алгоритм CRUSH (Controlled Replication Under Scalable Hashing).
Как это работает? Путь данных
Процесс записи или чтения данных в Ceph происходит в несколько этапов, которые позволяют равномерно распределять нагрузку.
#### Шаг 1: От объекта к Placement Group (PG)
Представьте, что у вас есть миллионы объектов. Управлять каждым по отдельности и назначать ему конкретный диск — накладно. Поэтому Ceph группирует объекты в логические контейнеры, называемые Placement Groups (PG) или группы размещения.
Формула вычисления PG выглядит следующим образом:
Однако для понимания сути процесса мы можем использовать упрощенную модель:
Где: * — идентификатор группы размещения, в которую попадет объект. * — хеш-функция от имени объекта, превращающая имя в псевдослучайное число. * — операция взятия остатка от деления на . * — общее количество групп размещения (PG) в пуле.
Благодаря этой формуле, зная имя объекта и количество PG, любой клиент и любой демон OSD могут мгновенно вычислить, к какой группе относится объект. Это детерминированный процесс: одно и то же имя всегда даст один и тот же PG.
#### Шаг 2: От PG к списку OSD (CRUSH)
Теперь мы знаем ID группы размещения (например, PG 1.5). Но на каких физических дисках (OSD) хранится эта группа? Здесь вступает в игру алгоритм CRUSH.
CRUSH принимает на вход ID группы размещения и текущую карту кластера (Cluster Map), а на выходе выдает упорядоченный список OSD, где должны храниться реплики данных.
Где: * — идентификатор группы размещения. * — топология кластера (список серверов, стоек, дисков). * — правило репликации (например, «хранить 3 копии, причем на разных серверах»). * — список дисков. становится Primary (главным), остальные — Secondary (репликами).
Почему это гениально?
Жизненный цикл записи (Write Path)
Чтобы закрепить понимание, проследим путь записи данных:
my_photo.jpg.[OSD.5, OSD.12, OSD.8].OSD.5).OSD.5) принимает данные и параллельно отправляет их на реплики (OSD.12 и OSD.8).Это обеспечивает строгую согласованность (Strong Consistency). Вы никогда не прочитаете устаревшие данные, если запись была подтверждена.
Заключение
Мы рассмотрели архитектуру Ceph на высоком уровне. Теперь вы знаете, что: * RADOS — это надежный фундамент объектного хранения. * MON, OSD, MGR — основные компоненты, обеспечивающие жизнь кластера. * CRUSH — это алгоритм, который заменяет централизованные таблицы адресации математическими вычислениями, обеспечивая бесконечную масштабируемость.
В следующей статье мы перейдем от теории к практике и рассмотрим процесс подготовки инфраструктуры для развертывания вашего первого кластера Ceph.