Cassandra安装及其简单试用

时间:2023-03-09 00:21:32
Cassandra安装及其简单试用

官方主页:
http://cassandra.apache.org/

简介:
  The Apache Cassandra Project develops a highly scalable second-generation distributed database, bringing together Dynamo's fully distributed design and Bigtable's ColumnFamily-based data model. 
Cassandra was open sourced by Facebook in 2008, and is now developed by Apache committers and contributors from many companies.

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

  • Cassandra使用了Google BigTable的数据模型,与面向行的传统的关系型数据库不同,这是一种面向列的数据库,列被组织成为列族(Column Family),在数据库中增加一列非常方便。对于搜索和一般的结构化数据存储,这个结构足够丰富和有效。
  • Cassandra的系统架构与Dynamo一脉相承,是基于O(1)DHT(分布式哈希表)的完全P2P架构,与传统的基于Sharding的数据库集群相比,Cassandra可以几乎无缝地加入或删除节点,非常适于对于节点规模变化比较快的应用场景。
  • Cassandra的数据会写入多个节点,来保证数据的可靠性,在一致性、可用性和网络分区耐受能力(CAP)的折衷问题上,Cassandra比较灵活,用户在读取时可以指定要求所有副本一致(高一致性)、读到一个副本即可(高可用性)或是通过选举来确认多数副本一致即可(折衷)。这样,Cassandra可以适用于有节点、网络失效,以及多数据中心的场景。

特性
  和其他数据库比较,Cassandra有三个突出特点:

  • 模式灵活 :使用Cassandra,像文档存储,你不必提前解决记录中的字段。你可以在系统运行时随意的添加或移除字段。这是一个惊人的效率提升,特别是在大型部署上。
  • 真正的可扩展性 :Cassandra是纯粹意义上的水平扩展。为给集群添加更多容量,可以指向另一台电脑。你不必重启任何进程,改变应用查询,或手动迁移任何数据。
  • 多数据中心识别 :你可以调整你的节点布局来避免某一个数据中心起火,一个备用的数据中心将至少有每条记录的完全复制。

一些使Cassandra提高竞争力的其他功能:

  • 范围查询 :如果你不喜欢全部的键值查询,则可以设置键的范围来查询。
  • 列表数据结构 :在混合模式可以将超级列添加到5维。对于每个用户的索引,这是非常方便的。
  • 分布式写操作 :有可以在任何地方任何时间集中读或写任何数据。并且不会有任何单点失败。

与RDBMS对比来认识cassandra:

keyspace:是cassandra中数据的最外层容器,和关系型数据库概念相近。keyspace有一个名字和一些定义了整个keyspace范围的全局行为属性。有部分人建议,给每个应用建立一个单独的keyspace,但实际没有太多事实依据。要注意,如果给一个应用创建了上千个keyspace,难免会遇到困难。

可以为一个应用创建多个keyspace,但通常只有希望为不同的列族设置不同的副本因子和副本放置策略的时候,才考虑让同一个应用使用多个keyspace。比如,对于一些低优先级的数据,可以单独放在一个设置较低副本因子的keyspace当中,这样就可以减少一些cassandra复制这些数据的工夫。但是这样增加了太多的复杂度,有可能得不偿失。

System keyspace:用于存储关于集群的原数据,以帮助各种操作顺利进行,如下面的数据库非常类似。

在SQL Server中,同样维护着两个元数据库:master和tempdb。master用于保存磁盘空间、使用率、系统设置以及一般服务安装信息等。而tempdb则是一个工作空间,用于存储中间结果和完成一般性任务的。

在Oracle中,有system的表空间,用作类似用途。

system keyspace不仅存储了用于本地节点的数据,也存储提示切换信息。这些元数据包括:

  • 节点令牌
  • 集群名
  • 用于支持动态加载的keyspace和schema的定义;
  • 迁移数据
  • 节点是否自举成功

列族:与数据库的表容器类似,keyspace是一个或多个列族的容器。列族就类似于关系型数据库里的表,是集合了很多行的容器。每一行都有一些有序的列。

列:

参考:
http://zh.wikipedia.org/zh/Cassandra

安装

本节将介绍在在CentOS 6.4安装Cassandra 2.0.9

一、安装jdk1.7

因为Cassdra2.0.9最低要求就是1.7版本,jdk的安装见文章《CentOS 6下安装JDK并配置环境变量》

二、准备用户环境

1
2
groupadd cassandra
useradd -s /bin/bash -g cassandra -d /opt/cassandra cassandra

三、安装cassandra

1、下载

找一个适合的镜像节点:我选的是北京理工大学的节点

1
wget http://mirror.bit.edu.cn/apache/cassandra/2.0.9/apache-cassandra-2.0.9-bin.tar.gz

PS:安全起见自己可以验证一下数据完整性

2、解压、设置权限

1
2
3
4
5
6
tar -zxvf apache-cassandra-2.0.9-bin.tar.gz  -C /opt/cassandra
chown -R cassandra:cassandra /opt/cassandra
mkdir /var/lib/cassandra
mkdir /var/log/cassandra
chown -R cassandra:cassandra /var/lib/cassandra
chown -R cassandra:cassandra /var/log/cassandra

3、运行

切换到cassandra用户,运行bin/cassandra

1
2
cd /opt/cassandra/apache-cassandra-2.0.9/bin/
su cassandra ./cassandra

如果出现

1
2
INFO 02:34:57,479 Compacting [SSTableReader(path='/var/lib/cassandra/data/system/local/system-local-jb-4-Data.db'), SSTableReader(path='/var/lib/cassandra/data/system/local/system-local-jb-3-Data.db'), SSTableReader(path='/var/lib/cassandra/data/system/local/system-local-jb-1-Data.db'), SSTableReader(path='/var/lib/cassandra/data/system/local/system-local-jb-2-Data.db')]
INFO 02:34:57,545 Node localhost/127.0.0.1 state jump to normal

证明成功启动,开一个cqlsh试试

1
2
3
4
5
root@localhost bin]# ./cqlsh
Connected to Test Cluster at localhost:9160.
[cqlsh 4.1.1 | Cassandra 2.0.9 | CQL spec 3.1.1 | Thrift protocol 19.39.0]
Use HELP for help.
cqlsh>

4、关闭Cassandra

1
2
ps -aux |grep cassandra
kill pid#pid为cassandra的pid

本节完成在centos 6.4安装cassandra 2.0.9/2.0.10。