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
41version: '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
。 - 暴露端口
7000
、7000
(格式為HOST:CONTAINER
)。 - 暴露端口
7001
、7001
(格式為HOST:CONTAINER
)。 - 暴露端口
9042
、9042
(格式為HOST:CONTAINER
)。 - 暴露端口
9160
、9160
(格式為HOST:CONTAINER
)。 - 掛載主機路徑(格式為
SOURCE:TARGET
)。 - 環境變數設定
- CASSANDRA_BROADCAST_ADDRESS=cassandra-1
- CASSANDRA_SEEDS=cassandra-1,cassandra-2,cassandra-3
- 定義
services
名稱為cassandra-2
。 - 使用
cassandra:latest
映像。 - 容器名稱定義
cassandra-2
。 - 暴露端口
7002
、7000
(格式為HOST:CONTAINER
)。 - 暴露端口
7003
、7001
(格式為HOST:CONTAINER
)。 - 暴露端口
9043
、9042
(格式為HOST:CONTAINER
)。 - 暴露端口
9161
、9160
(格式為HOST:CONTAINER
)。 - 掛載主機路徑(格式為
SOURCE:TARGET
)。 - 環境變數設定
- CASSANDRA_BROADCAST_ADDRESS=cassandra-2
- CASSANDRA_SEEDS=cassandra-1,cassandra-2,cassandra-3
- 定義
services
名稱為cassandra-3
。 - 使用
cassandra:latest
映像。 - 容器名稱定義
cassandra-3
。 - 暴露端口
7004
、7000
(格式為HOST:CONTAINER
)。 - 暴露端口
7005
、7001
(格式為HOST:CONTAINER
)。 - 暴露端口
9044
、9042
(格式為HOST:CONTAINER
)。 - 暴露端口
9162
、9160
(格式為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 - 簡介的分享目錄。