Установка и использование ClickHouse на Linux

Обновлено и опубликовано Опубликовано:

Используемые термины: ClickHouseLinux.

В данной инструкции мы разберемся с базовыми действиями по администрированию ClickHouse — установкой, настройкой и выполнением некоторых запросов. Мы будем работать на системах Linux — Ubuntu и Rocky Linux.

Установка и запуск ClickHouse

Перед установкой мы должны убедиться, что процессор на сервере поддерживает SSE версии 4.2. Это делается командой:

grep -q sse4_2 /proc/cpuinfo && echo "SSE 4.2 supported" || echo "SSE 4.2 not supported"

Мы должны увидеть:

SSE 4.2 supported

В противном случае, необходимо выполнить сборку. Подробнее процесс описан на сайте разработчика.

Мы же предполагаем, что наш сервер поддерживает нужную инструкцию процессора. Поэтому установка будет выполняться из репозитория.

В родных репозиториях deb и rpm нет ClickHouse. Для начала мы выполним их конфигурирование и уже после — установку базы данных. В зависимости от типа дистрибутива Linux, наши действия будут отличаться.

Установка на RPM

Для добавления репозитория мы будем использовать yum-utils:

yum install yum-utils

yum-config-manager --add-repo https://packages.clickhouse.com/rpm/clickhouse.repo

Теперь устанавливаем кликхаус командой:

yum install clickhouse-server clickhouse-client

Запускаем сервис и разрешаем его автозапуск:

systemctl enable clickhouse-server --now

Установка на Deb

Устанавливаем пакеты:

apt install apt-transport-https ca-certificates dirmngr

* где:

  • apt-transport-https — для возможности взаимодействовать с репозиторими по https.
  • ca-certificates — набор корневых сертификатов.
  • dirmngr — для управления сетевыми сертификатами.

Установим gpg-ключ репозитория с сервера ключей:

apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 8919F6BD2B48D754

Добавим репозиторий:

echo "deb https://packages.clickhouse.com/deb stable main" > /etc/apt/sources.list.d/clickhouse.list

Обновим кэш:

apt update

Можно устанавливать clickhouse:

apt install clickhouse-server clickhouse-client

Запускаем сервис и разрешаем его автозапуск:

systemctl enable clickhouse-server --now

Управление доступом

После установки clickhouse мы можем подключиться к серверу без ввода логина и пароля под пользователем default. Для этого достаточно в консоли ввести команду:

clickhouse-client

Для контроля доступа к базе в официальной документации рекомендуется использовать SQL-ориентированное управление. Нам необходимо выполнить следующие шаги:

  1. Включить SQL-ориентированный контроль доступа.
  2. Создать суперпользователя.
  3. Удалить доступ для пользователя default.

Рассмотрим эти шаги подробнее.

1) Открываем файл:

vi /etc/clickhouse-server/users.xml

В разделе users для пользователя default задаем опцию access_management:

<clickhouse>
    ...
    <users>
        ...
        <default>
            ...
            <access_management>1</access_management>
        </default>
    </users>
    ...
</clickhouse>

* желтым показана опция, которую необходимо задать в значение 1. В моем примере было достаточно снять с нее комментарий.

Для применения настроек перезапускаем сервис:

systemctl restart clickhouse-server

2) Для создания пользователя подключаемся к серверу:

clickhouse-client

Создаем учетную запись для суперпользователя:

:) CREATE USER root HOST LOCAL IDENTIFIED WITH sha256_password BY 'password';

* в данном примере мы создали пользователя root, которому можно подключаться только с локального хоста (HOST LOCAL) и паролем password.

Даем ему полные права на все базы и таблицы:

:) GRANT ALL ON *.* TO root WITH GRANT OPTION

Выходим из командной оболочки:

:) quit

Проверяем доступ, попробовав подключиться к серверу баз данных:

clickhouse-client -uroot --ask-password

Система запросит пароль. Вводим тот, что задали при создании пользователя (в нашем случае это password).

В итоге, мы должны увидеть приглашение на ввод SQL-команд:

:)

Теперь можно создать пользователей для подключения к базе. Команда подобна той, что мы использовали для создания пользователя root:

