Рекомендации по использованию
This page is not applicable to ClickHouse Cloud. The procedure documented here is automated in ClickHouse Cloud services.
CPU Scaling Governor
Всегда используйте performance
контроллер масштабирования. Контроллер масштабирования on-demand
работает значительно хуже при постоянно высоком спросе.
Ограничения процессора
Процессоры могут перегреваться. Используйте dmesg
, чтобы узнать, была ли ограничена тактовая частота CPU из-за перегрева. Ограничение также может быть установлено извне на уровне дата-центра. Вы можете использовать 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. Если нет, используйте 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 service).
Файловая система
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
), иначе производительность может снизиться, и вы можете столкнуться с неожиданными ошибками при приёме данных и фоновых слияниях.