无法创建副本 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
我正在尝试使用 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