Перейти к содержанию
Learning Platform
Глоссарий Troubleshooting
Урок 10.04 · 30 мин
Продвинутый
кластерная топология1S_3R2S_2Rcross-DCpriority

Топологии кластера

Топология кластера — это количество шардов и количество реплик на каждом шарде. Выбор топологии определяет соотношение между надёжностью (HA), горизонтальным масштабированием ёмкости и стоимостью инфраструктуры. Нет универсальной топологии: выбор зависит от приоритетов конкретной системы.


1 шард x 3 реплики (1S_3R)

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

<!-- remote_servers: 1S_3R топология -->
<mycluster_1s3r>
    <shard>
        <internal_replication>true</internal_replication>
        <replica><host>clickhouse-01</host><port>9000</port></replica>
        <replica><host>clickhouse-02</host><port>9000</port></replica>
        <replica><host>clickhouse-03</host><port>9000</port></replica>
    </shard>
</mycluster_1s3r>
1S_3R: 1 шард, 3 реплики
1S_3R: все узлы содержат 100% данных1S_3R: все три узла содержат 100% данных. Ни один узел не хранит подмножество — только полные копии. Потеря двух узлов из трёх не приводит к потере данных.
clickhouse-01clickhouse-01: полная копия всех данных. При enable_parallel_replicas=1 все три реплики могут параллельно читать разные гранулы одного запроса, увеличивая throughput чтения в 3x.
clickhouse-02clickhouse-02: идентичная копия данных. Если clickhouse-01 недоступен, запросы автоматически перенаправляются на clickhouse-02 или clickhouse-03. Failover прозрачен для клиента.
clickhouse-03clickhouse-03: третья реплика. Используется для read scale-out через parallel replicas или для снятия резервных копий без нагрузки на production-реплики.

Применение: HA-кластер для чтения с parallel_replicas. Максимальная надёжность при фиксированном объёме данных.


2 шарда x 2 реплики (2S_2R)

Два шарда с двумя репликами каждый — стандартная production-топология. Масштабирует ёмкость (2x данных) и обеспечивает HA (каждый шард имеет резерв).

<!-- remote_servers: 2S_2R топология -->
<mycluster_2s2r>
    <shard>
        <internal_replication>true</internal_replication>
        <replica><host>clickhouse-01</host><port>9000</port></replica>
        <replica><host>clickhouse-02</host><port>9000</port></replica>
    </shard>
    <shard>
        <internal_replication>true</internal_replication>
        <replica><host>clickhouse-03</host><port>9000</port></replica>
        <replica><host>clickhouse-04</host><port>9000</port></replica>
    </shard>
</mycluster_2s2r>

4 узла хранят 2x объём данных (каждый узел хранит 50% с одним дублем). Потеря одного узла на любом шарде не приводит к недоступности данных.


3 шарда x 2 реплики (3S_2R)

Высокая ёмкость: 3x масштаб при сохранении HA. Требует 6 узлов. Используется когда 2S_2R перестаёт справляться с ingest-нагрузкой или объёмом.

<!-- remote_servers: 3S_2R топология -->
<mycluster_3s2r>
    <shard>
        <internal_replication>true</internal_replication>
        <replica><host>clickhouse-01</host><port>9000</port></replica>
        <replica><host>clickhouse-02</host><port>9000</port></replica>
    </shard>
    <shard>
        <internal_replication>true</internal_replication>
        <replica><host>clickhouse-03</host><port>9000</port></replica>
        <replica><host>clickhouse-04</host><port>9000</port></replica>
    </shard>
    <shard>
        <internal_replication>true</internal_replication>
        <replica><host>clickhouse-05</host><port>9000</port></replica>
        <replica><host>clickhouse-06</host><port>9000</port></replica>
    </shard>
</mycluster_3s2r>

Cross-DC топология

Cross-DC топология размещает реплики в разных датацентрах для защиты от катастрофического сбоя. Ключевые настройки: <priority> в конфиге реплик и read_from_closest_replica для маршрутизации чтения.

