Перейти к основному содержимому
Перейти к основному содержимому

Рекомендации по использованию

Not supported in ClickHouse Cloud
примечание

Эта страница не применима к ClickHouse Cloud. Процедура, описанная здесь, автоматизирована в сервисах ClickHouse Cloud.

CPU Scaling Governor

Всегда используйте performance для управления масштабированием. on-demand работает значительно хуже при постоянно высоком спросе.

Ограничения CPU

Процессоры могут перегреваться. Используйте dmesg, чтобы увидеть, если тактовая частота CPU была ограничена из-за перегрева.
Ограничение также может быть установлено извне на уровне датacenter. Вы можете использовать turbostat для мониторинга под нагрузкой.

ОПЕРАТИВНАЯ ПАМЯТЬ

Для небольших объемов данных (до ~200 ГБ сжатых) лучше использовать столько же памяти, сколько объема данных.
Для больших объемов данных и при выполнении интерактивных (онлайн) запросов следует использовать разумное количество ОП (128 ГБ или более), чтобы горячий подмножество данных помещалось в кэш страниц.
Даже для объемов данных ~50 ТБ на сервере использование 128 ГБ ОП значительно улучшает производительность запросов по сравнению с 64 ГБ.

Не отключайте перерасход. Значение cat /proc/sys/vm/overcommit_memory должно быть 0 или 1. Запустите

Используйте perf top, чтобы отслеживать время, проводимое в ядре для управления памятью.
Постоянные огромные страницы также не нужно выделять.

Использование менее 16 ГБ ОП

Рекомендуемое количество ОП — 32 ГБ или более.

Если ваша система имеет менее 16 ГБ ОП, вы можете столкнуться с различными исключениями по памяти, так как настройки по умолчанию не соответствуют этому объему памяти. Вы можете использовать ClickHouse в системе с небольшим объемом ОП (до 2 ГБ), но такие настройки требуют дополнительной настройки и могут только принимать данные с низкой скоростью.

При использовании ClickHouse с менее чем 16 ГБ ОП мы рекомендуем следующее:

  • Уменьшите размер кэша меток в config.xml. Его можно установить на уровне 500 МБ, но не на ноль.
  • Уменьшите количество потоков обработки запросов до 1.
  • Уменьшите max_block_size до 8192. Значения до 1024 также могут быть практичными.
  • Уменьшите max_download_threads до 1.
  • Установите input_format_parallel_parsing и output_format_parallel_formatting на 0.

Дополнительные заметки:

  • Чтобы очистить память, кэшируемую распределителем памяти, вы можете выполнить команду SYSTEM JEMALLOC PURGE.
  • Мы не рекомендуем использовать интеграцию S3 или Kafka на машинах с низкой памятью, так как они требуют значительное количество памяти для буферов.

Хранилище

Если ваш бюджет позволяет использовать SSD, используйте SSD.
Если нет, используйте HDD. SATA HDD на 7200 об/мин подойдут.

Отдавайте предпочтение множеству серверов с локальными жесткими дисками, чем меньшему количеству серверов с прикреплёнными дисковыми полками.
Но для хранения архивов с редкими запросами полки будут работать.

RAID

При использовании HDD можно комбинировать RAID-10, RAID-5, RAID-6 или RAID-50.
Для Linux лучше использовать программный RAID (с mdadm).
При создании RAID-10 выберите компоновку far.
Если бюджет позволяет, выбирайте RAID-10.

LVM само по себе (без RAID или mdadm) допустимо, но создание RAID с ним или комбинирование с mdadm является менее исследуемым вариантом, и будет больше шансов на ошибки (выбор неправильного размера блока; неправильное выравнивание блоков; выбор неправильного типа RAID; забывание очистки дисков). Если вы уверены в использовании LVM, то нет ничего против его использования.

Если у вас есть более 4 дисков, используйте RAID-6 (предпочтительно) или RAID-50, вместо RAID-5.
При использовании RAID-5, RAID-6 или RAID-50 всегда увеличивайте размер stripe_cache_size, так как значение по умолчанию обычно не лучший выбор.

Рассчитайте точное число из количества устройств и размера блока, используя формулу: 2 * num_devices * chunk_size_in_bytes / 4096.

Размер блока 64 КБ достаточно для большинства конфигураций RAID. Средний размер записи clickhouse-server составляет примерно 1 МБ (1024 КБ), и поэтому рекомендуется размер полосы также 1 МБ. Размер блока можно оптимизировать, при необходимости установив на 1 МБ, делённый на количество ненаблюдаемых дисков в массиве RAID, так чтобы каждая запись была параллелизирована на все доступные ненаблюдаемые диски.
Никогда не устанавливайте размер блока слишком маленьким или слишком большим.

