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

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

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

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

Управление масштабированием ЦП

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

Ограничения на ЦП

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

ОЗУ

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

Не отключайте overcommit. Значение 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, когда гипервизор работает на старых моделях ЦП.

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), иначе производительность может снизиться, и вы можете столкнуться с неожиданными ошибками во время загрузки данных и фоновых слияний.