无法创建副本 table 代码:253,异常:副本 /clickhouse/tables/[...] 已经存在(版本 21.8.10.19 Docker

Cannot create the replica table Code: 253, Exception: Replica /clickhouse/tables/[...] already exists (version 21.8.10.19 Docker

我正在尝试使用 docker 设置具有 1 个分片和 2 个副本的 ClickHouse 集群。 出于测试目的,我在一个容器和两个 ClickHouse 容器中只有一个动物园管理员。可以创建非复制的 tables,但不可能使用复制的 tables。

当我创建复制时 table

CREATE TABLE company_db.g ON CLUSTER company_cluster
(
    `payload` String
)
ENGINE = ReplicatedMergeTree
ORDER BY payload

ClickHousereturns

┌─host────────┬─port─┬─status─┬─error───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┬─num_hosts_remaining─┬─num_hosts_active─┐
│ clickhouse0 │ 9000 │    253 │ Code: 253, e.displayText() = DB::Exception: Replica /clickhouse/tables/0/company_db/g/replicas/clickhouse1 already exists (version 21.8.10.19 (official build)) │                   1 │                1 │
└─────────────┴──────┴────────┴─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┴─────────────────────┴──────────────────┘
┌─host────────┬─port─┬─status─┬─error─┬─num_hosts_remaining─┬─num_hosts_active─┐
│ clickhouse1 │ 9000 │      0 │       │                   0 │                0 │
└─────────────┴──────┴────────┴───────┴─────────────────────┴──────────────────┘
↓ Progress: 0.00 rows, 0.00 B (0.00 rows/s., 0.00 B/s.)  0%
2 rows in set. Elapsed: 0.170 sec. 

Received exception from server (version 21.8.10):
Code: 253. DB::Exception: Received from localhost:9000. DB::Exception: There was an error on [clickhouse0:9000]: Code: 253, e.displayText() = DB::Exception: Replica /clickhouse/tables/0/company_db/g/replicas/clickhouse1 already exists (version 21.8.10.19 (official build)).

docker-compose.yaml

version: '3.5'

services:

  zookeeper0:
    image: zookeeper
    container_name: zookeeper0
    hostname: zookeeper0
    ports:
      - 2181
    networks:
      clickhouse-network:

  clickhouse0:
    image: yandex/clickhouse-server
    container_name: clickhouse0
    hostname: clickhouse0
    build:
      context: .
      dockerfile: clickhouse.dockerfile
      args:
        shard: 0
        replica: 0
    ports: &ch_ports
      - 8123
      - 9000
      - 9009
      - 9100
    networks:
      clickhouse-network:

    volumes:
      - ${PWD}/clickhouse0:/var/lib/clickhouse
    depends_on:  &ch_dependancies
      - zookeeper0

  clickhouse1:
    image: yandex/clickhouse-server
    container_name: clickhouse1
    hostname: clickhouse1
    build:
      context: .
      dockerfile: clickhouse.dockerfile
      args:
        shard: 0
        replica: 1
    ports: 
      *ch_ports
    networks:
      clickhouse-network:
    volumes:
      - ${PWD}/clickhouse1:/var/lib/clickhouse
    depends_on:
      *ch_dependancies

networks:
  clickhouse-network:

spefic_onfig.xml

<yandex>
     <!-- Listen wildcard address to allow accepting connections from other containers and host network. -->
    <listen_host>::</listen_host>
    <listen_host>0.0.0.0</listen_host>
    <listen_try>1</listen_try>

    <interserver_http_port>9009</interserver_http_port>

    <zookeeper>
        <node index="1">
            <host>zookeeper0</host>
            <port>2181</port>
        </node>

    </zookeeper>

    <remote_servers>
        <company_cluster>
            <shard>
                <internal_replication>true</internal_replication>
                <replica>
                    <host>clickhouse0</host>
                    <port>9000</port>
                </replica>
                <replica>
                    <host>clickhouse1</host>
                    <port>9000</port>
                </replica>
            </shard>
        </company_cluster>
    </remote_servers>

    <default_replica_path>/clickhouse/tables/{shard}/{database}/{table}</default_replica_path>
    <default_replica_name>{replica}</default_replica_name>

    <interserver_http_host>clickhouse${REPLICA}</interserver_http_host>
    
     <macros>
        <shard>${SHARD}</shard>
        <replica>clickhouse${REPLICA}</replica>
    </macros>

</yandex>

我认为这是网络问题造成的。

我纠正了我的 docker-compose.yml

  • 从 clickhouse 服务中删除了 image,因为我正在使用 build
  • 已替换
    networks:
      clickhouse-network:

来自

    networks:
      - clickhouse-network

然后我运行

docker-compose down && docker volume prune -f && docker-compose up -d