1. 前言
学习Cassandra的基础是先把Cassandra系统部署起来,然后简单的使用它,从直观上感觉它,然后逐步的深入了解它。
本文介绍了Cassandra集群的部署方法,包括配置,安装和简单的使用。
2. 下载版本
Cassandra版本一直在更新,且每次更新,变化均比较大,如配置文件有改动,Thrift接口定义文件有改动等。本文采用的版本是0.7.6-2,可以从这里下载:/。
3. Cassandra目录结构
4. Cassandra单节点安装
首先确保安装了JDK。
然后,修改配置文件,cassandra-0.7.6-2的conf下有以下几个配置文件:
(1) access.properties:设置每个数据库或者表的访问权限
(2) cassandra.yaml:主配置文件,包括日志路径,数据存放路径,各种参数配置等
(3) cassandra-topology.properties:配置网络的拓扑结构
(4) log4j-server.properties:log4j的配置选项
(5) passwd.properties:配置用户密码,与access.properties配合使用
对于简单的使用,只需配置cassandra.yaml文件:
(1) 集群名称cluster_name:同一个集群中的集群名称应该一样。
(2) 数据存放路径data_file_directories:可以根据情况配置一个有写权限的路径
(3) commit log路径commitlog_directory:同上
(4) saved cache路径saved_caches_directory:同上
(5) 日志文件路径log4j.appender.R.File:同上(这个选项在log4j-server.properties文件中)
此外,还需要修改服务监听的地址和thrift访问地址,即ListenAddress和ThriftAddress,配置文件默认监听的都是localhost:
1 2 3 4 5 6 7 | <!-- Cassandra节点之间通信的监听地址,这里设置所在节点的ip--> <ListenAddress>100.200.3.1</ListenAddress> <!-- 这个是Thrift监听的地址,建议设置为0.0.0.0 --> <ThriftAddress>0.0.0.0</ThriftAddress> |
经过上面的配置就可以启动节点了:
进入bin目录,直接执行:./cassandra
5. Cassandra多个节点安装
首先,在各节点上,按照第4节方法配制各自对应文件。
然后,配制seeds。Cassandra没有传统集群的中心节点,各个节点地位都是平等的,通过Gossip协议维持集群中的节点信息。为了使集群中的各节点在启动时能发现其他节点,需要指定种子节点(seeds),各节点都先和种子节点通信,通过种子节点获取其他节点列表,然后和其他节点通信。种子节点可以指定多个,通过在 conf/ cassandra.yaml中的seeds属性配置。
seeds:
- 100.200.3.81
- 100.200.3.78
6. Cassandra附带工具使用方法介绍
bin目录下自带了很多工具,可以帮助用户很方便地进行一些操作。常用的工具有nodetool,cassandra-cli,sstable2json等
(1) nodetool
nodetool是一个cassandra集群管理工具,这里只简单介绍一些简单的命令,详细的命令可以参见工具的帮助信息。
ring命令
ring命令用于查看集群的节点信息,ring来源于consistent hash,在consistent hash中,各个节点组成一个环,通常称为ring。
Info命令
info可以参看某个节点负载,内存使用情况:
cfstats命令
cfstats命令可以查看各个CF的详细统计信息,包括读写次数、响应时间、memtable信息等。
(2) cassandra-cli
cassandra-cli是一个命令行工具,可以用于对数据库进行数据查询和检索。具体可参见这篇文章:
(3) sstable2json
将sstable中的数据转化为json格式,使用方法为:
Usage: sstable2json [-f outfile] <sstable> [-k key [-k key [...]]]
7. 参考资料
(1)
(2) /?p=3
来源: /
本文是 Apache Cassandra3.X 系列的第一篇文章,主要介绍了 Cassandra 的出现原因,它解决了什么问题,3.X 版本对应的数据模型、数据副本方式、系统架构、客户端、应用工具发生了什么变化等内容。
IMS 的全称是 Information Management System,1966 年由 Vern Watts 在 IBM 提出,最初是为了 Staurn V moon rocket 项目创造的,最终在 1968 年第一次产品发布,接下来再 CICS(Customer Information Control System)及其他的应用程序上获得成功,并沿用至今。
1970 年,Edgar F.Codd 博士发表了论文"A Relational Model for Data for Large Shared Data Banks",奠定了关系型数据库管理系统的功能基础。
那么,关系型数据库犯了什么错误?答案是:“Nothing” 。
为什么需要考虑替换关系型数据库?因为关系型数据库遇到了扩展问题,并且数据表之间的关联关系让查询越来越慢。
关系型模型是一个简单的模型,需要满足 ACID。ACID 是 Atomic、Consistent、Isolated、Durable 的简称。
一种扩展关系型数据库的方式是 Sharding(分片)架构。eBay 采用这种方式,支持每天数十亿 SQL 访问。这种方式的原理是对数据进行纵向切分,将数据量分派到不同的机器上,这样不需要再在一台机器上存储或者备份所有的数据。
几种分片策略:
Michael Stonebraker(University of California at Berkeley)在 1986 年的论文"The Case for Shared Nothing."引入了"Shared-Nothing"架构,属于无中心化状态,即每一个节点互相不存在依赖关系,所以没有中心节点统计共享资源内容的问题。
Cassandra 数据库没有中心节点,没有 Master/Slave,是 Shared-Nothing 架构。
Apache Cassandra 是一种分布式非关系型数据库,具有高性能、可扩展、无中心化等特征。Cassandra 是适用于社交网络业务场景的数据库,适合实时事务处理和提供交互型数据。以 Amazon 完全分布式的 Dynamo 数据库作为基础,结合 Google BigTable 基于列族(Column Family)的数据模型,实现 P2P 去中心化的存储。
在 CAP 原则(又称 CAP 定理,指的是在一个分布式系统中,Consistency 一致性、Availability 可用性、Partition Tolerance 分区容错性,三者不可得兼)上,HBase 选择了 CP,Cassandra 则更倾向于 AP,所以在一致性上有所减弱。
Cassandra 是无中心化的,意味着所有节点没有差异。
可扩展性一般可以通过两种方式实现:
所谓的弹性扩展是指特定属性的横向扩展能力,意味着集群内部可以无缝扩展和解散部分机器。要做到这一点,需要集群可以接收新的节点,并且通过拷贝部分或者全部数据的方式加入到集群,并开始接收新的用户请求,而不是需要大规模地调整或者配置整个集群。
Cassandra 的类 Dynamo 特性有以下几点:
Cassandra 的数据模型借鉴了谷歌 BigTable 的设计思想,包括以下四个概念:
Cassandra 各主要概念之间的包含关系如图 1 所示。
点击查看大图
在 Cassandra 的每一个 Row 中,所有 Column 按照 Name 自动进行排序,排序的类型有 BytesType、UTF8Type、LexicalUUIDType、TimeUUIDType、AsciiType 和 LongType,不同的排序类型,会产生不同的排序结果,如清单 1 所示。
{name:123,value:"hello there"}
{name:832416,value:"fhefhwie"}
{name:3,value:"101010101010"}
{name:976,value:"cnebfeiw"}
采用 LongType 排序类型,结果如清单 2 所示。
{name:3,value:"101010101010"}
{name:123,value:"hello there"}
{name:976,value:"cnebfeiw"}
{name:832416,value:"fhefhwie"}
采用 UTF8Type 排序类型,结果如清单 3 所示。
{name:123,value:"hello there"}
{name:3,value:"101010101010"}
{name:832416,value:"fhefhwie"}
{name:976,value:"cnebfeiw"}
Cassandra 中,Token 是用来分区数据的关键。每个节点都有一个唯一的 Token,表明该节点分配的数据范围。节点的 Token 形成一个 Token 环。例如使用一致性 Hash 进行分区时,键值对将 genuine 一致性 Hash 值来判断数据应当属于哪个 Token。
根据分区策略的不同,Token 的类型和设置原则也有所不同。Cassandra(V3.10 版本)本身支持四种分区策略:
Cassandra 在多个节点上存储副本以确保可用性和数据容错。副本策略决定了副本的放置方法。集群中的副本数量被称为复制因子,复制因子为 1 表示每行只有一个副本,复制因子为 2 表示每行有两个副本,每个副本不在同一个节点。所有副本同等重要,没有主次之分。作为一般规则,副本因子不应超过在集群中的节点的树木。当副本因子超过节点数时,写入不会成功,但读取只要提供所期望的一致性级别即可满足。目前 Cassandra 中实现了不同的副本策略,包括:
多数据中心集群最常见的两种配置方式是:
Cassandra 被称为"最终一致性",有点误导人,Cassandra 一致性是可以调整的。
那么什么是一致性?现实世界是按照一致性的级别进行衡量的,最终一致性是几种一致性模型的其中一种:
最终一致性的几种具体实现:
Cassandra 把一致性级别的决定权交到了客户端手中,这意味着客户决定每一次操作的一致性级别,即决定写入操作过程中集群内部必须有多少份副本完成才能响应读请求。如果客户设置的一致性级别的值小于设置的副本数量值,那么即便一些节点宕机,更新依然成功。
Cassandra 提供多语言 API,支持当前大多数编程语言开发客户端,如 Java/C++/Python 等。
如图 2 所示,客户端连接到某一节点发起读或写请求时,该节点充当客户端应用于拥有相当数据的节点数据的节点间的协调者,用以根据集群配置确定环(ring)中的哪个节点应当获取这个请求。集群中的任何节点都可以充当协调者,但需要每个节点的配置文件中的 rpc_address 都设置为本机 IP 或者 0.0.0.0(表示监控所有客户端)。
点击查看大图
Cassandra 自带工具,可与 Cassandra 直接使用 CQL 命令交互,CQL 使用了和 SQL 类似的语法和操作表格数据的方法,如表 1 所示。
操作 | 命令 |
---|---|
创建 KeySpace | Create KeySpace test with replication = {'class':'SimpleStrategy','replication_factor':2}; |
查看 KeySpace | Desc KeySpace test; |
删除 KeySpace | Drop KeySpace test; |
创建列族 | Create table users( userid int PRIMARY KEY, fname text, lname text); |
插入数据 | Insert into users(userid,fname,lname) VALUES(1,'john','smith') |
建索引 | Create INDEX on users(lname); |
删除索引 | Drop index users_lname_idx; |
Select 操作 | Select count(*) from users; Select fname lname from users where userid in (2,3); Select * from users where userid = 1; |
批量操作 | Begin batch Insert into user(userid,fname,lname) values(4,'fname','lname'); Delete lname from users where userid = 2; Apply batch |
Cassandra 自带运维工具,是一个查看集群信息的命令,可以查看集群统计信息、节点信息、数据环信息、增删节点、刷新 Memtable 数据到 SSTable、合并 SSTable 等,如表 2 所示。
Nodetool version | 显示当前 Cassadnra 的版本信息 |
Nodetool status | 显示当前机器节点信息(UN 正常,DN 宕机)、数据中心、机架信息 |
Nodetool removenode [hosted] | 移除 DN 节点 |
Nodetool cfstats | 查看各个 column family 的详细信息,包括读写次数、响应时间、memtable、sstable 等 |
Nodetool info | 显示一个节点的信息,包括当前的 load(数据量)、运行时间、内存使用情况等 |
Nodetool flush[KeySpace] | 将某 KeySpace 中的缓存区数据提交至 sstable 中 |
本文是"Apache Cassandra3.X"系列文章的第一篇,主要对 Cassandra 数据库的出现、功能、实现原理、优势和弱点等做点介绍,让读者能够从基础了解。除了本文以外,本系列文章将由 Cassandra 安装和配置、CQL 语言、数据模型、系统架构、客户端、读和写数据、监控、维护、性能优化、安全、部署和集成等多篇文章组成。
参考Apache Cassandra首页,了解最全面的 Apache Cassandra 知识。
查看文章" Cassandra 部署与安装介绍",作者对 Cassandra 架构有较深研究。
.html
本文发布于:2024-01-28 09:02:53,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/17064037836301.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |