2017-11-14 1 views
0

Ich habe die letzten zwei Tage damit verbracht, die Replizierung in ClickHouse einzurichten, aber jede Konfiguration, die ich versuche, endet mit dem gleichen Verhalten.Ich kann die Replikation in ClickHouse mit Zookeeper nicht einrichten

Ich kann eine ReplicatedMergeTree Tabelle auf dem ersten Knoten erstellen und Daten einfügen. Dann erstelle ich ein Replikat auf dem zweiten Knoten. Die Daten werden repliziert und ich kann sehen, wie sie den zweiten Knoten abfragt. Aber wenn ich Daten in den zweiten Knoten einfüge, beginnt das seltsame Verhalten. Die Daten werden nicht an den ersten Knoten kopiert und es wird die folgende Fehlermeldung:

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, 

Es ist sehr ähnlich wie diese issue on GitHub.

Wenn ich den ersten Knoten neu starte, kann er die neuen Daten, die in den zweiten Knoten eingefügt wurden, laden und scheint zu arbeiten. Wenn Sie jedoch weitere Daten einfügen, wird derselbe Fehler erneut angezeigt.

Die jüngste Einrichtung Ich habe versucht:

die tutorial Nach, ich habe einen drei Knoten Zookeeper Cluster mit folgendem config:

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 

Der Zoowärter Config für ClickHouse loooks wie folgt aus:

<?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> 

Ich erstelle alle Tabellen wie folgt:

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

Der einzige Unterschied bei allen Replikaten ist die Replikat-ID '03', die entsprechend eingestellt ist.

Danke für jede Beratung!

Antwort

1

Eigentlich habe ich das Problem selbst herausgefunden. Danke an @egorlitvinenko Ich ging noch einmal durch alle Konfigurationen und bemerkte, dass ich für alle drei Knoten dieselbe interserver_http_port eingerichtet hatte. Es wäre kein Problem, wenn alle Knoten auf separaten Rechnern laufen, aber in meinem Testszenario laufen sie nebeneinander auf dem gleichen Betriebssystem.

0

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

Sie sollten die eindeutige ID von zookeeper für jede Replik konfigurieren. Momentan benutzt du '03', das ist nicht korrekt. Im Lernprogramm bedeutet {Replikat} Makros, die in der Clickhouse-Konfigurationsdatei auf jedem Knoten konfiguriert sind.

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

P. S. Für weitere Hilfe, bitte, stellen Sie die Konfiguration aller Knoten zur Verfügung.

+0

Beim Erstellen einer "replizierten" Tabelle setze ich eine eindeutige Replikat-ID für jeden ClickHouse Server-Knoten. Ich benutze mehr oder weniger Standardkonfiguration für alle drei Knoten, wobei jeder Knoten ein separates data, tmp, log, errlog Verzeichnisse hat. –

+0

Wie ich sehen kann, gibt es in Ihrer create-Anweisung nur eine ID = '03'. Auch 't_r' ist die ID des Knotens im Tierpfleger und sollte für Shards eindeutig sein. Wenn Sie verschiedene Anweisungen auf verschiedenen Knoten ausführen, geben Sie bitte alle an. – egorlitvinenko

+0

Der einzige Unterschied bei Befehlen zum Erstellen von Tabellen ist die Replikat-ID, die entsprechend der Knotennummer festgelegt wird. Da ich Single-Shard-Regime verwende, wird die gleiche 't_r'-ID auf allen Knoten gesetzt. –

Verwandte Themen