Docker Compose - ClickHouse (cluster - CK)
前言
此篇主要是針對ClickHouse
提供使用ClickHouse Keeper
建立集群Docker Compose
的內容。
為何使用ClickHouse Keeper
,主要是官方建議使用它的ClickHouse keeper
,官方的詳細說明連結
Docker Image
此處直接使用Docker hub
上的clickhouse/clickhouse-server:23.5.3.24。
另外有在多掛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
56version: "3.3"
services:
clickhouse01:
container_name: clickhouse-01
hostname: clickhouse-01
image: clickhouse/clickhouse-server:23.5.3.24
ulimits:
nproc: 65535
nofile:
soft: 262144
hard: 262144
volumes:
- "./clickhouse-01:/var/lib/clickhouse"
- "./clickhouse-server-01:/etc/clickhouse-server"
- "./clickhouse-log-01:/var/log/clickhouse-server"
ports:
- "8123:8123"
- "9000:9000"
- "9181:9181"
networks:
- clickhouse-cluster
clickhouse02:
container_name: clickhouse-02
hostname: clickhouse-02
image: clickhouse/clickhouse-server:23.5.3.24
ulimits:
nproc: 65535
nofile:
soft: 262144
hard: 262144
volumes:
- "./clickhouse-02:/var/lib/clickhouse"
- "./clickhouse-server-02:/etc/clickhouse-server"
- "./clickhouse-log-02:/var/log/clickhouse-server"
ports:
- "8124:8123"
- "9001:9000"
- "9182:9181"
networks:
- clickhouse-cluster
tabix-web-client:
container_name: tabix-web-client
image: spoonest/clickhouse-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。
- 掛載主機路徑(格式為
SOURCE:TARGET
)。 - 暴露端口
8123
、8123
(格式為HOST:CONTAINER
)。 - 暴露端口
9000
、9000
(格式為HOST:CONTAINER
)。 - 暴露端口
9181
、9181
(格式為HOST:CONTAINER
)。 - 加入的網路(
networks
名稱)。 - 定義
services
名稱為clickhouse02
。 - 使用
clickhouse/clickhouse-server:23.5.3.24
映像。 - 容器名稱定義
clickhouse-02
。 - 指定容器的限制值。
- 指定最大處理程序 65535。
- 打開文件數量。
- 指定文件句柄數 262144(軟限制,應用可以隨時修改,不能超過硬限制)。
- 指定文件句柄數 262144(系統硬限制,只能 root 用戶提高)。
- 打開文件數量。
- 指定最大處理程序 65535。
- 掛載主機路徑(格式為
SOURCE:TARGET
)。 - 暴露端口
8124
、8123
(格式為HOST:CONTAINER
)。 - 暴露端口
9001
、9000
(格式為HOST:CONTAINER
)。 - 暴露端口
9182
、9181
(格式為HOST:CONTAINER
)。 - 加入的網路(
networks
名稱)。 - 定義
services
名稱為tabix-web-client
。 - 使用
spoonest/clickhouse-tabix-web-client
映像。 - 容器名稱定義
tabix-web-client
。 - 依賴服務(指定
services
名稱)。 - 暴露端口
8080
、80
(格式為HOST:CONTAINER
)。 - 加入的網路(
networks
名稱)。
- 版本定義為
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
無異動
- /etc/clickhouse-server-01/config.d/enable_keeper.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
26
27
28
<clickhouse>
<keeper_server>
<tcp_port>9181</tcp_port>
<server_id>1</server_id>
<log_storage_path>/var/lib/clickhouse/coordination/log</log_storage_path>
<snapshot_storage_path>/var/lib/clickhouse/coordination/snapshots</snapshot_storage_path>
<coordination_settings>
<operation_timeout_ms>10000</operation_timeout_ms>
<session_timeout_ms>30000</session_timeout_ms>
<raft_logs_level>trace</raft_logs_level>
</coordination_settings>
<raft_configuration>
<server>
<id>1</id>
<hostname>clickhouse-01</hostname>
<port>9234</port>
</server>
<server>
<id>2</id>
<hostname>clickhouse-02</hostname>
<port>9234</port>
</server>
</raft_configuration>
</keeper_server>
</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
7
8
<clickhouse>
<macros>
<cluster>events</cluster>
<shard>1</shard>
<replica>clickhouse-01</replica>
</macros>
</clickhouse> - /etc/clickhouse-server-01/config.d/remote_servers.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<clickhouse>
<remote_servers>
<events>
<shard>
<internal_replication>true</internal_replication>
<replica>
<host>clickhouse-01</host>
<port>9000</port>
</replica>
</shard>
<shard>
<internal_replication>true</internal_replication>
<replica>
<host>clickhouse-02</host>
<port>9000</port>
</replica>
</shard>
</events>
</remote_servers>
</clickhouse> - /etc/clickhouse-server-01/config.d/use_keeper.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
<clickhouse>
<zookeeper>
<node index="1">
<host>clickhouse-01</host>
<port>9181</port>
</node>
<node index="2">
<host>clickhouse-02</host>
<port>9181</port>
</node>
</zookeeper>
</clickhouse> - /etc/clickhouse-server-01/users.xml
1
無異動
- /etc/clickhouse-server-01/config.xml
- clickhouse-02
- /etc/clickhouse-server-02/config.xml
1
無異動
- /etc/clickhouse-server-02/config.d/enable_keeper.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
26
27
28
<clickhouse>
<keeper_server>
<tcp_port>9181</tcp_port>
<server_id>2</server_id>
<log_storage_path>/var/lib/clickhouse/coordination/log</log_storage_path>
<snapshot_storage_path>/var/lib/clickhouse/coordination/snapshots</snapshot_storage_path>
<coordination_settings>
<operation_timeout_ms>10000</operation_timeout_ms>
<session_timeout_ms>30000</session_timeout_ms>
<raft_logs_level>trace</raft_logs_level>
</coordination_settings>
<raft_configuration>
<server>
<id>1</id>
<hostname>clickhouse-01</hostname>
<port>9234</port>
</server>
<server>
<id>2</id>
<hostname>clickhouse-02</hostname>
<port>9234</port>
</server>
</raft_configuration>
</keeper_server>
</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
7
8
<clickhouse>
<macros>
<cluster>events</cluster>
<shard>1</shard>
<replica>clickhouse-02</replica>
</macros>
</clickhouse> - /etc/clickhouse-server-02/config.d/remote_servers.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<clickhouse>
<remote_servers>
<events>
<shard>
<internal_replication>true</internal_replication>
<replica>
<host>clickhouse-01</host>
<port>9000</port>
</replica>
</shard>
<shard>
<internal_replication>true</internal_replication>
<replica>
<host>clickhouse-02</host>
<port>9000</port>
</replica>
</shard>
</events>
</remote_servers>
</clickhouse> - /etc/clickhouse-server-02/config.d/use_keeper.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
<clickhouse>
<zookeeper>
<node index="1">
<host>clickhouse-01</host>
<port>9181</port>
</node>
<node index="2">
<host>clickhouse-02</host>
<port>9181</port>
</node>
</zookeeper>
</clickhouse> - /etc/clickhouse-server-02/users.xml
1
無異動
- /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
。
注意:預設的使用者為default
密碼為空。可見users.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
Github - mr-karan - clickhouse-keeper-example
dbeaver