Docker Compose - ClickHouse (cluster - ZK)
前言
此篇主要是針對ClickHouse
提供使用ZooKeeper
建立集群Docker Compose
的內容。
可以參考上一篇的介紹Docker Compose - ClickHouse (single)
為何使用ZooKeeper
,主要是當前的其他集群服務都有在使用ZooKeeper
,為了不浪費資源所以就共同使用。
但是官方是建議使用它的ClickHouse keeper
,官方的詳細說明連結
Docker Image
此處直接使用Docker hub
上的clickhouse/clickhouse-server:23.5.3.24 與 confluentinc/cp-zookeeper:7.4.0 。
另外有在多掛Docker hub
上的spoonest/clickhouse-tabix-web-client。
Docker Compose
docker-compose.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81version: "3.3"
services:
clickhouse01:
image: clickhouse/clickhouse-server:23.5.3.24
container_name: clickhouse-01
ulimits:
nproc: 65535
nofile:
soft: 262144
hard: 262144
depends_on:
- zookeeper
volumes:
- "./clickhouse-01:/var/lib/clickhouse"
- "./clickhouse-server-01:/etc/clickhouse-server"
- "./clickhouse-log-01:/var/log/clickhouse-server"
ports:
- "8123:8123"
- "9011:9011"
- "9004:9004" # mysql
- "9005:9005" # postgres
networks:
- clickhouse-cluster
clickhouse02:
image: clickhouse/clickhouse-server:23.5.3.24
container_name: clickhouse-02
ulimits:
nproc: 65535
nofile:
soft: 262144
hard: 262144
depends_on:
- zookeeper
volumes:
- "./clickhouse-02:/var/lib/clickhouse"
- "./clickhouse-server-02:/etc/clickhouse-server"
- "./clickhouse-log-02:/var/log/clickhouse-server"
ports:
- "8223:8223"
- "9211:9211"
- "9204:9204" # mysql
- "9205:9205" # postgres
networks:
- clickhouse-cluster
zookeeper:
image: confluentinc/cp-zookeeper:7.4.0
container_name: zkserver
deploy:
resources:
limits:
memory: 512M
ports:
- "2181:2181"
environment:
ZOOKEEPER_SERVER_ID: 1
ZOOKEEPER_CLIENT_PORT: 2181
ZOOKEEPER_TICK_TIME: 5000
ZOOKEEPER_INIT_LIMIT: 5
ZOOKEEPER_SYNC_LIMIT: 2
volumes:
- ./zookeeper_data:/var/lib/zookeeper/data
- ./zookeeper_log:/var/lib/zookeeper/log
- ./zookeeper_secrets:/etc/zookeeper/secrets
networks:
- clickhouse-cluster
tabix-web-client:
image: spoonest/clickhouse-tabix-web-client
container_name: tabix-web-client
depends_on:
- clickhouse01
- clickhouse02
ports:
- "8080:80"
networks:
- clickhouse-cluster
networks:
clickhouse-cluster:説明:
- 版本定義為
3.3
。 - 定義
services
名稱為clickhouse01
。 - 使用
clickhouse/clickhouse-server:23.5.3.24
映像。 - 容器名稱定義
clickhouse-01
。 - 指定容器的限制值。
- 指定最大處理程序 65535。
- 打開文件數量。
- 指定文件句柄數 262144(軟限制,應用可以隨時修改,不能超過硬限制)。
- 指定文件句柄數 262144(系統硬限制,只能 root 用戶提高)。
- 打開文件數量。
- 指定最大處理程序 65535。
- 依賴服務(指定
services
名稱)。 - 掛載主機路徑(格式為
SOURCE:TARGET
)。 - 暴露端口
8123
、8123
(格式為HOST:CONTAINER
)。 - 暴露端口
9011
、9011
(格式為HOST:CONTAINER
)。 - 暴露端口
9004
、9004
(格式為HOST:CONTAINER
)。 - 暴露端口
9005
、9005
(格式為HOST:CONTAINER
)。 - 加入的網路(
networks
名稱)。 - 定義
services
名稱為clickhouse02
。 - 使用
clickhouse/clickhouse-server:23.5.3.24
映像。 - 容器名稱定義
clickhouse-02
。 - 指定容器的限制值。
- 指定最大處理程序 65535。
- 打開文件數量。
- 指定文件句柄數 262144(軟限制,應用可以隨時修改,不能超過硬限制)。
- 指定文件句柄數 262144(系統硬限制,只能 root 用戶提高)。
- 打開文件數量。
- 指定最大處理程序 65535。
- 依賴服務(指定
services
名稱)。 - 掛載主機路徑(格式為
SOURCE:TARGET
)。 - 暴露端口
8223
、8223
(格式為HOST:CONTAINER
)。 - 暴露端口
9211
、9211
(格式為HOST:CONTAINER
)。 - 暴露端口
9204
、9204
(格式為HOST:CONTAINER
)。 - 暴露端口
9205
、9205
(格式為HOST:CONTAINER
)。 - 加入的網路(
networks
名稱)。 - 定義
services
名稱為zookeeper
。 - 使用
confluentinc/cp-zookeeper:7.4.0
映像。 - 容器名稱定義
zkserver
。 - 部署。
- 配置資源限制。
- 使用不超過 512M 的記憶體。
- 配置資源限制。
- 暴露端口
2181
、2181
(格式為HOST:CONTAINER
)。 - 環境變數設定
- ZOOKEEPER_SERVER_ID: 1
- ZOOKEEPER_CLIENT_PORT: 2181
- ZOOKEEPER_TICK_TIME: 5000
- ZOOKEEPER_INIT_LIMIT: 5
- ZOOKEEPER_SYNC_LIMIT: 2
- 掛載主機路徑(格式為
SOURCE:TARGET
)。 - 加入的網路(
networks
名稱)。 - 定義
services
名稱為tabix-web-client
。 - 使用
spoonest/clickhouse-tabix-web-client
映像。 - 容器名稱定義
tabix-web-client
。 - 依賴服務(指定
services
名稱)。 - 暴露端口
8080
、80
(格式為HOST:CONTAINER
)。 - 加入的網路(
networks
名稱)。
註:關於
zookeeper
環境變數可以參考。- 版本定義為
ClickHouse 重要的檔案/路徑位置
- clickhouse-server 主要設定檔:
/etc/clickhouse-server/config.xml
- clickhouse-server 用戶設定檔:
/etc/clickhouse-server/users.xml
- clickhouse-server 資料儲存路徑:
/var/lib/clickhouse
- clickhouse-server Log檔路徑:
/var/log/clickhouse-server/clickhouse-server.log
- clickhouse-server ErrLog檔路徑:
/var/log/clickhouse-server/clickhouse-server.err.log
ClickHouse volumes 設定檔目錄結構
1 | . |
ClickHouse 設定檔:
以下設定檔皆使用內置的默認文件進行修改,並使用volumes
去掛載。
- clickhouse-01
- /etc/clickhouse-server-01/config.xml
1
<tcp_port>9011</tcp_port>
- /etc/clickhouse-server-01/config.d/database_atomic.xml
1
2
3
4
<clickhouse>
<database_atomic_delay_before_drop_table_sec>10</database_atomic_delay_before_drop_table_sec>
</clickhouse> - /etc/clickhouse-server-01/config.d/docker_related_config.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
<clickhouse>
<!-- 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>
<!--
<logger>
<console>1</console>
</logger>
-->
</clickhouse> - /etc/clickhouse-server-01/config.d/macros.xml
1
2
3
4
5
6
<clickhouse>
<macros>
<replica>clickhouse-01</replica>
</macros>
</clickhouse> - /etc/clickhouse-server-01/config.d/metrika.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<clickhouse>
<!-- Configuration of clusters that could be used in Distributed tables.
https://clickhouse.com/docs/en/operations/table_engines/distributed/
-->
<remote_servers>
<ck_cluster>
<shard>
<internal_replication>true</internal_replication>
<replica>
<host>clickhouse-01</host>
<port>9011</port>
<user>replicator</user>
<password>replicator1234</password>
</replica>
<replica>
<host>clickhouse-02</host>
<port>9211</port>
<user>replicator</user>
<password>replicator1234</password>
</replica>
</shard>
</ck_cluster>
</remote_servers>
</clickhouse> - /etc/clickhouse-server-01/config.d/zookeeper.xml
1
2
3
4
5
6
7
8
9
<clickhouse>
<zookeeper>
<node>
<host>zkserver</host>
<port>2181</port>
</node>
</zookeeper>
</clickhouse> - /etc/clickhouse-server-01/users.xml
1
無異動
- /etc/clickhouse-server-01/users.d/user-custom.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<clickhouse>
<users>
<default remove="remove">
</default>
<replicator>
<password>replicator1234</password>
<networks>
<ip>::/0</ip>
</networks>
<profile>default</profile>
<quota>default</quota>
</replicator>
<clickhouse>
<password>clickhouse1234</password>
<networks>
<ip>::/0</ip>
</networks>
<profile>default</profile>
<quota>default</quota>
</clickhouse>
</users>
</clickhouse>
- /etc/clickhouse-server-01/config.xml
- clickhouse-02
- /etc/clickhouse-server-02/config.xml
1
2
3
4<http_port>8223</http_port>
<tcp_port>9211</tcp_port>
<mysql_port>9204</mysql_port>
<postgresql_port>9205</postgresql_port> - /etc/clickhouse-server-02/config.d/database_atomic.xml
1
2
3
4
<clickhouse>
<database_atomic_delay_before_drop_table_sec>10</database_atomic_delay_before_drop_table_sec>
</clickhouse> - /etc/clickhouse-server-02/config.d/docker_related_config.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
<clickhouse>
<!-- 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>
<!--
<logger>
<console>1</console>
</logger>
-->
</clickhouse> - /etc/clickhouse-server-02/config.d/macros.xml
1
2
3
4
5
6
<clickhouse>
<macros>
<replica>clickhouse-02</replica>
</macros>
</clickhouse> - /etc/clickhouse-server-02/config.d/metrika.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<clickhouse>
<!-- Configuration of clusters that could be used in Distributed tables.
https://clickhouse.com/docs/en/operations/table_engines/distributed/
-->
<remote_servers>
<ck_cluster>
<shard>
<internal_replication>true</internal_replication>
<replica>
<host>clickhouse-01</host>
<port>9011</port>
<user>replicator</user>
<password>replicator1234</password>
</replica>
<replica>
<host>clickhouse-02</host>
<port>9211</port>
<user>replicator</user>
<password>replicator1234</password>
</replica>
</shard>
</ck_cluster>
</remote_servers>
</clickhouse> - /etc/clickhouse-server-02/config.d/zookeeper.xml
1
2
3
4
5
6
7
8
9
<clickhouse>
<zookeeper>
<node>
<host>zkserver</host>
<port>2181</port>
</node>
</zookeeper>
</clickhouse> - /etc/clickhouse-server-02/users.xml
1
無異動
- /etc/clickhouse-server-02/users.d/user-custom.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<clickhouse>
<users>
<default remove="remove">
</default>
<replicator>
<password>replicator1234</password>
<networks>
<ip>::/0</ip>
</networks>
<profile>default</profile>
<quota>default</quota>
</replicator>
<clickhouse>
<password>clickhouse1234</password>
<networks>
<ip>::/0</ip>
</networks>
<profile>default</profile>
<quota>default</quota>
</clickhouse>
</users>
</clickhouse>
- /etc/clickhouse-server-02/config.xml
注意:以上設定和配置「可能」不完全有作用或是正確,目前僅提供當前可運作的設定,建議還是根據官方文件進行調整,像是這邊就沒有使用分片的集群設定。
註:可參考官方文件Configuration Files、Global Server Settings、User Settings
Run & Test
此處是使用瀏覽器開啟
web-client
進行測試。1
http://127.0.0.1:8080
連線配置
注意:[http://host:port *]這個要輸入位置,不要看畫面好像有輸入了就不輸入,那只是個
placeholder
。
注意:使用者為clickhouse
密碼為clickhouse1234
。可見user-custom.xml
配置。
注意:[HTTP Base auth],如果無法連入可以勾選或取消勾選試試看。相關的語法:
注意:語法結束符號為
;
,當你要執行多行指令的時候會出錯,請使用;;
,該問題應該是web-client
的問題。首先於
clickhouse-01
和clickhouse-02
建立資料庫與分布式表。1
2
3
4
5
6
7
8
9
10
11
12
13-- 建立資料庫
CREATE DATABASE test;;
-- 建立分布式表,具有 ReplicatedReplacingMergeTree 引擎
CREATE TABLE IF NOT EXISTS test.sample_table
(
id UInt64,
name String,
age UInt32,
update_at DateTime
)
ENGINE = ReplicatedReplacingMergeTree('/clickhouse/tables/test/sample_table', '{replica}', update_at)
ORDER BY id;;於
clickhouse-01
執行寫入示範資料,並查詢。1
2
3
4
5
6
7
8
9-- 寫入示範資料
INSERT INTO test.sample_table (id, name, age, update_at)
VALUES
(1, 'John', 30, now()),
(2, 'Alice', 25, now()),
(3, 'Bob', 35, now());;
-- 查詢資料
SELECT * FROM test.sample_table;;於
clickhouse-02
執行並查詢,可見資料已經同步。1
2-- 查詢資料
SELECT * FROM test.sample_table;;
ClickHouse GUI 工具
- 【免費】dbeaver
- 該工具還有支援其他資料庫,個人覺得滿推薦的。
Other Docker Compose List
如需要找尋其他的 Docker Compose ,可以參考Docker Compose - 簡介的分享目錄。
註:以上參考了
Docker
ClickHouse
dbeaver