Невозможно настроить репликацию в ClickHouse с помощью Zookeeper

Я провел последние два дня, пытаясь настроить репликацию в ClickHouse, но какую бы конфигурацию я ни пробовал, я получаю такое же поведение.

Я могу создать ReplicatedMergeTree таблицу на первом узле и вставить в нее данные. Затем я создаю реплику на втором узле. Данные реплицируются, и я вижу, что он запрашивает второй узел. Но когда я вставляю данные во второй узел, начинается странное поведение. Данные не копируются на первый узел, и возникает следующая ошибка:

2017.11.14 11:16:43.464565 [ 30 ] <Error> DB::StorageReplicatedMergeTree::queueTask()::<lambda(DB::StorageReplicatedMergeTree::LogEntryPtr&)>: Code: 33, e.displayText() = DB::Exception: Cannot read all data, e.what() = DB::Exception, 

Это очень похоже на эту проблему на GitHub.

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

Самая последняя установка, которую я пробовал:

Следуя руководству, у меня есть трехузловой кластер Zookeeper со следующей конфигурацией:

tickTime=2000
initLimit=10
syncLimit=5
dataDir=/opt/zoo2/data
clientPort=12181
server.1=10.201.1.4:2888:3888
server.2=0.0.0.0:12888:13888
server.3=10.201.1.4:22888:23888

Конфигурация zookeeper для ClickHouse выглядит так:

<?xml version="1.0"?>
<yandex>
    <zookeeper>
        <node>
            <host>10.201.1.4</host>
            <port>2181</port>
        </node>
        <node>
            <host>10.201.1.4</host>
            <port>12181</port>
        </node>
        <node>
            <host>10.201.1.4</host>
            <port>22181</port>
        </node>
    </zookeeper>
</yandex>

Я создаю все таблицы так:

CREATE TABLE t_r (
  id UInt32,
  d Date
) ENGINE = ReplicatedMergeTree('/clickhouse/tables/t_r', '03', d, (d, id), 8192);

Единственное различие между репликами - это идентификатор реплики '03', который установлен соответствующим образом.

Спасибо за любой совет!


person Tomáš Repík    schedule 14.11.2017    source источник


Ответы (2)


На самом деле я разобрался в проблеме сам. Благодаря @egorlitvinenko я снова просмотрел все конфиги и заметил, что для всех трех узлов я установил одинаковый interserver_http_port. Не было бы проблем, если бы все узлы работали на разных машинах, но в моем тестовом сценарии они работают бок о бок, размещенные в одной ОС.

person Tomáš Repík    schedule 04.12.2017
comment
Спасибо, ваш комментарий мне тоже помог :) - person Arnon Rodman; 08.04.2019

ReplicatedMergeTree ('/ clickhouse / tables / t_r', '03', d, (d, id), 8192);

Вы должны настроить уникальный идентификатор zookeeper для каждой реплики. В настоящее время вы используете «03», это неверно. В руководстве под {репликой} понимаются макросы, которые настраиваются в файле конфигурации clickhouse на каждом узле.

См. - https://clickhouse.yandex/docs/en/table_engines/replication.html#replicatedmergetree

p.s. Для дальнейшей помощи предоставьте конфигурацию всех узлов.

person egorlitvinenko    schedule 28.11.2017
comment
При создании таблицы replicated я устанавливаю уникальный идентификатор реплики для каждого узла сервера ClickHouse. Я использую более или менее стандартную конфигурацию для всех трех узлов, каждый узел имеет отдельные каталоги data, tmp, log, errlog. - person Tomáš Repík; 29.11.2017
comment
Как я вижу, в вашем операторе создания есть только один id = '03'. Также 't_r' является идентификатором узла в zookeeper и должен быть уникальным для шардов. Если вы запускаете разные операторы на разных узлах, укажите все. - person egorlitvinenko; 29.11.2017
comment
Единственная разница в командах создания таблиц - это идентификатор реплики, который устанавливается в соответствии с номером узла. Поскольку я использую режим с одним сегментом, на всех узлах установлен один и тот же идентификатор t_r. - person Tomáš Repík; 29.11.2017
comment
@ TomášRepík, мне очень интересно помочь вам разобраться в этой проблеме, с настройками было бы проще. Я пытаюсь воспроизвести это. - person egorlitvinenko; 01.12.2017