Fork me on GitHub

Cassandra Install & Deploy [安装部署]

Cassandra是一套开源分布式NoSQL数据库系统。它最初由Facebook开发,用于储存收件箱等简单格式数据,集GoogleBigTable的数据模型与Amazon Dynamo的完全分布式的架构于一身Facebook于2008将 Cassandra 开源,此后,由于Cassandra良好的可扩展性,被Digg、Twitter等知名Web 2.0网站所采纳,成为了一种流行的分布式结构化数据存储方案。



测试环境

1
2
3
4
5
6
7
8
Ubuntu Server 14.04 x64
JDK 1.8+
python 2.7.11+
Cassandra 3.0.9

server1: 192.168.1.110 seeds
server2: 192.168.1.111 seeds
server3: 192.168.1.112

cassandra安装

修改cassandra.yaml配置文件

1
2
# 每一个节点上新建数据目录
mdkir cassandra-data
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
# 修改参数

vim conf/cassandra.yaml

cluster_name: 'Cassandra Cluster'

hints_directory: /home/wxmimperio/data/cassandra-data/hints

data_file_directories:
- /home/wxmimperio/data/cassandra-data/data

commitlog_directory: /home/wxmimperio/data/cassandra-data/commitlog

saved_caches_directory: /home/wxmimperio/data/cassandra-data/saved_caches

- seeds: "192.168.1.110,192.168.1.111"

listen_address: 192.168.1.110

# 开启thrift
start_rpc: true

rpc_address: 192.168.1.110

# batch 增加批量插入的一次插入量
batch_size_warn_threshold_in_kb: 150

batch_size_fail_threshold_in_kb: 1500

# 节点感知策略
endpoint_snitch: GossipingPropertyFileSnitch

其他节点同步目录

1
2
3
scp -r apache-cassandra-3.0.9 wxmimperio@192.168.1.111:/home/wxmimperio/software

scp -r apache-cassandra-3.0.9 wxmimperio@192.168.1.112:/home/wxmimperio/software

修改其他节点cassandra.yaml

1
2
3
4
5
6
7
8
9
# 192.168.1.111
- seeds: "192.168.1.111,192.168.1.110"
listen_address: 192.168.1.111
rpc_address: 192.168.1.111

# 192.168.1.112
- seeds: "192.168.1.111,192.168.1.110"
listen_address: 192.168.1.112
rpc_address: 192.168.1.112

启动cassandra

1
2
3
4
5
6
7
# 每一个节点

# 前台启动
./bin/cassandra -f

# 后台启动
./bin/cassandra

检查状态

1
2
3
4
5
6
7
# 在任意节点运行
./apache-cassandra-3.0.9/bin/nodetool status

-- Address Load Tokens Owns (effective) Host ID Rack
UN 192.168.1.110 91.9 KB 256 65.5% 7ea5d945-fb2f-410e-b03c-da8a1596d150 rack1
UN 192.168.1.111 112.05 KB 256 67.2% da86d35a-9819-4d33-a6df-c378c3872936 rack1
UN 192.168.1.112 150.97 KB 256 67.3% a851446d-bb15-44b6-9b2e-33fcf7076279 rack1

CQL操作

1
./apache-cassandra-3.0.9/bin/cqlsh  --request-timeout=500 192.168.1.110
  • 创建Keyspace
1
2
3
# 多数据中心策略NetworkTopologyStrategy
# 副本因子2
CREATE KEYSPACE IF NOT EXISTS cassandra_test WITH replication = {'class' : 'NetworkTopologyStrategy', 'dc1' : 2};
  • 创建表
1
2
3
4
# id、name 为组合primary key
# id 为 partition key
# name、password 为cluster key
CREATE TABLE IF NOT EXISTS cassandra_test.user(id text, name text, password text,PRIMARY KEY (id,name)) WITH comment='UserTable';
  • 查看表结构
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
DESCRIBE TABLE cassandra_test.user;

CREATE TABLE cassandra_test.user (
id text,
name text,
password text,
PRIMARY KEY (id, name)
) WITH CLUSTERING ORDER BY (name ASC)
AND bloom_filter_fp_chance = 0.01
AND caching = {'keys': 'ALL', 'rows_per_partition': 'NONE'}
AND comment = 'UserTable'
AND compaction = {'class': 'org.apache.cassandra.db.compaction.SizeTieredCompactionStrategy', 'max_threshold': '32', 'min_threshold': '4'}
AND compression = {'chunk_length_in_kb': '64', 'class': 'org.apache.cassandra.io.compress.LZ4Compressor'}
AND crc_check_chance = 1.0
AND dclocal_read_repair_chance = 0.1
AND default_time_to_live = 0
AND gc_grace_seconds = 864000
AND max_index_interval = 2048
AND memtable_flush_period_in_ms = 0
AND min_index_interval = 128
AND read_repair_chance = 0.0
AND speculative_retry = '99PERCENTILE';
  • 插入数据
1
INSERT INTO cassandra_test.user(id,name,password) VALUES('1','wxmimperio','123456');
  • 查询数据
1
2
3
4
5
SELECT * FROM cassandra_test.user WHERE id = '1';

id | name | password
----+------------+----------
1 | wxmimperio | 123456
  • 更新数据
1
2
3
4
5
6
7
UPDATE cassandra_test.user SET password = 'abcde' WHERE id = '1' AND name = 'wxmimperio';

SELECT * FROM cassandra_test.user WHERE id = '1';

id | name | password
----+------------+----------
1 | wxmimperio | abcde
  • 删除数据
1
DELETE FROM cassandra_test.user WHERE id = '1' AND name = 'wxmimperio';

检查数据一致性

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 用192.168.1.111和192.168.1.112启动CQL进行数据查询

# 192.168.1.111
SELECT * FROM cassandra_test.user WHERE id = '1';

id | name | password
----+------------+----------
1 | wxmimperio | 123456

# 192.168.1.112
SELECT * FROM cassandra_test.user WHERE id = '1';

id | name | password
----+------------+----------
1 | wxmimperio | 123456

转载请注明出处


Thank you for your support.