Рекомендации по использованию
Эта страница не применима к 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
. - Отключите запись в журнальные таблицы, так как это удерживает фоновую задачу слияния, резервируя ОЗУ для выполнения слияний журнальных таблиц. Отключите
asynchronous_metric_log
,metric_log
,text_log
,trace_log
.
Дополнительные заметки:
- Чтобы сбросить память, кэшированную выделителем памяти, вы можете запустить команду
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 или системной службы).
Файловая система
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:
Инициализация соли:
Антивирусное программное обеспечение
Если вы используете антивирусное программное обеспечение, настройте его так, чтобы он пропускал папки с файлами данных ClickHouse (/var/lib/clickhouse
), иначе производительность может снизиться, и вы можете столкнуться с неожиданными ошибками во время приема данных и фоновых слияний.