Вы можете использовать RAID-0 на SSD.
Несмотря на использование RAID, всегда используйте репликацию для безопасности данных.

Включите NCQ с длинной очередью. Для HDD выберите планировщик mq-deadline или CFQ, а для SSD выберите noop. Не уменьшавайте настройку 'readahead'.
Для HDD включите кэш записи.

Убедитесь, что fstrim включен для дисков NVME и SSD в вашей ОС (обычно это реализуется с помощью cronjob или службы systemd).

Файловая система

Ext4 является наиболее надежным вариантом. Установите параметры монтирования noatime. XFS также хорошо работает.
Большинство других файловых систем также должны работать нормально.

FAT-32 и exFAT не поддерживаются из-за отсутствия жестких ссылок.

Не используйте сжатые файловые системы, так как ClickHouse сам выполняет сжатие и лучше.
Не рекомендуется использовать зашифрованные файловые системы, поскольку вы можете использовать встроенное шифрование в ClickHouse, которое лучше.

Хотя ClickHouse может работать через NFS, это не лучшая идея.

Ядро Linux

Не используйте устаревшее ядро Linux.

Сеть

Если вы используете IPv6, увеличьте размер кэша маршрута.
Ядро Linux до 3.2 имело множество проблем с реализацией IPv6.

Используйте как минимум 10 ГБ сети, если это возможно. 1 Гб также будет работать, но будет значительно хуже для обновления реплик с десятками терабайт данных или для обработки распределённых запросов с большим количеством промежуточных данных.

Огромные страницы

Если вы используете старое ядро Linux, отключите прозрачные огромные страницы. Они мешают распределителю памяти, что приводит к значительному падению производительности.
На новых ядрах Linux прозрачные огромные страницы в порядке.

Если вы хотите изменить настройки прозрачных огромных страниц на постоянной основе, отредактируйте файл /etc/default/grub, чтобы добавить transparent_hugepage=madvise в параметры GRUB_CMDLINE_LINUX_DEFAULT:

После этого выполните команду sudo update-grub, затем перезагрузите, чтобы изменения вступили в силу.

Конфигурация гипервизора

Если вы используете OpenStack, установите

в nova.conf.

Если вы используете libvirt, установите

в XML конфигурации.

Это важно для ClickHouse, чтобы он смог получить правильную информацию с помощью инструкции cpuid.
В противном случае вы можете получить сбои Illegal instruction, если гипервизор работает на старых моделях CPU.

ClickHouse Keeper и ZooKeeper

Рекомендуется использовать ClickHouse Keeper для замены ZooKeeper в кластерах ClickHouse. Смотрите документацию по ClickHouse Keeper

Если вы хотите продолжать использовать ZooKeeper, лучше использовать свежую версию ZooKeeper — 3.4.9 или новее. Версия в стабильных дистрибутивах Linux может быть устаревшей.

Никогда не используйте вручную написанные скрипты для передачи данных между различными кластерами ZooKeeper, так как результат будет некорректным для последовательных узлов. Никогда не используйте утилиту "zkcopy" по той же причине: https://github.com/ksprojects/zkcopy/issues/15

Если вы хотите разделить существующий кластер ZooKeeper на два, правильный способ — увеличить количество его реплик, а затем перенастроить его в два независимых кластера.

Вы можете запускать ClickHouse Keeper на том же сервере, что и ClickHouse в тестовых средах или в средах с низкой скоростью поступления данных.
Для производственных сред мы предлагаем использовать отдельные серверы для ClickHouse и ZooKeeper/Keeper или разместить файлы ClickHouse и Keeper на отдельных дисках. Поскольку ZooKeeper/Keeper очень чувствительны к задержкам диска, и ClickHouse может использовать все доступные системные ресурсы.

Вы можете иметь наблюдателей ZooKeeper в ансамбле, но серверы ClickHouse не должны взаимодействовать с наблюдателями.

Не изменяйте параметр minSessionTimeout, большие значения могут повлиять на стабильность перезапуска ClickHouse.

При настройках по умолчанию ZooKeeper — это бомба замедленного действия:

Сервис ZooKeeper не удалит файлы со старых снимков и журналов, используя конфигурацию по умолчанию (см. autopurge), и это ответственность оператора.

Эту бомбу необходимо разминировать.

Конфигурация ZooKeeper (3.5.1) ниже применяется в крупной производственной среде:

zoo.cfg:

Версия Java:

Параметры JVM:

Инициализация Salt:

Антивирусное программное обеспечение

Если вы используете антивирусное программное обеспечение, сконфигурируйте его, чтобы пропускать папки с данными ClickHouse (/var/lib/clickhouse), в противном случае производительность может быть снижена, и вы можете столкнуться с неожиданными ошибками во время загрузки данных и фоновых объединений.