/
Ускорение загрузки данных

Ускорение загрузки данных

Вы можете увеличить скорость обработки запросов за счет распределения данных на нескольких узлах (горизонтальное масштабирование), что позволит ускорить загрузку данных. Для этого необходимо выполнить следующие шаги:

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.   Добавьте лейблы на каждый сервер, начиная с главного, где необходимо подставить нужные идентификаторы нод. Обратите внимание, что цифра после 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

3. Внесите следующие изменения в файл /var/lib/visiology/scripts/v3/visiology3.yml:

  • скопируйте секции clickhouse-1 и jdbc-bridge-1 в количестве, равном количеству ваших серверов. В скопированных секциях необходимо заменить все единицы (1) на 2, 3, 4 и т.д.
    Пример (надо заменить цифры в строках 1, 24, 34, 44, 46, 56, 66):

clickhouse-2: # Use clickhouse/clickhouse-server:23.3.4.17-alpine image: ${CLICKHOUSE_TAG} ulimits: nofile: soft: 262144 hard: 262144 configs: - source: clickhousejdbcbridge target: /etc/clickhouse-server/config.d/clickhouse-jdbc-bridge.xml - source: clickhousedisabledroplimits target: /etc/clickhouse-server/config.d/clickhouse-disable-drop-limits.xml - source: clickhousetimezone target: /etc/clickhouse-server/config.d/clickhouse-timezone.xml - source: clickhousequerymaskingrulesforjdbc target: /etc/clickhouse-server/config.d/clickhouse-query-masking-rules-for-jdbc.xml - source: clickhouseentrypoint target: /entrypoint.sh mode: 0555 environment: CLICKHOUSE_DB: ${CLICKHOUSE_DB} CLICKHOUSE_DEFAULT_ACCESS_MANAGEMENT: 1 CLICKHOUSE_INIT_TIMEOUT: 600 JDBC_BRIDGE_HOST: ${JDBC_BRIDGE_HOST_2} secrets: - source: CLICKHOUSE_FE_USER target: CLICKHOUSE_USER - source: CLICKHOUSE_FE_PASSWORD target: CLICKHOUSE_PASSWORD volumes: - clickhouse_data:/var/lib/clickhouse << : [*logging-options] labels: component: "v3-clickhouse-2" networks: visiology-3: smart-forms-share: deploy: endpoint_mode: dnsrr replicas: 1 placement: max_replicas_per_node: 1 constraints: - "node.labels.v3-clickhouse-2==true" jdbc-bridge-2: # Use cr.yandex/crpe1mi33uplrq7coc9d/visiology/release/original/jdbc-bridge:3.6 image: ${JDBC_BRIDGE_TAG} environment: JDBC_BRIDGE_JVM_OPTS: ${JDBC_BRIDGE_MEM_OPTIONS} configs: - source: jdbcbridge target: /app/config/server.json << : [*logging-options] labels: component: "v3-jdbc-bridge-2" networks: visiology-3: smart-forms-share: deploy: endpoint_mode: dnsrr replicas: 1 placement: max_replicas_per_node: 1 constraints: - "node.labels.v3-clickhouse-2==true"
  • в секцию environment раздела formula-engine необходимо добавить следующие строки:

 CLICKHOUSE_HOST_2: ${CLICKHOUSE_HOST_2}

 CLICKHOUSE_HOST_3: ${CLICKHOUSE_HOST_3}

  и т.д.

4.   Внесите следующие изменения в файл /var/lib/visiology/scripts/v3/configs/viqube2.json:

  • в секцию ClickHouseSettings. ConnectionStrings добавьте строки:

"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 "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;", "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 "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;" ...

Обратите внимание, что запятые должны быть во всех строках, кроме последней.

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

5. Внесите следующие изменения в файл /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
    и т.д.

  • Замените значения RefreshDataJob__ParallelWorkers и Hangfire__WorkerCount на количество баз данных Clickhouse, умноженное на 2, т.е. для четырех баз Clickhouse требуется указать значение 8.

  • Убедитесь, что есть пустая строка в конце файла.

6. Внесите следующие изменения в файл /var/lib/visiology/scripts/v3/backup-service.yml:

  • Замените поле CLICKHOUSE_HOSTS на CLICKHOUSE_HOSTS: ${CLICKHOUSE_HOST_1} ${CLICKHOUSE_HOST_2} и т.д.

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

8.   Выполните следующую команду на главном сервере:

/var/lib/visiology/scripts/v3/prepare-config.sh --force-regenerate-configs

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

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

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

Related content