Apache Cassandra3.10集群安装部署

时间:2021-09-30 04:50:19

转载请注明出处: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所有节点都是对等的。可以使用类似SQL的CQL语言进行操作。集群中,一个应用一般包含一个keyspace,每个keyspace包含多个表,这个表应该有对应的memtable。Cassandra使用gossip协议在点与点间进行数据交换(点对点协议)。

三、安装步骤

本文使用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

注:我在每个节点都创建了cassandra用户,指定将部署根目录安排在/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


删除keyspace
DROP KEYSPACE [ IF EXISTS ] ezkeys

创建表
在keyspace下进行表创建,一般表创建包含列声明和表选项(table options)。
例如:
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' };