Like Share Discussion Bookmark Smile

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

Docker Compose - Cassandra (cluster)

前言

此篇主要是針對Cassandra提供集群的Docker Compose的內容。
可以參考上一篇的介紹Docker Compose - Cassandra (single)

Docker Image

此處直接使用Docker hub上的cassandra:latest

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
    version: '3.3'
    services:
    cassandra-1:
    image: cassandra:latest
    container_name: cassandra-1
    ports:
    - "7000:7000"
    - "7001:7001"
    - "9042:9042"
    - "9160:9160"
    volumes:
    - ./cassandra_data_01/:/var/lib/cassandra/
    environment:
    - CASSANDRA_BROADCAST_ADDRESS=cassandra-1
    - CASSANDRA_SEEDS=cassandra-1,cassandra-2,cassandra-3
    cassandra-2:
    image: cassandra:latest
    container_name: cassandra-2
    ports:
    - "7002:7000"
    - "7003:7001"
    - "9043:9042"
    - "9161:9160"
    volumes:
    - ./cassandra_data_02/:/var/lib/cassandra/
    environment:
    - CASSANDRA_BROADCAST_ADDRESS=cassandra-2
    - CASSANDRA_SEEDS=cassandra-1,cassandra-2,cassandra-3
    cassandra-3:
    image: cassandra:latest
    container_name: cassandra-3
    ports:
    - "7004:7000"
    - "7005:7001"
    - "9044:9042"
    - "9162:9160"
    volumes:
    - ./cassandra_data_03/:/var/lib/cassandra/
    environment:
    - CASSANDRA_BROADCAST_ADDRESS=cassandra-3
    - CASSANDRA_SEEDS=cassandra-1,cassandra-2,cassandra-3

    説明:

    • 版本定義為3.3
    • 定義services名稱為cassandra-1
    • 使用cassandra:latest映像。
    • 容器名稱定義cassandra-1
    • 暴露端口70007000(格式為HOST:CONTAINER)。
    • 暴露端口70017001(格式為HOST:CONTAINER)。
    • 暴露端口90429042(格式為HOST:CONTAINER)。
    • 暴露端口91609160(格式為HOST:CONTAINER)。
    • 掛載主機路徑(格式為SOURCE:TARGET)。
    • 環境變數設定
      • CASSANDRA_BROADCAST_ADDRESS=cassandra-1
      • CASSANDRA_SEEDS=cassandra-1,cassandra-2,cassandra-3
    • 定義services名稱為cassandra-2
    • 使用cassandra:latest映像。
    • 容器名稱定義cassandra-2
    • 暴露端口70027000(格式為HOST:CONTAINER)。
    • 暴露端口70037001(格式為HOST:CONTAINER)。
    • 暴露端口90439042(格式為HOST:CONTAINER)。
    • 暴露端口91619160(格式為HOST:CONTAINER)。
    • 掛載主機路徑(格式為SOURCE:TARGET)。
    • 環境變數設定
      • CASSANDRA_BROADCAST_ADDRESS=cassandra-2
      • CASSANDRA_SEEDS=cassandra-1,cassandra-2,cassandra-3
    • 定義services名稱為cassandra-3
    • 使用cassandra:latest映像。
    • 容器名稱定義cassandra-3
    • 暴露端口70047000(格式為HOST:CONTAINER)。
    • 暴露端口70057001(格式為HOST:CONTAINER)。
    • 暴露端口90449042(格式為HOST:CONTAINER)。
    • 暴露端口91629160(格式為HOST:CONTAINER)。
    • 掛載主機路徑(格式為SOURCE:TARGET)。
    • 環境變數設定
      • CASSANDRA_BROADCAST_ADDRESS=cassandra-3
      • CASSANDRA_SEEDS=cassandra-1,cassandra-2,cassandra-3

    註:關於環境變數可以參考

Run & Test

  • 此處是進入容器並使用cqlsh進行測試。

    註:如果有此錯誤Connection error: ('Unable to connect to any servers', {'127.0.0.1:9042': ConnectionRefusedError(111, "Tried connecting to [('127.0.0.1', 9042)]. Last error: Connection refused")}),表示Cassandra還沒有完全啟動完畢,請稍等一下再次下cqlsh指令即可。

  • 相關的語法:

    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
    -- 建立 test keyspace
    CREATE KEYSPACE test
    WITH REPLICATION = {
    'class' : 'SimpleStrategy',
    'replication_factor' : 3
    };

    -- 使用 test keyspace
    USE test;

    -- 建立 example table
    CREATE TABLE test.example (
    name text,
    position int,
    PRIMARY KEY (name, position));

    -- 寫入資料
    INSERT INTO test.example (name, position)
    VALUES ('luffy', 1);

    INSERT INTO test.example (name, position)
    VALUES ('zoro', 2);

    INSERT INTO test.example (name, position)
    VALUES ('nami', 3);

    -- 查詢資料
    SELECT * FROM test.example;

    註記:replication_factor 注意到是設定 3。

  • 主要是在不同的容器內,建立表、新增、刪除資料看是否有同步。

Cassandra Cli

Other Docker Compose List

如需要找尋其他的 Docker Compose ,可以參考Docker Compose - 簡介的分享目錄。


註:以上參考了
Docker
Cassandra
TablePlus