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:
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 по аналогии, изменяя соответствующие номера.