Установка и первоначальная настройка СУБД ClickHouse на Debian Linux

Итак, если коротко, то 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:

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 нужно изменить настройку RejectCertificateHandler на AcceptCertificateHandler

            <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.

На этом все, до скорых встреч. Если у Вас возникли вопросы или Вы хотите чтобы я помог Вам, то Вы всегда можете связаться со мной разными доступными способами.


Хотите оставить комментарий?