架設環境:3台host (192.168.0.1, 192.168.0.2, 192.168.0.3)
情 境:3台獨立VM,各架設一個cassandra node,組成cassandra cluster。第1, 2台host的node設為seed
下載cassandra image
$ docker pull cassandra
在第一台VM上建立cassandra,指令如下:
$ docker run --restart=always --name cassandra-1 -d -e CASSANDRA_BROADCAST_ADDRESS=192.168.0.1 -p 7000:7000 cassandra
第1個node的container ID如下:
3b39bc42cce1f64b6d182c2da0bf5c7a947c22e6fea8f050460b00cb20191938
接著來建第2台host上的cassandra node(一樣設為seed)
$ docker run --restart=always --name cassandra-2 -d -e CASSANDRA_BROADCAST_ADDRESS=192.168.0.2 -p 7000:7000 -e CASSANDRA_SEEDS=192.168.0.1,192.168.0.2 cassandra
第2個node的container ID如下:
最後來建第3個node
$ docker run --restart=always --name cassandra-3 -d -e CASSANDRA_BROADCAST_ADDRESS=192.168.0.3 -p 7000:7000 -e CASSANDRA_SEEDS=192.168.0.1,192.168.0.2 cassandra
第3個node的container ID如下:
54998f92da5330471fdb7f6d719e7c163fe9b738137e8a63ad2b04cf32b4157e
三台都建立完畢後,接著來測試看看cassandra功能是否正常
測試劇本:先在cassandra-1建立test_keyspace,接著在cassandra-2使用test_keyspace並建立test_table,最後在cassandra-3查詢test_table
(劇本只要能夠測試出3個node有同步即可,可自由發揮)
我們先進入cassandra-1 (container ID不一定要打完全部,只要前幾碼就可以,能讓Docker分辨就可)
$ docker exec -it 3b39bc bash
進入docker後,執行cqlsh
$ cd /bin
$ cqlsh
接著會進入cqlsh的指令視窗
Connected to Test Cluster at 127.0.0.1:9042.
[cqlsh 5.0.1 | Cassandra 3.11.0 | CQL spec 3.4.4 | Native protocol v4]
Use HELP for help.
cqlsh>
建立keyspace
cqlsh > CREATE KEYSPACE test_keyspace WITH REPLICATION = {
'class' : 'SimpleStrategy',
'replication_factor' : 2
};
接著進入cassandra-2,並使用test_keyspace建立test_table
$ docker exec -it fc04 bash
$ cqlsh
cqlsh > use test_keyspace;
cqlsh:test_keyspace> CREATE TABLE test_table(
id int PRIMARY KEY,
name text
);
接著進入cassandra-3,並查詢test_keyspace內的test_table
$ docker exec -it 5499 bash
$ cqlsh
cqlsh > use test_keyspace;
cqlsh:test_keyspace> select * from test_table;
目前table是空的,我們來insert一筆資料
cqlsh:test_keyspace> insert into test_table (id, name) values (1, 'Doraemon');
id | name
----+----------
1 | Doraemon
(1 rows)
最後不管是用cassandra-1, cassandra-2查詢也應該要有1筆資料喔~
cqlsh:test_keyspace> select * from test_table;
id | name
----+----------
1 | Doraemon
(1 rows)
若3個node的資料均有同步,就代表成功啦~
[2017-08-29 新增需求如下]
安裝cassandra視窗gui,為使其能讀到cassandra資料,需開放9042, 9160 port
建立data volume
node 1 & seed 1:
$ docker run --restart=always --name cassandra-1 -d -v /var/docker_volume/cassandra:/var/lib/cassandra -e CASSANDRA_BROADCAST_ADDRESS=192.168.0.1 -p 7000:7000 -p 9042:9042 -p 9160:9160 cassandra
node 2 & seed 2:
$ docker run --restart=always --name cassandra-2 -d -v /var/docker_volume/cassandra:/var/lib/cassandra -e CASSANDRA_BROADCAST_ADDRESS=192.168.0.2 -e CASSANDRA_SEEDS=192.168.0.1,192.168.0.2,192.168.0.3 -p 7000:7000 -p 9042:9042 -p 9160:9160 cassandra
node 3:
$ docker run --restart=always --name cassandra-3 -d -v /var/docker_volume/cassandra:/var/lib/cassandra -e CASSANDRA_BROADCAST_ADDRESS=192.168.0.3 -e CASSANDRA_SEEDS=192.168.0.1,192.168.0.2,192.168.0.3 -p 7000:7000 -p 9042:9042 -p 9160:9160 cassandra
[2018-07-03 新增需求如下]
執行Docker內的nodetool
$ docker exec -it [ContainerID] nodetool status
$ docker exec -it [ContainerID] nodetool version
$ docker exec -it cassandra-2 nodetool status
$ docker exec -it cassandra-2 nodetool version
如果觉得这篇文章不错的话, 不妨关注一下 : )
领取专属 10元无门槛券
私享最新 技术干货