From bb9d5f39588175d958998ad976469e39663f9822 Mon Sep 17 00:00:00 2001 From: Ivan Blinkov Date: Fri, 16 Jun 2017 19:49:00 +0300 Subject: [PATCH] Move operation tips to main reference --- .../en/operations/tips.rst} | 68 ++++++--- doc/reference/ru/operations/tips.rst | 141 ++++++++++++++++++ 2 files changed, 187 insertions(+), 22 deletions(-) rename doc/{administration/tips.txt => reference/en/operations/tips.rst} (63%) create mode 100644 doc/reference/ru/operations/tips.rst diff --git a/doc/administration/tips.txt b/doc/reference/en/operations/tips.rst similarity index 63% rename from doc/administration/tips.txt rename to doc/reference/en/operations/tips.rst index 74333f155c9..36132f9d474 100644 --- a/doc/administration/tips.txt +++ b/doc/reference/en/operations/tips.rst @@ -1,38 +1,45 @@ -ClickHouse administration tips. - +Operations Tips +=============== CPU +--- SSE 4.2 instruction set support is required. Most recent (since 2008) CPUs have this instruction set. When choosing between CPU with more cores and slightly less frequency and CPU with less cores and more frequency, choose first. For example, 16 cores with 2600 MHz is better than 8 cores with 3600 MHz. - Hyper-Threading +--------------- Don't disable hyper-threading. Some queries will benefit from hyper-threading and some will not. Turbo-Boost +----------- Don't disable turbo-boost. It will do significant performance gain on typical load. -Use 'turbostat' tool to show real CPU frequency under load. +Use ``turbostat`` tool to show real CPU frequency under load. CPU scaling governor +-------------------- -Always use 'performance' scaling governor. 'ondemand' scaling governor performs much worse even on constantly high demand. -sudo echo 'performance' | tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor +Always use ``performance`` scaling governor. ``ondemand`` scaling governor performs much worse even on constantly high demand. + + .. code-block:: bash + + sudo echo 'performance' | tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor CPU throttling - -Your CPU could be overheated. Use 'dmesg' to show if it was thermal throttled. -Your CPU could be power capped in datacenter. Use 'turbostat' tool under load to monitor that. +-------------- +Your CPU could be overheated. Use ``dmesg`` to show if it was thermal throttled. +Your CPU could be power capped in datacenter. Use ``turbostat`` tool under load to monitor that. RAM +--- For small amount of data (up to ~200 GB compressed) prefer to use as much RAM as data volume. For larger amount of data, if you run interactive (online) queries, use reasonable amount of RAM (128 GB or more) to hot data fit in page cache. @@ -40,38 +47,50 @@ Even for data volumes of ~50 TB per server, using 128 GB of RAM is much better f Swap +---- Disable swap. The only possible reason to not disable swap is when you are running ClickHouse on your personal laptop/desktop. Huge pages +---------- -Disable transparent huge pages. It interfers badly with memory allocators, leading to major performance degradation. -echo 'never' | sudo tee /sys/kernel/mm/transparent_hugepage/enabled -Use 'perf top' to monitor time spent in kernel on doing memory management. +Disable transparent huge pages. It interferes badly with memory allocators, leading to major performance degradation. + + .. code-block:: bash + + echo 'never' | sudo tee /sys/kernel/mm/transparent_hugepage/enabled + +Use ``perf top`` to monitor time spent in kernel on doing memory management. Don't allocate permanent huge pages. Storage subsystem +----------------- If you could afford SSD, use SSD. Otherwise use HDD. SATA HDDs 7200 RPM are Ok. -Prefer more servers with inplace storage to less servers with huge disk shelves. +Prefer more servers with in place storage to less servers with huge disk shelves. Of course you could use huge disk shelves for archive storage with rare queries. RAID +---- When using HDDs, you could use RAID-10, RAID-5, RAID-6 or RAID-50. -Use Linux software RAID (mdadm). Better to not use LVM. -When creating RAID-10, choose 'far' layout. +Use Linux software RAID (``mdadm``). Better to not use LVM. +When creating RAID-10, choose ``far`` layout. Prefer RAID-10 if you could afford it. Don't use RAID-5 on more than 4 HDDs - use RAID-6 or RAID-50. RAID-6 is better. When using RAID-5, RAID-6, or RAID-50, always increase stripe_cache_size, because default setting is awful. -echo 4096 | sudo tee /sys/block/md2/md/stripe_cache_size -Exact number is calculated from number of devices and chunk size: 2 * num_devices * chunk_size_in_bytes / 4096. + + .. code-block:: bash + + echo 4096 | sudo tee /sys/block/md2/md/stripe_cache_size + +Exact number is calculated from number of devices and chunk size: ``2 * num_devices * chunk_size_in_bytes / 4096``. Chunk size 1024K is Ok for all RAID configurations. Never use too small or too large chunk sizes. @@ -84,20 +103,22 @@ Enable write cache on HDDs. Filesystem +---------- -Ext4 is Ok. Mount with noatime,nobarrier. +Ext4 is Ok. Mount with ``noatime,nobarrier``. XFS is Ok too, but less tested with ClickHouse. Most other filesystems should work fine. Filesystems with delayed allocation are better. Linux kernel +------------ Don't use too old Linux kernel. For example, on 2015, 3.18.19 is Ok. -You could use Yandex kernel: https://github.com/yandex/smart -- it gives at least 5% performance increase. +You could use Yandex kernel: https://github.com/yandex/smart which gives at least 5% performance increase. Network +------- When using IPv6, you must increase route cache. Linux kernels before 3.2 has awful bugs in IPv6 implementation. @@ -106,12 +127,15 @@ Prefer at least 10 Gbit network. 1 Gbit will also work, but much worse for repai ZooKeeper +--------- Probably you already have ZooKeeper for another purposes. It's Ok to use existing ZooKeeper installation if it is not overloaded. -Use recent version of ZooKeeper. At least 3.5 is Ok. Version in your linux package repository might be outdated. +Use recent version of ZooKeeper. At least 3.5 is Ok. Version in your Linux package repository might be outdated. With default settings, ZooKeeper have time bomb: -"A ZooKeeper server will not remove old snapshots and log files when using the default configuration (see autopurge below), this is the responsibility of the operator." + + A ZooKeeper server will not remove old snapshots and log files when using the default configuration (see autopurge below), this is the responsibility of the operator. + You need to defuse the bomb. diff --git a/doc/reference/ru/operations/tips.rst b/doc/reference/ru/operations/tips.rst new file mode 100644 index 00000000000..4d667d1f23d --- /dev/null +++ b/doc/reference/ru/operations/tips.rst @@ -0,0 +1,141 @@ +Советы по эксплуатации +====================== + +Процессор +--------- + +Требуется поддержка набора инструкций SSE 4.2. Современные процессоры (с 2008 года) его поддерживают. + +При выборе между процессорами с большим числом ядер с немного меньшей тактовой частотой и процессором с меньшим числом ядер с высокой тактовой частотой, первый вариант более предпочтителен. +Например, 16 ядер с 2600 MHz лучше, чем 8 ядер 3600 MHz. + +Hyper-Threading +--------------- + +Hyper-threading лучше не отключать. Некоторые запросам он помогает, а некоторым — нет. + + +Turbo-Boost +----------- + +Turbo-Boost крайне не рекомендуется отключать. При типичной нагрузке он значительно улучшает производительность. +Можно использовать ``turbostat`` для просмотра реальной тактовой частоты процессора под нагрузкой. + + +CPU scaling governor +-------------------- + +Нужно всегда использовать ``performance`` scaling governor. ``ondemand`` scaling governor работает намного хуже при постоянно высоком спросе. + + .. code-block:: bash + + sudo echo 'performance' | tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor + + +Ограничение CPU +--------------- +Процессоры могут перегреваться. С помощью ``dmesg`` можно увидеть, если тактовая частота процессора была ограничена из-за перегрева. +Также ограничение может устанавливаться снаружи на уровне датацентра. С помощью ``turbostat`` можно за этим наблюдать под нагрузкой. + + +Оперативная память +------------------ + +Для небольших объемов данных (до ~200 Гб в сжатом виде) лучше всего использовать столько памяти не меньше, чем объем данных. +Для больших объемов данных, при выполнении интерактивных (онлайн) запросов, стоит использовать разумный объем оперативной памяти (128 Гб или более) для того, чтобы горячее подмножество данных поместилось в кеше страниц. +Даже для объемов данных в ~50 Тб на сервер, использование 128 Гб оперативной памяти намного лучше для производительности выполнения запросов, чем 64 Гб. + + +Файл подкачки +------------- + +Всегда отключайте файл подкачки. Единственной причиной этого не делать может быть только использование ClickHouse на личном ноутбуке. + + +Huge pages +---------- + +Механизм прозрачных huge pages нужно отключить. Он мешает работе аллокаторов памяти, что приводит к значительной деградации производительности. + + .. code-block:: bash + + echo 'never' | sudo tee /sys/kernel/mm/transparent_hugepage/enabled + +С помощью ``perf top`` можно наблюдать за временем, проведенном в ядре операционной системы для управления памятью. +Постоянные huge pages так же не нужно аллоцировать. + + +Подсистема хранения +------------------- + +Если ваш бюджет позволяет использовать SSD, используйте SSD. +В противном случае используйте HDD. SATA HDDs 7200 RPM подойдут. + +Предпочитайте много серверов с локальными жесткими дисками вместо меньшего числа серверов с подключенными дисковыми полками. +Но для хранения архивов с редкими запросами полки всё же подходят. + + +RAID +---- + +При использовании HDD можно объединить их RAID-10, RAID-5, RAID-6 или RAID-50. +Лучше использовать программный RAID в Linux (``mdadm``). Лучше не использовать LVM. +При создании RAID-10, нужно выбрать ``far`` расположение. +Если бюджет позволяет, лучше выбрать RAID-10. + +На более чем 4 дисках вместо RAID-5 нужно использовать RAID-6 (предпочтительнее) или RAID-50. +При использовании RAID-5, RAID-6 или RAID-50, нужно всегда увеличивать stripe_cache_size, так как значение по умолчанию выбрано не самым удачным образом. + + .. code-block:: bash + + echo 4096 | sudo tee /sys/block/md2/md/stripe_cache_size + +Точное число стоит вычислять из числа устройств и размер блока по формуле: ``2 * num_devices * chunk_size_in_bytes / 4096``. + +Размер блока в 1024 Кб подходит для всех конфигураций RAID. +Никогда не указывайте слишком маленький или слишком большой размер блока. + + +На SSD можно использовать RAID-0. +Вне зависимости от использования RAID, всегда используйте репликацию для безопасности данных. + +Включите NCQ с длинной очередью. Для HDD стоит выбрать планировщик CFQ, а для SSD — noop. Не стоит уменьшать настройку readahead. +На HDD стоит включать write ahread. + + +Файловая система +---------------- + +Ext4 — самый проверенный вариант, стоит указывать опции монтирования ``noatime,nobarrier``. +XFS также подходит, но не так тщательно протестирована в сочитании с ClickHouse. +Большинство других файловых систем также должны нормально работать. Файловые системы с отложенной аллокацией работают лучше. + + +Ядро Linux +---------- + +Не используйте слишком старое ядро Linux. В 2015 году 3.18.19 — достаточно свежее. +Рассмотрите возможность использования сборки ядра от Яндекса: https://github.com/yandex/smart — это дает прирост в производительности не менее 5%. + + +Сеть +---- + +При использовании IPv6, стоит увеличить размер кеша маршрутов. +Ядра Linux до 3.2 имели массу проблем в реализации IPv6. + +Предпочитайте как минимум 10 Гбит сеть. 1 Гбит также будет работать, но намного хуже для починки реплик с десятками терабайт данных или для обработки распределенных запросов с большим объемом промежуточных данных. + + +ZooKeeper +--------- + +Вероятно вы уже используете ZooKeeper для других целей. Можно использовать ту же инсталляцию ZooKeeper, если она не сильно перегружена. + +Лучше использовать свежую версию ZooKeeper, как минимум 3.5. Версия в стабильных дистрибутивах Linux может быть устаревшей. + +С настройками по умолчанию, ZooKeeper является бомбой замедленного действия: + + Сервер ZooKeeper не будет удалять файлы со старыми снепшоты и логами при использовании конфигурации по умолчанию (см. autopurge), это является ответственностью оператора. + +Эту бомбу нужно обезвредить.