Я провел последние два дня, пытаясь настроить репликацию в 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'
, который установлен соответствующим образом.
Спасибо за любой совет!