Как администрировать хранилище сервера ClickHouse в кластере при переполнении дисков
Я настраиваю сервер ClickHouse в кластере, но одна из вещей, которые не упоминаются в документации, - это как управлять очень большим объемом данных, он говорит, что он может обрабатывать до петабайт данных, но вы можете ' хранить столько данных на одном сервере. У вас обычно будет несколько тера в каждой. Поэтому мой вопрос заключается в том, как я могу обработать его для хранения в узле кластера, а затем, когда ему потребуется больше места, добавить другой, будет ли он автоматически обрабатывать распределение на новый сервер или мне придется играть с весами в распределение осколков.
Если у вас есть более 1 диска на одном сервере, как он может использовать их все для хранения данных?
Есть ли способ хранить очень старые данные в облаке и загружать их при необходимости? Например, все данные старше 2 лет могут храниться в Amazon S3, поскольку они вряд ли будут запрошены, и в этом случае потребуется больше времени для получения данных, но это не будет проблемой.
Какое решение вы найдете для этого? Обработка постоянно расширяющейся базы данных, чтобы избежать проблем с дисковым пространством в будущем.
Спасибо
1 ответ
Я предполагаю, что вы используете стандартную конфигурацию для кластера ClickHouse: несколько сегментов, состоящих из 2-3 узлов реплики, и на каждом из этих узлов таблица ReplicatedMergeTree, содержащая данные для соответствующего сегмента. Существуют также распределенные таблицы, созданные на одном или нескольких узлах, которые настроены для запроса узлов кластера ( соответствующий раздел в документации).
Когда вы добавляете новый шард, старые данные не перемещаются в него автоматически. Рекомендованный подход действительно заключается в том, чтобы "играть с весами", как вы сказали, т.е. увеличивать вес нового узла, пока объем данных не станет ровным. Но если вы хотите немедленно сбалансировать данные, вы можете использовать команду ALTER TABLE RESHARD. Внимательно прочитайте документы и помните о различных ограничениях этой команды, например, она не является атомарной.
Если у вас есть более 1 диска на одном сервере, как он может использовать их все для хранения данных?
Пожалуйста, прочитайте раздел о настройке RAID в советах по администрированию.
Есть ли способ хранить очень старые данные в облаке и загружать их при необходимости? Например, все данные старше 2 лет могут храниться в Amazon S3, поскольку они вряд ли будут запрошены, и в этом случае потребуется больше времени для получения данных, но это не будет проблемой.
Таблицы MergeTree в ClickHouse разделены по месяцам. Вы можете использовать команды ALTER TABLE DETACH/ATTACH PARTITION для управления разделами. Например, в начале каждого месяца вы можете отключить раздел на более старый месяц и выполнить его резервное копирование в Amazon S3. Или вы можете настроить кластер более дешевых машин с достаточным пространством на диске и вручную переместить туда старые разделы. Если ваши запросы всегда включают фильтр по дате, нерелевантные разделы будут пропущены автоматически, в противном случае вы можете настроить две распределенные таблицы: table_recent и table_all (с конфигурацией кластера, включающей узлы со старыми разделами).
Версия 19.15 представила конфигурацию хранения нескольких дисков. 20.1 вводит перестановку данных на основе времени.