docker pull clickhouse/clickhouse-server:22.3.11.12-alpine
因为如下原因,需要将clickhouse的配置文件及数据目录复制到宿主机
#启动容器
docker run -d --name ch-server --ulimit nofile=262144:262144 clickhouse/clickhouse-server:22.3.11.12-alpine
# 复制文件到宿主机
docker cp ch-server:/etc/clickhouse-server D:/docker/ch/etc/clickhouse-server
docker cp ch-server:/var/lib/clickhouse D:/docker/ch/data
#停止容器
docker stop ch-server
# 再次启动容器
docker run -d --name=single-ch-server -p 8123:8123 -p 9000:9000 -p 9009:9009 --ulimit nofile=262144:262144 -v D:/docker/ch/data:/var/lib/clickhouse:rw -v D:/docker/ch/etc/clickhouse-server:/etc/clickhouse-server:rw clickhouse/clickhouse-server:22.3.11.12-alpine
启动成功后,使用DBeaver测试,用户名default,密码为空,则可以正常连接。
<include_from>/etc/clickhouse-server/metrika01.xmlinclude_from>
<remote_servers incl="clickhouse_remote_servers" optional="true"/>
<zookeeper incl="zookeeper_servers" optional="true"/>
<macros incl="macros" optional="true"/>
<compression incl="clickhouse_compression">compression>
<yandex>
<clickhouse_remote_servers>
<cluster01>
<shard>
<internal_replication>trueinternal_replication>
<weight>1weight>
<replica>
<host>ch01host>
<port>9000port>
<user>defaultuser>
<password>password>
replica>
shard>
<shard>
<internal_replication>trueinternal_replication>
<weight>1weight>
<replica>
<host>ch02host>
<port>9000port>
<user>defaultuser>
<password>password>
replica>
shard>
cluster01>
clickhouse_remote_servers>
<macros>
<layer>01layer>
<shard>01shard>
<replica>ch01replica>
macros>
<zookeeper_servers>
<node index="1">
<host>zk01host>
<port>2181port>
node>
zookeeper_servers>
<networks>
<ip>::/0ip>
networks>
<clickhouse_compression>
<case>
<min_part_size>1073741824min_part_size>
<min_part_size_ratio>0.01min_part_size_ratio>
<method>lz4method>
case>
clickhouse_compression>
yandex>
<macros>
<layer>01layer>
<shard>02shard>
<replica>ch02replica>
macros>
采用卷标的方式挂载数据
version: '3.1'
services:
zookeeper:
image: zookeeper:3.4.14
ports:
- "8181:2181"
- "8182:2182"
hostname: zk01
ch01:
image: clickhouse/clickhouse-server:22.3.11.12-alpine
restart: on-failure
container_name: ch01
ports:
- 9000:9000
- 8123:8123
- 9009:9009
volumes:
- ch1-data:/var/lib/clickhouse
- D:/docker/ch/ch01/etc/clickhouse-server:/etc/clickhouse-server:rw
- D:/docker/ch/ch01/log:/var/log/clickhouse-server:rw
hostname: ch01
ulimits:
nofile:
soft: 262144
hard: 262144
depends_on:
- "zookeeper"
ch02:
image: clickhouse/clickhouse-server:22.3.11.12-alpine
restart: on-failure
container_name: ch02
ports:
- 9800:9000
- 8823:8123
- 9809:9009
volumes:
- ch2-data:/var/lib/clickhouse
- D:/docker/ch/ch02/etc/clickhouse-server:/etc/clickhouse-server:rw
- D:/docker/ch/ch02/log:/var/log/clickhouse-server:rw
hostname: ch02
ulimits:
nofile:
soft: 262144
hard: 262144
depends_on:
- "zookeeper"
volumes:
ch1-data:
ch2-data:
docker-compose up -d
create database test on cluster cluster01;
use test;
create table events_local on cluster cluster01 (
ID String,
EventType UInt8,
URL String,
EventTime DateTime
) ENGINE = MergeTree()
PARTITION BY toStartOfDay(EventTime)
ORDER BY (EventTime,EventType)
SETTINGS index_granularity = 8192;
create table events on cluster cluster01 as test.events_local ENGINE = Distributed('cluster01', 'test', 'events_local', rand());
insert into events(ID,EventType,URL,EventTime) values ('11',1,'http://www.baidu.com','2021-12-20 12:00:00');
insert into events(ID,EventType,URL,EventTime) values ('12',1,'http://www.baidu.com','2021-12-20 12:00:00');
insert into events(ID,EventType,URL,EventTime) values ('13',1,'http://www.baidu.com','2021-12-20 12:00:00');
insert into events(ID,EventType,URL,EventTime) values ('14',1,'http://www.baidu.com','2021-12-20 12:00:00');
insert into events(ID,EventType,URL,EventTime) values ('15',1,'http://www.baidu.com','2021-12-20 12:00:00');
insert into events(ID,EventType,URL,EventTime) values ('16',1,'http://www.baidu.com','2021-12-20 12:00:00');
将Clickhouse的数据目录放在宿主机时,在插入数据时报如下错误,但如果不放在宿主机,则数据会丢失。
Received exception from server (version 22.3.11):
Code: 1001. DB::Exception: Received from localhost:9000. DB::Exception: std::__1::__fs::filesystem::filesystem_error: filesystem error: in rename: Permission denied [/var/lib/clickhouse/store/0d4/0d4a6f52-b3a6-4496-8174-e03ae9503321/tmp_insert_1639958400_1_1_0/] [/var/lib/clickhouse/store/0d4/0d4a6f52-b3a6-4496-8174-e03ae9503321/1639958400_1_1_0/]. (STD_EXCEPTION)
报错信息:Error response from daemon: Ports are not available: exposing port TCP 0.0.0.0:8848 -> 0.0.0.0:0: listen tcp 0.0.0.0:8848: bind: An attempt was made to access a socket in a way forbidden by its access permissions.
通过cmd命令查看哪些端口被禁用TCP协议
netsh interface ipv4 show excludedportrange protocol=tcp
将docker启动命令中的宿主机端口改成禁用之外的就可以了