项目场景:

容器部署Clickhouse分布式集群必须将数据目录挂载出来,但是网上有些文章并不适合生产:

例如:https://blog.csdn.net/yangshenggu/article/details/122730803 像这篇文章挂载的数据目录就有可能会有的sql执行不了参考文章


问题描述

在参考上面的方式docker部署clickhouse分布式集群时,就出现了以下问题。能create 库.表,却不能删除表

例如:在执行drop table default.test命令时报错:

std::exception. Code: 1001, type: std::__1::__fs::filesystem::filesystem_error, e.what() = filesystem error: in rename: Invalid cross-device link [/var/lib/clickhouse/store/ab3/ab3f8bca-75d4-4a55-ab3f-8bca75d45a55/payment_order.sql] [/var/lib/clickhouse/metadata_dropped/default.payment_order.4b66a887-e3bd-410c-8b66-a887e3bd710c.sql] Cannot print extra info for Poco::Exception (version 21.7.6.1)

原因分析:

像这样的 Code: 1001,网上一点可用信息都没有,于是我从filesystem error: in rename: Invalid cross-device link 这里出发分析问题:网上看到这么一句话 硬链接限制:1.不能跨文件系统。2,不能连接目录。只能在同一个分区建立数据关联,就恍然大悟了

进一步分析

docker启动脚本为(如果你用host网络,就不能加-p):
docker run -d --name=clickhouse-server \
-p 8123:8123 -p 9009:9009 -p 9090:9000 \
--ulimit nofile=262144:262144 \
-v /data/clickhouse/conf/config.xml:/etc/clickhouse-server/config.xml \
-v /data/clickhouse/conf/users.xml:/etc/clickhouse-server/users.xml \
-v /data/clickhouse/log:/var/log/clickhouse-server \
-v /data/docker/store:/var/lib/clickhouse/store \
yandex/clickhouse-server:22.1.2.2
clickhouse 数据目录:
[root@prd-clickhouse01 clickhouse]# ls
access  cores  data  dictionaries_lib  flags  format_schemas  metadata  metadata_dropped  preprocessed_configs  status  store  tmp  user_files
可以看出,上面的报错,大概就是metadata_dropped目录和store目录不在同一个文件系统,metadata_dropped目录没有挂载出来就在docker文件系统里,store目录挂载出来了那就在虚拟机的文件系统里

解决方案:

将两个目录放在同一个文件系统即可:

1,docker stop 容器名
2,docker rm 容器名
3,重写启动脚本如下:
docker run -d --name=clickhouse-server \
-p 8123:8123 -p 9009:9009 -p 9090:9000 \
--ulimit nofile=262144:262144 \
-v /data/clickhouse/conf/config.xml:/etc/clickhouse-server/config.xml \
-v /data/clickhouse/conf/users.xml:/etc/clickhouse-server/users.xml \
-v /data/clickhouse/log:/var/log/clickhouse-server \
-v /data/docker/database:/var/lib/clickhouse:wr \
yandex/clickhouse-server:22.1.2.2
4,执行启动脚本
5,测试建表:
prd-clickhouse01 :) clickhouse-client -udefault  --password=j780UJy9D2tn
CREATE TABLE test_table01( \
    province        String, \
    province_name         String, \
    create_date           date \
) ENGINE = MergeTree(create_date, (province), 8192);
Query id: 05dde134-c20d-4e4a-b975-233d1e824a73
Ok.
0 rows in set. Elapsed: 0.010 sec. 
6,测试删表:
prd-clickhouse01 :) drop table test_table01;
DROP TABLE test_table01
Query id: 3a853f06-efb9-4bde-b10c-d2cb441ba914
Ok.
0 rows in set. Elapsed: 0.002 sec. 
prd-clickhouse01 :) show tables;
SHOW TABLES
Query id: 610a00c5-759d-450a-97d6-01e1cedf5ace
Ok.
0 rows in set. Elapsed: 0.004 sec. 

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