/
Развёртывание кластера ClickHouse

Развёртывание кластера ClickHouse

Данная инструкция предназначена для развёртки трёх и более экземпляров ClickHouse.

ClickHouse кластер представляет собой распределённую систему баз данных, которая обеспечивает высокую производительность, масштабируемость и отказоустойчивость при работе с большими объёмами данных. Кластеры ClickHouse позволяют обрабатывать запросы к данным параллельно на нескольких серверах, обеспечивая тем самым быструю обработку запросов даже при значительных нагрузках. В таких кластерах данные могут дублироваться между узлами, что повышает надёжность системы и снижает риск потери информации в случае сбоя одного из узлов.

В Visiology реализована возможность управления репликацией наборов данных на нескольких серверах с использованием СУБД ClickHouse, что позволяет обеспечить высокую отказоустойчивость и производительность системы.

Пример конфигурации:

scheme1.png

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

scheme2.png

Развёртывание кластера

Для развертывания кластера необходимо выполнить следующие шаги:

  1. Добавьте в Docker Swarm все используемые для загрузки сервера. Для этого необходимо сделать следующее:

    • на главном сервере выполните следующую команду для получения токена соединения для рабочих узлов:

      docker swarm join-token worker
    • на остальных серверах, для добавления рабочего узла, выполните команду с полученным токеном. Например:

      docker swarm join \ --token SWMTKN-1-49nj1cmql0jkz5s954yi3oex3nedyz0fb0xx14ie39trti4wxv-8vxv8rssmk743ojnwacrr2e7c \ 192.168.99.100:2377
    • убедитесь, что в Swarm указано нужное количество узлов:

      docker node ls
  2. Выполните скрипт /var/lib/visiology/scripts/v3/utils/make_ch_fast_loading.sh , а затем /var/lib/visiology/scripts/v3/utils/make_ch_cluster.sh
    Данные скрипты автоматически выполнят необходимые шаги, которые вы также можете повторить, если требуется ручная настройка.

1. Добавьте метки на каждый узел, начиная с главного. Обратите внимание, что цифра после v3-clickhouse меняется:

  • docker node update --label-add=v3-clickhouse-1=true WORKER_NODE_ID_1

  • docker node update --label-add=v3-clickhouse-2=true WORKER_NODE_ID_2

  • docker node update --label-add=v3-clickhouse-3=true WORKER_NODE_ID_3

  • docker node update --label-add=monitoring-v3=true WORKER_NODE_ID_2

  • docker node update --label-add=monitoring-v3=true WORKER_NODE_ID_3

Идентификаторы узлов (WORKER_NODE_ID_…) можно получить с помощью следующей команды:

2. В файле /var/lib/visiology/scripts/v3/defaults.env измените количество узлов CLICKHOUSE_COUNT и путь к конфигурации кластера CLICKHOUSE_CLUSTER_CONFIG_PATH=/etc/clickhouse-server/config.d

3. В папке/var/lib/visiology/scripts/v3/extended-services cоздайте копии файла /var/lib/visiology/scripts/v3/visiology3-ch-1.yml в количестве, равном количеству узлов (..-ch-2.yml,..-ch-3.yml и т.д. , вместо [..] порядковый номер файла в папке).

В копиях измените node.labels.v3-clickhouse-1 (строка 15), clickhouse-1 (строка 28), JDBC_BRIDGE_HOST_1 (строка 59), SERVER_ID:1 (строка 60), v3-clickhouse-1 (строка 70), , jdbc-bridge-1 (строка 75), v3-jdbc-bridge-1 (строка 84) в соответствие с номером сервера , обозначенном в имени файла [..-ch-НОМЕР].

4. Внесите изменения в файл /var/lib/visiology/scripts/v3/custom-configs/cluster-formula-engine.json:

{ "ClickHouseSettings": { "Nodes": { "clickhouse1": { "ConnectionString": "Compression=True;CheckCompressedHash=False;Compressor=lz4;Host={{ env "CLICKHOUSE_HOST_1" }};Port={{ env "CLICKHOUSE_PORT" }};Username={{ secret "CLICKHOUSE_FE_USER" }};Password={{ secret "CLICKHOUSE_FE_PASSWORD" }};Database={{ env "CLICKHOUSE_DB" }};UseSession=true;Timeout=120;set_max_execution_time=120;set_cancel_http_readonly_queries_on_client_close=1;set_timeout_before_checking_execution_speed=30;", "TcpPort": "9000" }, "clickhouse2": { "ConnectionString": "Compression=True;CheckCompressedHash=False;Compressor=lz4;Host={{ env "CLICKHOUSE_HOST_2" }};Port={{ env "CLICKHOUSE_PORT" }};Username={{ secret "CLICKHOUSE_FE_USER" }};Password={{ secret "CLICKHOUSE_FE_PASSWORD" }};Database={{ env "CLICKHOUSE_DB" }};UseSession=true;Timeout=120;set_max_execution_time=120;set_cancel_http_readonly_queries_on_client_close=1;set_timeout_before_checking_execution_speed=30;", "TcpPort": "9000" }, ... } "EtlNodes": ["clickhouse1", "clickhouse2", ...], "QueryNodes": ["clickhouse1", "clickhouse2", ...], "ReplicationEnabled": true, "TargetReplicaNodesCount": 3, "ConfirmationReplicaNodesCount": 2 } }

