Вы можете увеличить скорость обработки запросов за счет распределения данных на нескольких узлах (горизонтальное масштабирование), что позволит ускорить загрузку данных. Для этого необходимо выполнить следующие шаги:
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. Запустите платформу.