Like Share Discussion Bookmark Smile

J.J. Huang   2023-09-19   Docker Docker Compose   瀏覽次數:次   DMCA.com Protection Status

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
    56
    version: "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 用戶提高)。
    • 掛載主機路徑(格式為SOURCE:TARGET)。
    • 暴露端口81238123(格式為HOST:CONTAINER)。
    • 暴露端口90009000(格式為HOST:CONTAINER)。
    • 暴露端口91819181(格式為HOST:CONTAINER)。
    • 加入的網路(networks名稱)。
    • 定義services名稱為clickhouse02
    • 使用clickhouse/clickhouse-server:23.5.3.24映像。
    • 容器名稱定義clickhouse-02
    • 指定容器的限制值。
      • 指定最大處理程序 65535。
        • 打開文件數量。
          • 指定文件句柄數 262144(軟限制,應用可以隨時修改,不能超過硬限制)。
          • 指定文件句柄數 262144(系統硬限制,只能 root 用戶提高)。
    • 掛載主機路徑(格式為SOURCE:TARGET)。
    • 暴露端口81248123(格式為HOST:CONTAINER)。
    • 暴露端口90019000(格式為HOST:CONTAINER)。
    • 暴露端口91829181(格式為HOST:CONTAINER)。
    • 加入的網路(networks名稱)。
    • 定義services名稱為tabix-web-client
    • 使用spoonest/clickhouse-tabix-web-client映像。
    • 容器名稱定義tabix-web-client
    • 依賴服務(指定services名稱)。
    • 暴露端口808080(格式為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
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
.
├── clickhouse-01 # clickhouse-01 儲存的資料目錄
├── clickhouse-02 # clickhouse-02 儲存的資料目錄
├── clickhouse-log-01 # clickhouse-01 Log檔目錄
│ ├── clickhouse-server.err.log # clickhouse-01 ErrLog檔
│ └── clickhouse-server.log # clickhouse-01 Log檔
├── clickhouse-log-02 # clickhouse-02 Log檔目錄
│ ├── clickhouse-server.err.log # clickhouse-02 ErrLog檔
│ └── clickhouse-server.log # clickhouse-02 Log檔
├── clickhouse-server-01 # clickhouse-01 設定檔目錄
│ ├── config.d # 單獨設定檔目錄
│ │ ├── enable_keeper.xml # clickhouse-keeper的協調設定
│ │ ├── docker_related_config.xml # docker相關設定
│ │ ├── macros.xml # 宏的相關設定
│ │ ├── remote_servers.xml # 分佈式表中使用的集群的相關設定
│ │ └── use_keeper.xml # clickhouse-keeper的節點設定
│ ├── config.xml # 主要設定檔
│ ├── users.d # 針對用户的單獨設定檔目錄
│ │ └── user-custom.xml # 單獨用戶設定檔
│ └── users.xml # 主要用戶設定檔
├── clickhouse-server-02 # clickhouse-02 設定檔目錄
│ ├── config.d # 單獨設定檔目錄
│ │ ├── enable_keeper.xml # clickhouse-keeper的協調設定
│ │ ├── docker_related_config.xml # docker相關設定
│ │ ├── macros.xml # 宏的相關設定
│ │ ├── remote_servers.xml # 分佈式表中使用的集群的相關設定
│ │ └── use_keeper.xml # clickhouse-keeper的節點設定
│ ├── config.xml # 主要設定檔
│ ├── users.d # 針對用户的單獨設定檔目錄
│ │ └── user-custom.xml # 單獨用戶設定檔
│ └── users.xml # 主要用戶設定檔
└── docker-compose.yml

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
      <?xml version="1.0"?>
      <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
      <?xml version="1.0"?>
      <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
      <?xml version="1.0"?>
      <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
      <?xml version="1.0"?>
      <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
      <?xml version="1.0"?>
      <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
      無異動
  • 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
      <?xml version="1.0"?>
      <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
      <?xml version="1.0"?>
      <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
      <?xml version="1.0"?>
      <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
      <?xml version="1.0"?>
      <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
      <?xml version="1.0"?>
      <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
      無異動

注意:以上設定和配置「可能」不完全有作用或是正確,目前僅提供當前可運作的設定,建議還是根據官方文件進行調整。
註:可參考官方文件Configuration FilesGlobal Server SettingsUser 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-01clickhouse-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