где

  • EtlNodes – узлы, на которых будет выполняться ETL. Можно выделить узлы только для ETL, чтобы не влиять на производительность DAX-запросов.

  • QueryNodes – узлы, на которые будут отправляться запросы DAX.

  • TargetReplicaNodesCount – количество узлов-реплик, на которых должна храниться копия данных или выполняться операция. То есть, кластер будет пытаться хранить данные на таком количестве узлов.

  • ConfirmationReplicaNodesCount – количество узлов-реплик, которые должны подтвердить выполнение операции, прежде чем эта операция будет считаться завершённой и подтверждённой.

      Предположим, что TargetReplicaNodesCount = 3, а ConfirmationReplicaNodesCount = 2. Это означает, что кластер будет пытаться загрузить данные на три узла. Если один из узлов выйдет из строя в процессе загрузки, то загрузка будет считаться успешной, т.к. только двум узлам нужно подтвердить успешность операции. Соответственно, для достижения отказоустойчивости, значение ConfirmationReplicaNodesCount должно быть меньше, чем значение TargetReplicaNodesCount.
    В каждой строке с "ConnectionString" нужно заменить цифру на соответствующую в части Host={{ env "CLICKHOUSE_HOST_1" }}

5. Внесите изменения в файл /var/lib/visiology/scripts/v3/custom-configs/cluster-datamanagementservice.json:

{ "ClickHouseSettings": { "ConnectionStrings": { "clickhouse1": "Compression=True;CheckCompressedHash=False;Compressor=lz4;Host={{ env "CLICKHOUSE_HOST_1" }};Port={{ env "CLICKHOUSE_PORT" }};Username={{ secret "CLICKHOUSE_FE_USER" }};Password={{ secret "CLICKHOUSE_FE_PASSWORD" }};Database={{ env "DM_CLICKHOUSE_DB" }};UseSession=true;set_max_execution_time=120;set_cancel_http_readonly_queries_on_client_close=1;", "clickhouse2": "Compression=True;CheckCompressedHash=False;Compressor=lz4;Host={{ env "CLICKHOUSE_HOST_2" }};Port={{ env "CLICKHOUSE_PORT" }};Username={{ secret "CLICKHOUSE_FE_USER" }};Password={{ secret "CLICKHOUSE_FE_PASSWORD" }};Database={{ env "DM_CLICKHOUSE_DB" }};UseSession=true;set_max_execution_time=120;set_cancel_http_readonly_queries_on_client_close=1;", "clickhouse3": "Compression=True;CheckCompressedHash=False;Compressor=lz4;Host={{ env "CLICKHOUSE_HOST_3" }};Port={{ env "CLICKHOUSE_PORT" }};Username={{ secret "CLICKHOUSE_FE_USER" }};Password={{ secret "CLICKHOUSE_FE_PASSWORD" }};Database={{ env "DM_CLICKHOUSE_DB" }};UseSession=true;set_max_execution_time=120;set_cancel_http_readonly_queries_on_client_close=1;" ... }, "MaxResultRows": 1000000, "MaxQuerySize": 100000000, "MaxExecutionTime": "05:00:00" }

В каждой строке с "clickhouse.." необходимо поменять цифру на соответствующую в части Host={{ env "CLICKHOUSE_HOST_1" }}

6. Внесите изменения в файл /var/lib/visiology/scripts/v3/defaults.env:

  • добавьте строки:
    CLICKHOUSE_HOST_2=clickhouse-2
    CLICKHOUSE_HOST_3=clickhouse-3
    и т.д.

  • добавьте строки:
    JDBC_BRIDGE_HOST_2=jdbc-bridge-2
    JDBC_BRIDGE_HOST_3=jdbc-bridge-3
    и т.д.

7. В файле /var/lib/visiology/scripts/v3/env-files/fe.env измените значения RefreshDataJob__ParallelWorkers и Hangfire__WorkerCount на количество узлов с базой данных Clickhouse, умноженное на 2, т.е. для четырех узлов с базой Clickhouse требуется указать значение 8.

8. Создайте файл /var/lib/visiology/scripts/v3/extended-services/ПОРЯДКОВЫЙ_НОМЕР-backup-service.yml:

version: "3.8" services: backup-service: environment: CLICKHOUSE_HOSTS: ${CLICKHOUSE_HOST_1} ${CLICKHOUSE_HOST_2} ...

поле CLICKHOUSE_HOSTS перечисляет все переменные CLICKHOUSE_HOST_.. из /var/lib/visiology/scripts/v3/defaults.env

9. Переименуйте файл /var/lib/visiology/scripts/v3/extended-services/30-keepers.ym_ в /var/lib/visiology/scripts/v3/extended-services/30-keepers.yml
Преднастроены 3 сервиса. Если необходимо, добавьте дополнительные сервисы clickhouse-keeper по аналогии, изменяя соответствующие номера.

  1. Загрузите образы clickhouse, clickhouse-keeper, jdbc-bridge, cadvisor, node-exporter, promtail в память докера на каждом сервере.

  2. Запустите платформу.


Смотрите также

Загрузка данных с помощью JDBC

 

Нужна дополнительная помощь?

Свяжитесь с технической поддержкой.

Related content