首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

用Docker建立Cassandra Cluster

架設環境: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

如果觉得这篇文章不错的话, 不妨关注一下 : )

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20190822A075YV00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券