Найти в Дзене
ENBC.RU

ClickHouse или когда мало места на диске, как добавить места? Многодисковое хранилище

ClickHouse или когда мало места на диске, как добавить места? Подключить к нему дополнительные диски без танцев с бубнами. Когда-то clickhouse поддерживал только одно устройство хранения. После версии 19.15 данные можно сохранять на разных устройствах хранения, и их можно автоматически перемещать между разными устройствами. Таким образом, clickhouse может реализовать поэтапное многоуровневое хранилище, то есть холодные и горячие данные разделяются и хранятся на разных типах устройств хранения. В ежедневных интерактивных запросах 95% запросов обращаются к данным за последние дни, а оставшиеся 5% выполняют какие-то долгосрочные пакетные задачи. Благодаря многоуровневому хранилищу мы можем размещать последние актуальные данные на высокопроизводительных носителях, таких как SSD, а старые исторические данные - на дешевом механическом жестком диске. Кроме того, сохраняя данные на нескольких устройствах хранения для расширения емкости сервера, clickhouse также может автоматически перемещать д
Оглавление

ClickHouse или когда мало места на диске, как добавить места? Подключить к нему дополнительные диски без танцев с бубнами.

Сгенерировано в Шедеврум
Сгенерировано в Шедеврум

Когда-то clickhouse поддерживал только одно устройство хранения. После версии 19.15 данные можно сохранять на разных устройствах хранения, и их можно автоматически перемещать между разными устройствами. Таким образом, clickhouse может реализовать поэтапное многоуровневое хранилище, то есть холодные и горячие данные разделяются и хранятся на разных типах устройств хранения.

В ежедневных интерактивных запросах 95% запросов обращаются к данным за последние дни, а оставшиеся 5% выполняют какие-то долгосрочные пакетные задачи. Благодаря многоуровневому хранилищу мы можем размещать последние актуальные данные на высокопроизводительных носителях, таких как SSD, а старые исторические данные - на дешевом механическом жестком диске. Кроме того, сохраняя данные на нескольких устройствах хранения для расширения емкости сервера, clickhouse также может автоматически перемещать данные между различными устройствами хранения.

-2

Каждая таблица MergeTree имеет политику хранения, определяющую способ записи данных таблицы. Политики разделяют разные диски на один или несколько томов и определяют порядок записи данных и способы перемещения данных между дисками.

Если не указано, каждая таблица имеет политику хранения по умолчанию default, которая хранит данные по пути, указанному в поле path в файле конфигурации.

В исходном состоянии каталог хранилища данных, указанный в файле конфигурации clickhouse, является:

/var/lib/clickhouse/data/

У каждого сисадмина наступает тот самый момент, когда мало места на основном диске. Есть один или несколько свободных дисков, и вы их конечно же предварительно примонтировали в систему. Комада lsblk покажет все ваши смонтированные тома.

В нашем примере это /mnt/backup/

Конфигурирование

Создайте в нем директорию

mkdir -p /mnt/backup/clickhouse/
chown -R clickhouse.clickhouse /mnt/backup/clickhouse/

Чтобы ClikHouse получил диски в свое распоряжение, достаточно сделать простейшие действия.

Создаем файл /etc/clikhouse-server/config.d/disk.xml

Со следующим содержимым (конечно же добавляйте свой путь, в конце обязательно не забудьте / , иначе кликхаус не стартанет):

<clickhouse>
<storage_configuration>
<disks>
<hot_disk>
<path>/mnt/backup/clickhouse/</path>
</hot_disk>
</disks>
<policies>
<hot_policy>
<volumes>
<hot_volume>
<disk>hot_disk</disk>
</hot_volume>
</volumes>
<perform_ttl_move_on_insert>false</perform_ttl_move_on_insert>
</hot_policy>
</policies>
</storage_configuration>
</clickhouse>

Размещение файла конфигурации


Поместите созданный файл конфигурации в директорию /etc/clickhouse-server/config.d/disk.xml.
Перезапуск сервера:
После внесения изменений перезапустите сервер ClickHouse.
Эти шаги позволят вам использовать дополнительные диски в ClickHouse для организации многоуровневого хранения данных.

service clickhouse-server stop
service clickhouse-server start

Проверка функционала

SELECT
name,
path,
formatReadableSize(free_space) AS free,
formatReadableSize(total_space) AS total,
formatReadableSize(keep_free_space) AS reserved
FROM system.disks

Получите вывод, например такой:

-3

Создайте новую таблицу

CREATE TABLE sampledisk
(
`id` UInt64
)
ENGINE = MergeTree
ORDER BY id
SETTINGS storage_policy = 'hot_policy'

Заполните тестовую таблицу рандомными данными

insert into sampledisk select * from numbers(1000000);
insert into sampledisk select * from numbers(1000000);
insert into sampledisk select * from numbers(1000000);
insert into sampledisk select * from numbers(1000000);

Проверьте, как хранятся данные в таблице

SELECT
name,
disk_name,
path
FROM system.parts
WHERE table = 'sampledisk'


Query id: f1f0709f-8163-4a61-a069-a29e71b10492

┌─name──────┬─disk_name─┬─path──────────────────────────┐
│ all_1_1_0 │ hot_disk │ /mnt/backup/clickhouse/store/8c7/8c7e84b2-aac6-46e0-9139-5462d579c711/all_1_1_0/ │
│ all_2_2_0 │ hot_disk │ /mnt/backup/clickhouse/store/8c7/8c7e84b2-aac6-46e0-9139-5462d579c711/all_2_2_0/ │
│ all_3_3_0 │ hot_disk │ /mnt/backup/clickhouse/store/8c7/8c7e84b2-aac6-46e0-9139-5462d579c711/all_3_3_0/ │
│ all_4_4_0 │ hot_disk │ /mnt/backup/clickhouse/store/8c7/8c7e84b2-aac6-46e0-9139-5462d579c711/all_4_4_0/ │
└───────────┴───────────┴──────────────────────────────────────────────────────────────────────────────────┘
Как видите, данные сохранились в новом диске.

Когда например, места будет мало новые данные можно будет начать лить в новые таблички используя параметр при их создании:

SETTINGS storage_policy = 'hot_policy'

Чтобы добавить настройку storage_policy='hot_policy' для существующей таблицы в ClickHouse, используйте следующий синтаксис:

ALTER TABLE table_name MODIFY SETTINGS storage_policy = 'hot_policy'

Замените table_name на имя вашей таблицы. Этот запрос изменит настройки таблицы, установив для неё политику хранения hot_policy.

В ClickHouse нельзя одновременно использовать несколько политик хранения для одной таблицы. Однако, если вам нужно настроить различные политики хранения для разных типов данных в одной таблице, вы можете создать несколько разделов в таблице и назначить разные политики хранения для каждого раздела.

Обратите внимание, что метаданные по-прежнему существуют в каталоге диска по умолчанию. Фоновая задача слияния будет регулярно объединять эти небольшие задачи
части данных и создание более крупных частей данных,Для записи на эти диски используется тот же метод опроса.
Вы можете вручную запустить выполнение задачи слияния

OPTIMIZE TABLE sampledisk;

SELECT
name,
disk_name,
path
FROM system.parts
WHERE (table = 'sampledisk') AND active;

┌name──┬disk_name──┬─path─┬
│all_1_4 │ disk_name_4 │ mnt/backup/clickhouse/data/default/sampledisk/all_1_4/