转载请注明出处:http://blog.csdn.net/u012842205/article/details/72781463
一、安装环境
操作系统:CentOS Linux release 7.2.1511 (Core)
Cassandra版本:Apache Cassandra3.10
Oracle JDK:1.8.0_101
集群节点:5;Intel(R) Xeon(R) CPU E5-2620 v3 @ 2.40GHz双核;内存30G;硬盘总共约3T。
二、Apache Cassandra简介
Apache Cassandra是一个分布式的高可用NoSQL数据库。具有良好的扩展性。Cassandra 的数据模型是基于列族(Column Family)的四维或五维模型。它借鉴了 Amazon 的 Dynamo 和 Google's BigTable 的数据结构和功能特点,采用 Memtable 和 SSTable 的方式进行存储。在 Cassandra 写入数据之前,需要先记录日志 ( CommitLog ),然后数据开始写入到 Column Family 对应的 Memtable 中,Memtable 是一种按照 key 排序数据的内存结构,在满足一定条件时,再把 Memtable 的数据批量的刷新到磁盘上,存储为 SSTable 。
三、安装步骤
本文使用Apache Cassandra3.10版本作安装示例。由于Cassandra运行在JVM上,需要事先安装JDK。此处不赘述。Cassandra每个节点的配置都差不多,我部署的基本思路是:先配置部署好一个节点,再复制了配置目录到其他节点,修改一些配置参数即可。
1、下载解压
从Cassandra官方站下载Cassandra部署包(安装包),也就是编译好的tar.gz。这里我下载了apache-cassandra-3.10-bin.tar.gz(有可能链接会失效)。
上传到集群某一台节点上,解压部署包:
tar -xzvf ./apache-cassandra-3.10-bin.tar.gz -C /home/cassandra
这时候,在/home/cassandra/apache-cassandra-3.10-bin目录下将至少产生以下目录:
bin:可执行脚本存放位置,存放客户端工具、服务启动脚本、服务工具等。
conf: 服务器配置文件路径,所有配置文件都存放于此。
interface:这里存放客户端到服务器端thrift RPC的接口配置文件,一般我们用不到。
lib:存放cassandra核心jar和所有依赖jars。
logs:日志文件存放路径。
pylib:python脚本库。
tools:一些工具,多半用python写的。
我们关注点主要在bin、conf和logs三个目录。
2、配置节点
修改的配置文件主要是三个:cassandra.yaml,cassandra-env.sh,jvm.properties。
(1)cassandra.yaml
这个配置文件最为重要,使用yaml格式配置。下面主要讲几个非常重要的配置,最好将这几个配置项都配上。
cluster_name:集群名称,一个友好的名称,比如命名“ez's Cassandra Cluster”;
seeds:种子节点,为了使集群中的各节点在启动时能发现其他节点,需要指定种子节点(seeds),各节点都先和种子节点通信,通过种子节点获取其他节点列表,然后和其他节点通信。种子节点可以指定多个,用逗号分割开。
storage_port:可以使用默认的配置,7000,这个端口用于接收命令和数据。
listen_address:这个地址用于节点之间的通信,也可以配置listen_interface,指定使用哪个网卡接口。两者选一配置即可,不要同时配置。
native_transport_port:这个端口用于Client到Cassandra服务的通信。注意配置防火墙。
(2)cassandra-env.sh
我仅仅配置了如下两项:
MAX_HEAP_SIZE="4G"
HEAP_NEWSIZE="800M"
字面意思很好理解,最大Heap内存,HEAP_NEWSIZE是新生代内存区大小。两个必须同时配置。
(3)jvm.properties
这个配置文件我没有做更改,全使用默认的JVM配置选项。
四、启动集群
以上配置完成后,我们启动这个节点试试。在部署根目录运行bin/cassandra,一段时间后若能jsp查看到进程名,且查看log中的日志文件system.log,没有啥异常日志,则启动成功。
五、集群部署
将整个部署目录发送到各个节点,或者按照上面的步骤在各个节点部署一遍,并启动即可。这里需要注意,最好将部署根目录上的data目录去掉。
六、使用测试
1、查看集群状态
这里我们使用Cassandra提供的工具:bin/nodetool
nodetool info
各个节点上运行以上命令,可以查看当前节点运行状态。这个工具命令也可以跨节点获取状态,需要配置JVM的jmx remote。
nodetool status
可以查看到整个集群的状态。
2、客户端登录
我们使用Cassandra提供的cqlsh工具,运行bin/cqlsh,我们只需要指定一个节点的ip和port即可,port是之前配置在cassandra.yaml中的native_transport_port端口。
bin/cqlsh 192.168.1.3 9042
链接成功后,将打印出集群名称,Cassandra版本,cqlsh版本等。并给出交互式命令提示符。
枚举所有keyspace(类似于Database):
desc keyspaces
切换keyspace
使用use语句,例如:use ezkeys
DROP KEYSPACE [ IF EXISTS ] ezkeys
CREATE TABLE timeline (
userid uuid,
posted_month int,
posted_time uuid,
body text,
posted_by text,
PRIMARY KEY (userid, posted_month, posted_time)
) WITH compaction = { 'class' : 'LeveledCompactionStrategy' };