Cassandra是一套开源分布式NoSQL数据库,采用无中心对等分布式模型,具备高可用和高伸展性特点。最初由Facebook开发,后转变成了开源项目。以Amazon专有的完全分布式的Dynamo为基础,结合了Google BigTable基于列族(Column Family)的数据模型,很多方面都可以称之为Dynamo 2.0。本文基于CentOS7.6,部署Cassandra 3.11.6,详细过程如下:
1、准备机器
准备2台机器,安装CentOS7.6。ip计划如下:
192.168.2.13 ca-node1
192.168.2.14 ca-node2
2、关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
3、安装JDK
本处安装jdk-8u231-linux-x64,并配置好环境变量。
4、修改主机名
#设置主机名
hostnamectl set-hostname ca-node1
通过hostname命令查看主机名,修改完后重启。
5、配置IP映射
vim /etc/hosts
最后增加以下内容:
192.168.2.13 ca-node1
192.168.2.14 ca-node2
6、创建用户
在root用户下添加cassandra用户:
#添加组
groupadd cassandra
#添加用户
adduser cassandra -g cassandra
#设置密码
passwd cassandra
给cassandra用户赋予权限:
#编辑/etc/sudoers
vi /etc/sudoers
#在root ALL=(ALL) ALL下增加cassandra配置,最终如下
root ALL=(ALL) ALL
cassandra ALL=(ALL) ALL
1、部署Cassandra
从https://mirrors.tuna.tsinghua.edu.cn/apache/cassandra/3.11.6/下载apache-cassandra-3.11.6-bin.tar.gz,上传到服务器,并解压缩。/data目录为大容量磁盘,创建数据文件和日志文件目录:
#创建数据目录
mkdir -p /data/cassandra/data
#创建日志目录
mkdir -p /data/cassandra/commitlog
#创建缓存目录
mkdir -p /data/cassandra/saved_caches
配置ca-node1,编辑apache-cassandra-3.11.6/conf/cassandra.yml,修改内容如下:
#集群名称,同集群名称相同
cluster_name: 'SDC-CA-Cluster'
#数据目录
data_file_directories:
- /data/cassandra/data
#日志目录
commitlog_directory: /data/cassandra/commitlog
#缓存目录
saved_caches_directory: /data/cassandra/saved_caches
#集群种子节点ip,新加入的节点从种子节点同步数据,可为多个,中间逗号分隔
- seeds: "192.168.2.13"
#监听地址(本机ip或主机名)
listen_address: ca-node1
#rpc地址(本机ip或0.0.0.0)
rpc_address: 0.0.0.0
#如果rpc_address设置为0.0.0.0,则放开此行注释
broadcast_rpc_address: 1.2.3.4
配置ca-node2,编辑apache-cassandra-3.11.6/conf/cassandra.yml,修改内容如下:
#集群名称,同集群名称相同
cluster_name: 'SDC-CA-Cluster'
#数据目录
data_file_directories:
- /data/cassandra/data
#日志目录
commitlog_directory: /data/cassandra/commitlog
#缓存目录
saved_caches_directory: /data/cassandra/saved_caches
#集群种子节点ip,新加入的节点从种子节点同步数据,可为多个,中间逗号分隔
- seeds: "192.168.2.13"
#监听地址(本机ip或主机名)
listen_address: ca-node2
#rpc地址(本机ip或0.0.0.0)
rpc_address: 0.0.0.0
#如果rpc_address设置为0.0.0.0,则放开此行注释
broadcast_rpc_address: 1.2.3.4
2、命令行启动
#切换到cassandra目录
cd /data/soft/apache-cassandra-3.11.6
#启动cassandra
./bin/cassandra
查看集群状态:
[cassandra@ca-node1 apache-cassandra-3.11.6]$ ./bin/nodetool status
Datacenter: datacenter1
=======================
Status=Up/Down
|/ State=Normal/Leaving/Joining/Moving
-- Address Load Tokens Owns (effective) Host ID Rack
UN 192.168.2.13 360.3 KiB 256 100.0% 434437e1-92c1-4508-9a70-5f45edea1db7 rack1
UN 192.168.2.14 300.27 KiB 256 100.0% bf5b6b34-aaa8-4db6-800b-1525a4d54f3f rack1
3、开机启动
创建启动服务
sudo vim /usr/lib/systemd/system/cassandra.service
内容为:
[Unit]
Description=Cassandra Server Service
After=network.service
[Service]
Type=simple
#jdk路径
Environment=JAVA_HOME=/usr/java/jdk1.8.0_231-amd64
PIDFile=/var/run/cassandra.pid
#cassandra用户和用户组
User=cassandra
Group=cassandra
#此处为Cassandra包解压后的路径
ExecStart=/data/soft/apache-cassandra-3.11.6/bin/cassandra -f -p /var/run/cassandra.pid
StandardOutput=journal
StandardError=journal
LimitNOFILE=100000
LimitMEMLOCK=infinity
LimitNPROC=32768
LimitAS=infinity
[Install]
WantedBy=multi-user.target
#查看状态
sudo systemctl status cassandra
#启动
sudo systemctl start cassandra
#设置为开机启动
sudo systemctl enable cassandra
三、简单使用
#进入cassandra目录
cd /data/soft/apache-cassandra-3.11.6
#连接cassandra
./bin/cqlsh
Connected to SDC-CA-Cluster at 127.0.0.1:9042.
[cqlsh 5.0.1 | Cassandra 3.11.6 | CQL spec 3.4.4 | Native protocol v4]
Use HELP for help.
#查看所有键空间
cqlsh> describe keyspaces;
system_traces system_schema system_auth system system_distributed
#创建键空间
cqlsh> create keyspace demo with replication = {'class':'SimpleStrategy', 'replication_factor' : 1};
#使用Keyspace
cqlsh> use demo;
#创建表
cqlsh:demo> create table student(
id int primary key,
name text,
age smallint
);
#插入数据
cqlsh:demo> insert into student(id,name,age) VALUES (1,'wangm',30);
cqlsh:demo> insert into student(id,name,age) VALUES (2,'wangj',29);
#查询所有数据
cqlsh:demo> select * from student;
id | age | name
----+-----+-------
1 | 30 | wangm
2 | 29 | wangj
(2 rows)
#创建索引
cqlsh:demo> create index student_name_index on student(name);
#条件查询
cqlsh:demo> select * from student where name = 'wangm';
id | age | name
----+-----+-------
1 | 30 | wangm
(1 rows)
#查看表详情
cqlsh:demo> describe student;
CREATE TABLE demo.student (
id int PRIMARY KEY,
age smallint,
name text
) WITH bloom_filter_fp_chance = 0.01
AND caching = {'keys': 'ALL', 'rows_per_partition': 'NONE'}
AND comment = ''
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';
CREATE INDEX student_name_index ON demo.student (name);