Описание типового кластера ADQM

ClickHouse

Кластер ClickHouse не имеет мастер-ноды и единой точки входа. Запросы могут отправляться к любому из хостов в кластере.

Рассмотрим типовой кластер – три шарда, у каждого по две реплики (Рис.36.).

../_images/cluster.png

Рис. 36. Пример типового кластера ClickHouse

Локальные таблицы отвечают за хранение и репликацию данных. Distributed-таблицы не хранят данные, они позволяют сделать запрос на несколько локальных таблиц, распределенных на хостах, объедененных в виртуальный кластер (remote_servers).

В настройках каждого из серверов должны присутствовать две секции: remote_servers и macros.

Настройка macros необходима для единого DDL для реплицированных таблиц. Кластеры из remote_servers используются для создания Distributed-таблиц и распределенных запросов.

remote_servers для представленного кластера:

<remote_servers>
  <cluster_3x2>
        <shard>
            <replica>
                <host>host_1</host>
                <port>9000</port>
            </replica>
            <replica>
                <host>host_4</host>
                <port>9000</port>
            </replica>
        </shard>
        <shard>
            <replica>
                <host>host_2</host>
                <port>9000</port>
            </replica>
            <replica>
                <host>host_5</host>
                <port>9000</port>
            </replica>
        </shard>
        <shard>
            <replica>
                <host>host_3</host>
                <port>9000</port>
            </replica>
            <replica>
                <host>host_6</host>
                <port>9000</port>
            </replica>
        </shard>
  </cluster_3x2>

macros для host-1:

<macros>
            <replica>1</replica>
            <shard>1</shard>
</macros>

macros на каждом хосте разный.

Пример создания реплицированной таблицы на основе макросов:

create table test_local on cluster cluster_3x2 (id Int32, value_string String) engine = ReplicatedMergeTree('/clickhouse/test/shard-{shard}', 'replica-{replica}') order by id;

Движок ReplicatedMergeTree имеет два аргумента: первый определяет путь в zookeeper до конкретного шарда, второй – путь до реплики. {shard} и {replica} заменяются на данные из секции macros.

Пример создания Distributed-таблицы:

create table test_distr on cluster cluster_3x2 (id Int32, value_string String) engine = Distributed(default, test_local, cluster_3x2, rand());

Движок Distributed имеет четыре аргумента:

  • База данных для таблицы, к которой будет обращаться Distributed-таблица;
  • Таблица, к которой будет обращаться Distributed-таблица;
  • Кластер, на котором будет запущен запрос;
  • Ключ партиционирования для вставки данных в Distributed-таблицу.