<!-- remote_servers: cross-DC 2S_2R с приоритетами реплик -->
<mycluster_crossdc>
    <shard>
        <internal_replication>true</internal_replication>
        <!-- DC-A: основная реплика (меньший priority = предпочтительнее) -->
        <replica>
            <host>clickhouse-01-dc-a</host>
            <port>9000</port>
            <priority>1</priority>
        </replica>
        <!-- DC-B: резервная реплика (higher priority = менее предпочтительна) -->
        <replica>
            <host>clickhouse-01-dc-b</host>
            <port>9000</port>
            <priority>2</priority>
        </replica>
    </shard>
</mycluster_crossdc>
-- Предпочитать ближайшую реплику при чтении (сессионная настройка)
SET load_balancing = 'nearest_hostname';
-- Или через конфиг: read_from_closest_replica = 1
WARNING

Cross-DC топология увеличивает latency вставок если используется insert_quorum. При quorum inserts ClickHouse ждёт подтверждения от большинства реплик, а реплика в другом датацентре добавляет сетевую задержку (типично 10-100ms). Для высоконагруженных систем используйте internal_replication=true без quorum, или insert_quorum_timeout с приемлемым значением.


Сравнение топологий

Сравнение топологий ClickHouse кластера
ТопологияТопология: заголовок сравнительной таблицы
HAHA: высокая доступность -- переживает ли потерю узла без потери данных?
МасштабМасштаб: горизонтальное масштабирование ёмкости хранения и ingest-throughput
ПрименениеПрименение: типичный use case для данной топологии
1S_3R1S_3R: один шард, три реплики. Все 3 узла хранят полные данные. Потеря 2 из 3 -- данные целы.
Да (2/3)HA: Да, выдерживает потерю 2 из 3 узлов. При parallel replicas: 3x read throughput.
НетМасштаб: нет горизонтального масштабирования ёмкости. Все 3 узла хранят одинаковые данные. Для увеличения ёмкости нужно переходить на многошардовую топологию.
Read HA + parallel replicasПрименение: read scale с parallel_replicas, аналитика с фиксированным объёмом данных, HA для небольших датасетов.
2S_2R2S_2R: два шарда, по 2 реплики. 4 узла хранят 50%+50% данных с дублированием.
Да (1/2)HA: Да, выдерживает потерю одного узла на каждом шарде. Потеря обоих узлов одного шарда = потеря 50% данных.
2xМасштаб: 2x горизонтальное масштабирование ёмкости и ingest throughput. Стандартный production выбор.
Production standardПрименение: production standard. Баланс между HA, масштабом и стоимостью. 4 узла достаточно для большинства сценариев.
3S_2R3S_2R: три шарда, по 2 реплики. 6 узлов хранят 33%+33%+33% данных с дублированием.
Да (1/2)HA: Да. Потеря одного узла на любом шарде -- данные доступны. Потеря всех узлов одного шарда = потеря 33% данных.
3xМасштаб: 3x горизонтальное масштабирование. Используется при высоком ingest (>1M событий/сек) или больших объёмах (>50TB).
High ingest / large scaleПрименение: высокий ingest или большой объём. Переход с 2S_2R когда узкое место -- write throughput или ёмкость.

Ключевые выводы

  1. 1S_3R — максимальная HA без масштабирования ёмкости: все узлы содержат полные данные, оптимально для parallel replicas и read scale-out.
  2. 2S_2R — production standard: баланс HA и 2x масштабирования ёмкости за 4 узла.
  3. 3S_2R — высокий ingest: 3x масштаб при сохранении HA, требует 6 узлов.
  4. Cross-DC топология: <priority> определяет предпочтение реплик при чтении (меньше = предпочтительнее), load_balancing = 'nearest_hostname' маршрутизирует к ближайшей реплике.
  5. Quorum inserts в cross-DC добавляют межсайтовую latency — учитывайте insert_quorum_timeout или используйте internal_replication=true без quorum.
MPP-архитектура: shared-nothing, worker nodes, coordinator Spark: YARN, Kubernetes, Standalone — менеджеры кластеров

Закончили урок?

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

Войдите чтобы оценить урок

Прогресс модуля
0 из 11