Итак, если коротко, то ClickHouse — это высокопроизводительная аналитическая СУБД с открытым исходным кодом от компании Яндекс.
ClickHouse очень быстро отвечает на аналитические запросы по обновляемым в реальном времени данным, поэтому её можно использовать в интерактивных приложениях. Система способна масштабироваться до десятков триллионов записей и петабайтов данных. Использование ClickHouse открывает возможности, которые раньше было трудно даже представить: вы можете сохранять весь поток данных без предварительной агрегации и быстро получать отчёты в любых разрезах.
Давайте установим СУБД ClickHouse на Debian 9 (stretch).
(Статья актуализирована 14.08.2019)
Для начала немного полезных ссылок на официальные источники и полезные статьи в Интернет.
Официальный сайт ClickHouse
Официальный блог
Вся документация на одной странице, по разделам.
Видео-презентация «ClickHouse: как сделать самую быструю распределённую аналитическую СУБД» (Виктор Тарнавский)
Статья на Habrahabr: «ClickHouse: очень быстро и очень удобно» (Виктор Тарнавский)
Статья на Habrahabr: «Как запустить ClickHouse своими силами и выиграть джекпот» (Компания СМИ2)
Статья на Habrahabr: «Масштабирование ClickHouse, управление миграциями и отправка запросов из PHP в кластер» (Компания СМИ2)
Установка на Debian 9
Исходные данные: Debian 9.9 (stretch)
Системные требования ClickHouse: Linux, x86_64 с поддержкой SSE 4.2.
Поэтому проверим эти требования:
uname -sm
Результат:
Linux x86_64
Отлично.
И поддержка SSE 4.2:
grep -q sse4_2 /proc/cpuinfo && echo "SSE 4.2 supported" || echo "SSE 4.2 not supported"
Результат:
SSE 4.2 supported
Отлично, продолжаем.
Добавление репозитария:
wget --quiet -O - https://repo.yandex.ru/clickhouse/CLICKHOUSE-KEY.GPG | apt-key add - echo "deb http://repo.yandex.ru/clickhouse/deb/stable/ main/" > /etc/apt/sources.list.d/clickhouse.list apt-get update
Небольшое отступление перед установкой: Иногда в Clickhouse появляются баги, которые мешают запустить его. На текущий момент 30.12.2019 есть так же баг, который не позволяет запустить Clickhouse после установки или обновления, для исправления проблемы нужно открыть файл /etc/ssl/openssl.cnf и в секции [default_conf] закоментировать опцию ssl_conf
ess_cert_id_alg = sha1 # algorithm to compute certificate # identifier (optional, default: sha1) [default_conf] #ssl_conf = ssl_sect [ssl_sect] ...
Установка ClickHouse:
apt-get install -y clickhouse-server clickhouse-client
В процессе установки clickhouse-server запросит нас создать пароль пользователя default, придумываем сложный пароль и вводим.
Если Вы вдруг захотите изменить этот пароль, то он находиться в файле /etc/clickhouse-server/users.d/default-password.xml в открытом виде и к сожалению доступен всем пользователям на чтение :(
Запустим ClickHouse:
/etc/init.d/clickhouse-server start
Проверим, что ClickHouse запустился и слушает порты 8123, 9000, 9009:
# netstat -ltupn|grep clickhouse tcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN 27925/clickhouse-se tcp 0 0 127.0.0.1:9009 0.0.0.0:* LISTEN 27925/clickhouse-se tcp 0 0 127.0.0.1:8123 0.0.0.0:* LISTEN 27925/clickhouse-se
Выполним первоначальную настройку ClickHouse.
Как я уже написал выше, пароль который мы ввели был записан в файл /etc/clickhouse-server/users.d/default-password.xml в открытом виде, что не очень хорошо. Давайте исправим это.
Разработчики позаботились о том чтобы не хранить пароль в открытом виде в файле конфигурации, а хранить только его хэш, создадим его:
mypasswd="MYPASSWORD" echo -n "$mypasswd" | sha256sum | tr -d ' -'
Теперь запишем хэш пароля в файл /etc/clickhouse-server/users.d/default-password.xml
sha256_mypasswd=$(echo -n "$mypasswd" | sha256sum | tr -d ' -') echo "<yandex><users><default><password remove=\"remove\"></password><password_sha256_hex>$sha256_mypasswd</password_sha256_hex></default></users></yandex>" > /etc/clickhouse-server/users.d/default-password.xml
Важно помнить, что под пользователем default по прежнему разрешено подключаться с любого IP адреса.
Установим ограничение (в байтах) на использование памяти при запросах в 20 MB:
echo "<yandex><profiles><default><max_memory_usage replace=\"replace\">20971520</max_memory_usage></default></profiles></yandex>" > /etc/clickhouse-server/users.d/default-memory.xml
Установим размер кеша (в байтах) для несжатых данных, используемых движками таблиц семейства MergeTree равным 100 MB (по умолчанию 8GB, что для серверов с небольшим объемом ОЗУ чересчур много):
echo "<yandex><uncompressed_cache_size>104857600</uncompressed_cache_size></yandex>" > /etc/clickhouse-server/users.d/cache.xml
Включим использование кэша разжатых блоков (по умолчанию выключен):
echo "<yandex><profiles><default><use_uncompressed_cache replace=\"replace\">1</use_uncompressed_cache></default></profiles></yandex>" > /etc/clickhouse-server/users.d/default-cache.xml
Перезапустим ClickHouse для применения параметров:
/etc/init.d/clickhouse-server restart
Проверяем:
/etc/init.d/clickhouse-server status
Результат:
clickhouse-server service is running
Попробуем подключиться консольным клиентом:
clickhouse-client -u default --password MYPASSWORD -m
Если все сделано правильно, то мы увидим приглашение консольного клиента вида:
ClickHouse client version 19.13.2.19 (official build). Connecting to localhost:9000 as user default. Connected to ClickHouse server version 19.13.2 revision 54425. myserver.local :)
ClickHouse так же поддерживает защищенные соединения, для этого нужно создать SSL-сертификат и настроить порт.
Создаем SSL-сертификат для подключения к ClickHouse с использованием шифрования:
openssl req -subj "/CN=localhost" -new -newkey rsa:2048 -days 3650 -nodes -x509 -keyout /etc/clickhouse-server/server.key -out /etc/clickhouse-server/server.crt openssl dhparam -out /etc/clickhouse-server/dhparam.pem 2048 chmod 640 /etc/clickhouse-server/{dhparam.pem,server.key,server.crt} chown clickhouse:clickhouse /etc/clickhouse-server/{dhparam.pem,server.key,server.crt}
Сертификат мы создали, для того чтобы использовать безопасное соединение нужно в файле конфигурации /etc/clickhouse-server/config.xml раскоментировать настройку https_port и tcp_port_secure:
<https_port>8443</https_port> <tcp_port_secure>9440</tcp_port_secure>
Т.к. у нас самоподписной сертификат, то в файле /etc/clickhouse-client/config.xml нужно изменить настройку
<invalidCertificateHandler> <name>AcceptCertificateHandler</name> </invalidCertificateHandler>
Теперь перезапускаем СlickHouse:
/etc/init.d/clickhouse-server restart
Проверяем:
/etc/init.d/clickhouse-server status
Результат:
clickhouse-server service is running
Проверяем открытые порты:
# netstat -ltupn|grep clickhouse tcp 0 0 127.0.0.1:9009 0.0.0.0:* LISTEN 19009/clickhouse-se tcp 0 0 127.0.0.1:8443 0.0.0.0:* LISTEN 19009/clickhouse-se tcp 0 0 127.0.0.1:8123 0.0.0.0:* LISTEN 19009/clickhouse-se tcp 0 0 127.0.0.1:9440 0.0.0.0:* LISTEN 19009/clickhouse-se tcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN 19009/clickhouse-se
Как мы видим, теперь ClickHouse может принимать соединения с шифрованием по порту 8443 и 9440
Попробуем подключиться консольным клиентом с использованием TLS (опция -s):
clickhouse-client -u default --password MYPASSWORD -m -s
Если все сделано правильно, то мы увидим приглашение консольного клиента вида:
ClickHouse client version 19.13.2.19 (official build). Connecting to localhost:9440 as user default. Connected to ClickHouse server version 19.13.2 revision 54425. myserver.local :)
Порт на который мы подключились будет 9440.
В следующей статье мы попробуем создать тестовую БД, наполнить её данными, рассмотрим вопросы бэкапа базы и восстановления, подключим GUI clickhouse-frontend.
На этом все, до скорых встреч. Если у Вас возникли вопросы или Вы хотите чтобы я помог Вам, то Вы всегда можете связаться со мной разными доступными способами.
Профессионально занимаюсь системным администрированием Linux -серверов и баз данных (MySQL, POstgreSQL) на протяжении последних 24 лет.
Михаил спасибо вам очень крутая статья!!! Описанно очень круто!!!
когда следующая статья?
Наверно не скоро, пока я прекратил использование ClickHouse. Но если у Вас есть вопросы, то пишите на мой email, я постараюсь ответить.