Установка и первоначальная настройка СУБД 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 появляются баги, которые мешают запустить его. На текущий момент 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 нужно изменить настройку 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.

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


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

avatar
1000

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.

  Подписаться  
Уведомление о