无法使用zookeeper在clickhouse中设置复制

gstyhher  于 2021-07-15  发布在  ClickHouse
关注(0)|答案(2)|浏览(623)

我花了两天时间尝试在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

clickhouse的zookeeper配置如下:

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

所有副本之间的唯一区别是副本id '03' 相应设置。
谢谢你的建议!

eimct9ow

eimct9ow1#

事实上我自己解决了这个问题。多亏了@egorlitvineko,我再次检查了所有的配置,我注意到对于所有三个节点,我都设置了相同的配置 interserver_http_port . 如果所有的节点都在不同的机器上运行,这不会有问题,但是在我的测试场景中,它们在同一个操作系统上并排运行。

lnvxswe2

lnvxswe22#

replicatedmergetree('/clickhouse/tables/t\r','03',d,(d,id),8192);
您应该为每个副本配置zookeeper唯一id。当前您使用“03”,这是不正确的。在本教程中,{replica}表示宏,它在每个节点上的clickhouse配置文件中配置。
见-https://clickhouse.yandex/docs/en/table_engines/replication.html#replicatedmergetree
p、 如需进一步帮助,请提供所有节点的配置。

相关问题