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

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

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

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

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

clickhouse-2: # Use clickhouse/clickhouse-server:23.3.4.17-alpine image: ${DOCKER_REPO_PREFIX}${CH_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: deploy: endpoint_mode: dnsrr replicas: 1 placement: max_replicas_per_node: 1 constraints: - "node.labels.v3-clickhouse-2==true" jdbc-bridge-2: # Use clickhouse/jdbc-bridge:2.1.0 image: ${DOCKER_REPO_PREFIX}${JB_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: 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;", "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;" ...

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

В каждой строке нужно поменять цифру на соответствующую в части 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-3.3 и jdbc-bridge-3.3 в память докера на каждом сервере.

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

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

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