:) CREATE USER <имя пользователя> HOST LOCAL IDENTIFIED WITH sha256_password BY '<пароль>';

* подробнее процесс описан на официальном сайте.

Задать права можно командой:

:) GRANT ALL ON <имя базы>.<имя таблицы> TO <имя пользователя>

Список пользователей можно посмотреть командой:

:) SELECT name, host_ip, host_names FROM system.users

3) В официальной документации рекомендуют ограничить доступ пользователю default, оставив права только на чтение.

Для этого открываем файл:

vi /etc/clickhouse-server/users.xml

В разделе users для default приводим опции к виду:

<clickhouse>
    ...
    <users>
        ...
        <default>
            ...
            <profile>readonly</profile>
            ...
            <access_management>0</access_management>
        </default>
    </users>
    ...
</clickhouse>

* в данном примере для пользователя default мы задаем профиль readonly и возвращаем значение для access_management в 0.

Перезапускаем сервис для сохранения настроек:

systemctl restart clickhouse-server

Подключение по сети

По умолчанию, кликхаус слушает запросы на локальной петле и не принимает запросов по сети. Для решения задачи нам нужно сделать следующее:

  1. Разрешить сервису обработку сетевых запросов.
  2. Создать учетную запись для подключения с удаленного хоста.

Рассмотрим пример настройки сервера и подключения к нему с клиента.

Настройка сервера

Открываем файл:

vi /etc/clickhouse-server/config.xml

Приводим опцию к виду:

<listen_host>0.0.0.0</listen_host>

* в данном примере мы говорим серверу слушать на всех сетевых адресах. Обратите внимание, что данная опция есть в конфигурационном файле, но она закомментирована.

Для применения настроек вводим:

systemctl restart clickhouse-server

Теперь заходим в оболочку SQL, например, с помощью ранее созданной учетной записью root:

clickhouse-client -uroot --ask-password

И создаем учетную запись для подключения по сети:

:) CREATE USER remote HOST IP '192.168.100.0/24' IDENTIFIED WITH sha256_password BY 'password';

* в нашем примере мы создадим учетную запись remote с паролем password для подключения к нашему серверу из локальной сети 192.168.100.0/24. Мы также можем указать не подсеть, а конкретный узел, с которого пользователю будет разрешено подключение.

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

а) для Iptables:

iptables -I INPUT -p tcp --dport 9000 -j ACCEPT

Для сохранения правил используем iptables-persistent:

apt install iptables-persistent

netfilter-persistent save

б) для firewalld:

firewall-cmd --add-port=9000/tcp --permanent

И применяем настройку:

firewall-cmd --reload

Теперь можно попробовать подключиться с другого узла.

Установка клиента

На сервер необходимо установить клиента. В зависимости от типа дистрибутива Linux, наши действия будут отличаться.

а) на RPM.

yum install yum-utils

yum-config-manager --add-repo https://packages.clickhouse.com/rpm/clickhouse.repo

Теперь устанавливаем клиента командой:

yum install clickhouse-client

б) на Deb.

Устанавливаем пакеты:

apt install apt-transport-https ca-certificates dirmngr

Установим gpg-ключ репозитория с сервера ключей:

apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 8919F6BD2B48D754

Добавим репозиторий:

echo "deb https://packages.clickhouse.com/deb stable main" > /etc/apt/sources.list.d/clickhouse.list

Обновим кэш:

apt update

Можно устанавливать клиента:

apt install clickhouse-client

Подключение к серверу

Теперь можно подключиться клиентом к серверу:

clickhouse-client -h192.168.100.15 -uremote --ask-password

* где:

  • 192.168.100.15 — адрес сервера, к которому мы подключаемся.
  • remote — имя учетной записи, под которой мы подключаемся к серверу.
  • ask-password — клиент должен запросить пароль для пользователя.

После ввода команды система попросить ввести пароль:

Password for user (remote):

В итоге, мы должны увидеть приглашение к вводу команд SQL:

:)

# Linux # Серверы # Базы данных # DevOps
Дмитрий Моск — частный мастер
Была ли полезна вам эта инструкция?

Да            Нет