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