...
Установка пакетов
Добавить репозиторий Яндекса в список репозиториев:
Блок кода language bash theme RDark sudo -s apt-get update echo "deb http://repo.yandex.ru/clickhouse/deb/stable/ main/" > /etc/apt/sources.list.d/clickhouse.list
Установите пакеты:
Блок кода language bash theme RDark sudo apt-get install dirmngr # optional sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv E0C56BD4 # optional sudo apt-get update sudo apt-get install clickhouse-client clickhouse-server
При установке пакета
clickhouse-server
запрашивается пароль для пользователяdefault
, при пропуске этого пункта будет установлен пустой пароль
Настройка конфигурации
- Настройка tcp-порта, по которому будет идти подключение клиента командной строки, , так как порт по умолчанию (9000/tcp) занят Eltex Portal
Замена порта сервера. Создать в
/etc/clickhouse-server/config.d/
файл listen.xml
Блок кода theme RDark title listen.xml <?xml version="1.0"?> <yandex> <tcp_port>9003</tcp_port> <!-- <listen_host>::</listen_host> --> </yandex>
Для доступа до БД с другого хоста необходимо так же изменить значение listen_hostЗамена порта по умолчанию клиента командной строки. Создать в
/etc/clickhouse-client/conf.d/
файлport.xml
Блок кода theme RDark title port.xml <config> <port>9003</port> </config>
Добавление пользователя для сервисов Eltex. Создать в
/etc/clickhouse-server/users.d/
файлeltex_user.xml
Блок кода theme RDark title eltex_user.xml <?xml version="1.0"?> <yandex> <!-- Profiles of settings. --> <profiles> <eltex> <!-- Maximum memory usage for processing single query, in bytes. (default 10Gb) --> <max_memory_usage>10000000000</max_memory_usage> <!-- Maximum execution time for query, in seconds. --> <max_execution_time>60</max_execution_time> <timeout_overflow_mode>throw</timeout_overflow_mode> </eltex> </profiles> <users> <javauser> <password_sha256_hex>ce1710d7149c4daf1b38e20f4884d25660bf7da9e3ac61f1247a1a04bf50d779</password_sha256_hex> <profile>eltex</profile> <networks incl="networks" replace="replace"> <ip>::/0</ip> </networks> <quota>default</quota> </javauser> </users> </yandex>
В профиле задаются ограничения для запросов, исходящих от пользователя с данным профилем.
Для создания собственного пользователя можно в директории
/etc/clickhouse-server/users.d/
создать файлuser_name.xml
. Добавление пользователя отдельным файлом позволит создать его на другой ноде просто скопировав файл.
Настройка пользователя имеет следующий вид:Блок кода theme RDark title user_name.xml <?xml version="1.0"?> <yandex> <users> <!-- If user name was not specified, 'default' user is used. --> <user_name> <password></password> <!-- Or --> <password_sha256_hex></password_sha256_hex> <networks incl="networks" replace="replace"> </networks> <profile>profile_name</profile> <quota>default</quota> <databases> <database_name> <table_name> <filter>expression</filter> <table_name> </database_name> </databases> </user_name> <!-- Other users settings --> </users> </yandex>
Пароль можно указать в текстовом виде или в виде SHA256 (шестнадцатеричный формат).
Чтобы назначить пароль в текстовом виде (не рекомендуется), поместите его в элементpassword
. Можно оставить пустым. Например:Блок кода theme RDark <password>qwerty</password>
Чтобы назначить пароль в виде SHA256, поместите хэш в элемент
password_sha256_hex
. НапрмерНапример:Блок кода theme RDark <password_sha256_hex>d7fa342d4ec19b431ece9eea4a67fbb88ff0f72b2f332b7384de7981129e3190</password_sha256_hex>
Пример создания пароля в командной строке:
Блок кода language bash theme RDark PASSWORD=$(base64 < /dev/urandom | head -c8); echo "$PASSWORD"; echo -n "$PASSWORD" | sha256sum | tr -d '-'
Первая строка результата — пароль. Вторая строка — соответствующий ему хэш
SHA256
.В блоке networks указывается список сетей, из которых пользователь может подключиться к серверу ClickHouse.
Каждый элемент списка имеет одну из следующих форм:<ip>
— IP-адрес или маска подсети.Блок кода Примеры: `213.180.204.3`, `10.0.0.1/8`, `10.0.0.1/255.255.255.0`, `2a02:6b8::3`, `2a02:6b8::3/64`, `2a02:6b8::3/ffff:ffff:ffff:ffff::`.
<host>
— Имя хоста.Блок кода Пример: `example01.host.ru`.
Для проверки доступа выполняется DNS-запрос, и все возвращенные IP-адреса сравниваются с адресом клиента.<host_regexp>
— Регулярное выражение для имен хостов.
Подробнее про настройку пользователя: https://clickhouse.tech/docs/ru/operations/settings/settings-users/
- Настройка tcp-порта, по которому будет идти подключение клиента командной строки, , так как порт по умолчанию (9000/tcp) занят Eltex Portal
Запуск сервера
Блок кода language bash theme RDark sudo service clickhouse-server start
Создание БД radius и таблицы radacct
Подключиться к серверу через клиент командной строки. Для входа под дефолтным пользователем можно воспользоваться следующей командой:
Блок кода language bash theme RDark clickhouse-client
Если установлен пароль, то нужно добавить аргумент командной строки:
Блок кода language bash theme RDark clickhouse-client --password password
Если используется не пользователь по умолчанию, то подключиться к клиенту командной строки можно так:
Блок кода language bash theme RDark clickhouse-client --user username --password password
Можно подключаться с удаленного хоста, если там установлен клиент командной строки, с помощью аргумента командной строки
-h
или--host
Cоздать базу данных:
Блок кода language sql theme RDark CREATE DATABASE IF NOT EXISTS radius
Создать таблицу для записи аккаунтинга:
Блок кода language sql theme RDark CREATE TABLE IF NOT EXISTS radius.radacct ( acctsessionid String, acctuniqueid String, username String, groupname String DEFAULT '', domain String, realm String DEFAULT '', nasipaddress String DEFAULT '', nasportid String DEFAULT '', nasporttype String DEFAULT '', acctstarttime DateTime, acctupdatetime DateTime, acctstoptime DateTime, acctinterval UInt32, acctsessiontime UInt32, acctauthentic String DEFAULT '', connectinfo_start String DEFAULT '', connectinfo_stop String DEFAULT '', acctinputoctets UInt64, acctoutputoctets UInt64, calledstationid String, callingstationid FixedString(17), acctterminatecause String DEFAULT '', servicetype String DEFAULT '', framedprotocol String DEFAULT '', framedipaddress String DEFAULT '', acctstartdelay UInt32 DEFAULT 0, acctstopdelay UInt32 DEFAULT 0, xascendsessionsvrkey String DEFAULT '', inputpacketsdrop UInt64, outputpacketsdrop UInt64, inputbytesdrop UInt64, outputbytesdrop UInt64, outputpacketlost UInt64, acctl2interface String DEFAULT '', acctapdomain String, acctapid String DEFAULT '', acctssid String, security UInt8 DEFAULT 1, ssidtype UInt8 DEFAULT 0 ) ENGINE = MergeTree PARTITION BY (toYYYYMM(acctstarttime), ssidtype) ORDER BY (acctstarttime);
Если не получается создать таблицу с помощью команды выше, то можно использовать команду на создание без табуляций и переносов:
Блок кода language sql theme RDark CREATE TABLE IF NOT EXISTS radius.radacct (acctsessionid String, acctuniqueid String, username String, groupname String DEFAULT '', domain String, realm String DEFAULT '', nasipaddress String DEFAULT '', nasportid String DEFAULT '', nasporttype String DEFAULT '', acctstarttime DateTime, acctupdatetime DateTime, acctstoptime DateTime, acctinterval UInt32, acctsessiontime UInt32, acctauthentic String DEFAULT '', connectinfo_start String DEFAULT '', connectinfo_stop String DEFAULT '', acctinputoctets UInt64, acctoutputoctets UInt64, calledstationid String, callingstationid FixedString(17), acctterminatecause String DEFAULT '', servicetype String DEFAULT '', framedprotocol String DEFAULT '', framedipaddress String DEFAULT '', acctstartdelay UInt32 DEFAULT 0, acctstopdelay UInt32 DEFAULT 0, xascendsessionsvrkey String DEFAULT '', inputpacketsdrop UInt64, outputpacketsdrop UInt64, inputbytesdrop UInt64, outputbytesdrop UInt64, outputpacketlost UInt64, acctl2interface String DEFAULT '', acctapdomain String, acctapid String DEFAULT '', acctssid String, security UInt8 DEFAULT 1, ssidtype UInt8 DEFAULT 0) ENGINE = MergeTree PARTITION BY (toYYYYMM(acctstarttime), ssidtype) ORDER BY (acctstarttime);
...
Установка пакетов
Добавить репозиторий Яндекса в список репозиториев:
Блок кода language bash theme RDark sudo -s apt-get update echo "deb http://repo.yandex.ru/clickhouse/deb/stable/ main/" > /etc/apt/sources.list.d/clickhouse.list
Установите пакеты:
Блок кода language bash theme RDark sudo apt-get install dirmngr # optional sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv E0C56BD4 # optional sudo apt-get update sudo apt-get install clickhouse-client clickhouse-server
При установке пакета
clickhouse-server
запрашивается пароль для пользователяdefault
, при пропуске этого пункта будет установлен пустой пароль.
Настройка конфигурации
- Настройка tcp-порта, по которому будет идти подключение клиента командной строки, , так как порт по умолчанию (9000/tcp) занят Eltex Portal
Замена порта сервера. Создать в
/etc/clickhouse-server/config.d/
файл listen.xml
Блок кода theme RDark title listen.xml <?xml version="1.0"?> <yandex> <tcp_port>9003</tcp_port> <!-- <listen_host>::</listen_host> --> </yandex>
Для доступа до БД с другого хоста необходимо так же изменить значение listen_hostЗамена порта по умолчанию клиента командной строки. Создать в
/etc/clickhouse-client/conf.d/
файлport.xml
Блок кода theme RDark title port.xml <config> <port>9003</port> </config>
- Добавление пользователя для сервисов Eltex. Создать в
/etc/clickhouse-server/users.d/
файлeltex_user.xml
Добавление пользователя для сервисов Eltex. Создать в/etc/clickhouse-server/users.d/
файлeltex_user.xml
Блок кода theme RDark title eltex_user.xml <?xml version="1.0"?> <yandex> <!-- Profiles of settings. --> <profiles> <eltex> <!-- Maximum memory usage for processing single query, in bytes. (default 10Gb) --> <max_memory_usage>10000000000</max_memory_usage> <!-- Maximum execution time for query, in seconds. --> <max_execution_time>60</max_execution_time> <timeout_overflow_mode>throw</timeout_overflow_mode> </eltex> </profiles> <users> <javauser> <password_sha256_hex>ce1710d7149c4daf1b38e20f4884d25660bf7da9e3ac61f1247a1a04bf50d779</password_sha256_hex> <profile>eltex</profile> <networks incl="networks" replace="replace"> <ip>::/0</ip> </networks> <quota>default</quota> </javauser> </users> </yandex>
В профиле задаются ограничения для запросов, исходящих от пользователя с данным профилем. Для создания собственного пользователя можно в директории
/etc/clickhouse-server/users.d/
создать файлuser_name.xml
. Добавление пользователя отдельным файлом позволит создать его на другой ноде просто скопировав файл.
Настройка пользователя имеет следующий вид:Блок кода theme RDark title user_name.xml <?xml version="1.0"?> <yandex> <users> <!-- If user name was not specified, 'default' user is used. --> <user_name> <password></password> <!-- Or --> <password_sha256_hex></password_sha256_hex> <networks incl="networks" replace="replace"> </networks> <profile>profile_name</profile> <quota>default</quota> <databases> <database_name> <table_name> <filter>expression</filter> <table_name> </database_name> </databases> </user_name> <!-- Other users settings --> </users> </yandex>
Пароль можно указать в текстовом виде или в виде SHA256 (шестнадцатеричный формат).
Чтобы назначить пароль в текстовом виде (не рекомендуется), поместите его в элементpassword
. Можно оставить пустым. Например:Блок кода theme RDark <password>qwerty</password>
Чтобы назначить пароль в виде SHA256, поместите хэш в элемент
password_sha256_hex
. НапрмерНапример:Блок кода theme RDark <password_sha256_hex>d7fa342d4ec19b431ece9eea4a67fbb88ff0f72b2f332b7384de7981129e3190</password_sha256_hex>
Пример создания пароля в командной строке:
Блок кода language bash theme RDark PASSWORD=$(base64 < /dev/urandom | head -c8); echo "$PASSWORD"; echo -n "$PASSWORD" | sha256sum | tr -d '-'
Первая строка результата — пароль. Вторая строка — соответствующий ему хэш
SHA256
.В блоке networks указывается список сетей, из которых пользователь может подключиться к серверу ClickHouse.
Каждый элемент списка имеет одну из следующих форм:<ip>
— IP-адрес или маска подсети.Блок кода Примеры: `213.180.204.3`, `10.0.0.1/8`, `10.0.0.1/255.255.255.0`, `2a02:6b8::3`, `2a02:6b8::3/64`, `2a02:6b8::3/ffff:ffff:ffff:ffff::`.
<host>
— Имя хоста.Блок кода Пример: `example01.host.ru`.
Для проверки доступа выполняется DNS-запрос, и все возвращенные IP-адреса сравниваются с адресом клиента.<host_regexp>
— Регулярное выражение для имен хостов.
Подробнее про настройку пользователя: https://clickhouse.tech/docs/ru/operations/settings/settings-users/
Добавление настроек для репликации. Создать файл
/etc/metrika.xml
Блок кода theme RDark title metrika.xml <?xml version="1.0"?> <yandex> <zookeeper-servers> <node index="1"> <host>example1</host> <port>2181</port> </node> <node index="2"> <host>example2</host> <port>2181</port> </node> <node index="3"> <host>example3</host> <port>2181</port> </node> </zookeeper-servers> <macros> <shard>1</shard> <replica>replica_name</replica> </macros> </yandex>
В
zookeeper-servers
указывается Zookeeper-кластер или один сервер. Вmacros
указывается идентификатор реплики, который будет указан в конфигурации zookeeper'а. Shard - номер шарда при использовании шардирования (разделение данных по серверам, не используется), replica - уникальное имя реплики.Если в конфигурационном файле не настроен ZooKeeper, то вы не сможете создать реплицируемые таблицы, а уже имеющиеся реплицируемые таблицы будут доступны в режиме только на чтение.
Добавить хосты ZooKeeper'а и нод ClickHouse'а в
/etc/hosts.
- Настройка tcp-порта, по которому будет идти подключение клиента командной строки, , так как порт по умолчанию (9000/tcp) занят Eltex Portal
Запуск сервиса
Блок кода language bash theme RDark sudo service clickhouse-server start
Итоговую конфигурацию, на которой будет работать сервер, можно посмотреть в папке /var/lib/clickhouse/preprocessed_configs, как указано при запуске сервера:
Блок кода $ sudo service clickhouse-server status ● clickhouse-server.service - ClickHouse Server (analytic DBMS for big data) Loaded: loaded (/etc/systemd/system/clickhouse-server.service; enabled; vendor preset: enabled) Active: active (running) since Tue 2021-11-02 17:18:19 +07; 4min 54s ago Main PID: 3853 (clckhouse-watch) Tasks: 159 Memory: 154.4M CPU: 6.660s CGroup: /system.slice/clickhouse-server.service ├─3853 clickhouse-watchdog --config=/etc/clickhouse-server/config.xml --pid-file=/run/clickhouse-server/clickhouse-server.pid └─3856 /usr/bin/clickhouse-server --config=/etc/clickhouse-server/config.xml --pid-file=/run/clickhouse-server/clickhouse-server.pid Nov 02 17:18:19 ubuntu clickhouse-server[3853]: Processing configuration file '/etc/clickhouse-server/config.xml'. Nov 02 17:18:19 ubuntu clickhouse-server[3853]: Merging configuration file '/etc/clickhouse-server/config.d/listen.xml'. Nov 02 17:18:19 ubuntu clickhouse-server[3853]: Merging configuration file '/etc/clickhouse-server/config.d/memmory.xml'. Nov 02 17:18:19 ubuntu clickhouse-server[3853]: Saved preprocessed configuration to '/var/lib/clickhouse/preprocessed_configs/config.xml'. Nov 02 17:18:19 ubuntu clickhouse-server[3853]: Processing configuration file '/etc/clickhouse-server/users.xml'. Nov 02 17:18:19 ubuntu clickhouse-server[3853]: Merging configuration file '/etc/clickhouse-server/users.d/default-password.xml'. Nov 02 17:18:19 ubuntu clickhouse-server[3853]: Merging configuration file '/etc/clickhouse-server/users.d/eltex_one_host.xml'. Nov 02 17:18:19 ubuntu clickhouse-server[3853]: Merging configuration file '/etc/clickhouse-server/users.d/eltex_user.xml'. Nov 02 17:18:19 ubuntu clickhouse-server[3853]: Include not found: networks Nov 02 17:18:19 ubuntu clickhouse-server[3853]: Saved preprocessed configuration to '/var/lib/clickhouse/preprocessed_configs/users.xml'.
Создание БД radius и таблицы radacct
Подключиться к серверу через клиент командной строки. Для входа под дефолтным пользователем можно воспользоваться следующей командой:
Блок кода language bash theme RDark clickhouse-client
Если установлен пароль, то нужно добавить аргумент командной строки:
Блок кода language bash theme RDark clickhouse-client --password password
Если используется не пользователь по умолчанию, то подключиться к клиенту командной строки можно так:
Блок кода language bash theme RDark clickhouse-client --user username --password password
Можно подключаться с удаленного хоста, если там установлен клиент командной строки, с помощью аргумента командной строки
-h
или--host
Cоздать базу данных:
Блок кода language sql theme RDark CREATE DATABASE IF NOT EXISTS radius
Создать таблицу для записи аккаунтинга:
Блок кода language sql theme RDark CREATE TABLE IF NOT EXISTS radius.radacct ( acctsessionid String, acctuniqueid String, username String, groupname String DEFAULT '', domain String, realm String DEFAULT '', nasipaddress String DEFAULT '', nasportid String DEFAULT '', nasporttype String DEFAULT '', acctstarttime DateTime, acctupdatetime DateTime, acctstoptime DateTime, acctinterval UInt32, acctsessiontime UInt32, acctauthentic String DEFAULT '', connectinfo_start String DEFAULT '', connectinfo_stop String DEFAULT '', acctinputoctets UInt64, acctoutputoctets UInt64, calledstationid String, callingstationid FixedString(17), acctterminatecause String DEFAULT '', servicetype String DEFAULT '', framedprotocol String DEFAULT '', framedipaddress String DEFAULT '', acctstartdelay UInt32 DEFAULT CAST(0, 'UInt32'), acctstopdelay UInt32 DEFAULT CAST(0, 'UInt32'), xascendsessionsvrkey String DEFAULT '', inputpacketsdrop UInt64, outputpacketsdrop UInt64, inputbytesdrop UInt64, outputbytesdrop UInt64, outputpacketlost UInt64, acctl2interface String DEFAULT '', acctapdomain String, acctapid String DEFAULT '', acctssid String, security UInt8 DEFAULT 1, ssidtype UInt8 DEFAULT 0 ) ENGINE = ReplicatedMergeTree('/clickhouse/tables/{shard}/radacct', '{replica}') PARTITION BY (toYYYYMM(acctstarttime), ssidtype) ORDER BY (acctstarttime) SETTINGS index_granularity = 8192;
Если не получается создать таблицу с помощью команды выше, то можно использовать команду на создание без табуляций и переносов:
Блок кода language sql theme RDark CREATE TABLE IF NOT EXISTS radius.radacct (acctsessionid String, acctuniqueid String, username String, groupname String DEFAULT '', domain String, realm String DEFAULT '', nasipaddress String DEFAULT '', nasportid String DEFAULT '', nasporttype String DEFAULT '', acctstarttime DateTime, acctupdatetime DateTime, acctstoptime DateTime, acctinterval UInt32, acctsessiontime UInt32, acctauthentic String DEFAULT '', connectinfo_start String DEFAULT '', connectinfo_stop String DEFAULT '', acctinputoctets UInt64, acctoutputoctets UInt64, calledstationid String, callingstationid FixedString(17), acctterminatecause String DEFAULT '', servicetype String DEFAULT '', framedprotocol String DEFAULT '', framedipaddress String DEFAULT '', acctstartdelay UInt32 DEFAULT CAST(0, 'UInt32'), acctstopdelay UInt32 DEFAULT CAST(0, 'UInt32'), xascendsessionsvrkey String DEFAULT '', inputpacketsdrop UInt64, outputpacketsdrop UInt64, inputbytesdrop UInt64, outputbytesdrop UInt64, outputpacketlost UInt64, acctl2interface String DEFAULT '', acctapdomain String, acctapid String DEFAULT '', acctssid String, security UInt8 DEFAULT 1, ssidtype UInt8 DEFAULT 0) ENGINE = ReplicatedMergeTree('/clickhouse/tables/{shard}/radacct', '{replica}') PARTITION BY (toYYYYMM(acctstarttime), ssidtype) ORDER BY (acctstarttime) SETTINGS index_granularity = 8192;
Проверка работы репликации
Положить в одну из таблиц немного данных:
Блок кода language sql theme RDark INSERT INTO radius.radacct VALUES ('1', '', 'test', '', 'test', '', '1.1.1.1', '', '', 1262304000, 1262304000, 1262304000, 0, 0, '', '', '', 0, 0, '00-00-00-00-00-01:test', '00-00-00-00-00-01', '', '', '', '', 0, 0, '', 0, 0, 0, 0, 0, '', 'test', '', 'test', 1, 0)
Через некоторое время проверить вторую реплику. Увидеть, что данные реплицируются:
Блок кода language sql theme RDark SELECT * FROM radius.radacct
Удалить тестовые данные из обеих таблиц путем очистки таблицы:
Блок кода language sql theme RDark TRUNCATE TABLE radius.radacct
...