Введение
CS/CSD (Chunk Server Daemon) — cервис, ответственный за хранение и доступ к чанкам данных в SDS.
Чанк — линейный участок данных фиксированного размера, на которые разделяются пользовательские тома. По умолчанию размер чанка — 1 Гб.
чанк наследует параметры репликации тома;
чанк выступает как единица аллокации и распределения данных в кластере; Данные одного чанка хранятся на одном конкретном наборе чанк-сервисов системы, также называемом чанк-группой. Чанк-группы не фиксированы и могут быть разными для каждого чанка. Их размер (количество CS) равен M+N.
чанки могут мигрировать между чанк-серверами в рамках восстановления после сбоев или балансировки нагрузки.
При взаимодействии с данными клиентская библиотека libsbd:
отправляет запрос в сервис MDS, чтобы узнать к какому chunk_uid относится данный участок тома: {volume_id, offset, size} -> [{chunk_uid, offset, size}, ...]
узнает, какие чанк-сервера отвечают за хранение данного chunk_uid: {chunk_uid} -> [cs1, cs2, cs3, ...]
CS предоставляет опции:
write — chunk_uid, offset, size, data
read — chunk_uid, offset, size
discard — chunk_uid, offset, size, например, trim, unmap
С точки зрения платформы, CS — это Linux user-space приложение, работающее поверх файловой системы. Для корректной работы, в частности сбора статистики, сервису необходимо предоставить отдельный раздел.
CS осуществляет хранение данных с заданными параметрами репликации, для этого он взаимодействует с другими CS в системе. Связь проводится по внутренней сети.
CS также запрашивает у MDS сведения об ошибках и параметры чанков:
параметры репликации;
список peer CS-сервисов для чанка;
другие параметры.
Данные в CS защищены от повреждения на диске с помощью CRC.