Datastax文档Apache Cassandra v2.1 第二部分 理解Cassandra架构之架构概要

本文已迁移到我的新博客地址:blog.favorstack.io 欢迎访问~

本文主要翻译自Datastax公司的在线文档,Cassandra版本为2.1。由于水平有限,翻译不当之处还请大家指正。

Cassandra被设计用来处理大数据工作负载,跨越多个节点,并且无单节点故障。该架构假设系统和硬件会发生故障并且一定会发生。Cassandra采用分布在对等节点上的P2P分布式系统来解决故障问题,数据则分布在集群中的所有节点上。每个节点每秒都通过集群交换信息。每个节点都有一个顺序写的提交日志来捕获写操作,用以确保数据持久性。数据接下来将会被索引,并写入一种叫做memtable的内存结构,类似于回写(write-back)缓存,一旦该内存结构满了,数据就被写入磁盘上的SSTable数据文件中。所有的写操作都是集群自动分区和复制的。通过一种叫做压紧的过程,Cassandra周期性的合并SSTable,并且丢弃过期的数据和墓碑(数据删除的一种标志)。

Cassandra是面向行的数据库,Cassandra的架构允许任何授权的用户连接到任意数据中心的任意节点,并可以使用CQL来访问数据。简单起见,CQL使用类SQL语法。从CQL的视角来看,数据库是由表组成的。一般来说,一个集群中,一个应用对应一个keyspace。开发者可以通过cqlsh访问CQL,也可以使用应用语言对应的驱动。

客户端的读写请求可以被发送到集群中的任意节点。当一个客户端连接到一个节点,并发送一个请求,该节点便充当了该特定客户端操作的协调器。协调器在客户端应用和那些拥有请求数据的节点之间作为一个代理。协调器决定环中的哪个节点来处理该请求,这取决集群的配置。更多信息请参考客户端请求。

关键架构

  • 节点

存储数据的地方,这是Cassandra基本的基础设施组件。

  • 数据中心

相关节点的集合。数据中心可以是物理的也可以是虚拟的数据中心。不同的工作负载应该使用独立的数据中心,物理的或虚拟的。副本由数据中心设定。使用独立的数据中心可以防止Cassandra事务受到其他进程的影响,并且能够保持请求彼此接近,低延迟。根据副本因子的不同,数据可以写入多个数据中心,但是这些数据中心不应该跨越物理位置。

  • 集群

集群包含一个或多个数据中心,集群可以跨越物理位置。

提交日志

所有的数据首先写入提交日志,以确保持久性,当所有的数据刷新到SSTable后,它可以被归档,删除或回收。

连续有序列组成的行的集合,行包含列,并且有一个主键。键的第一部分是列名

  • SSTable

有序的字符串表,是一个不可变的数据文件,Cassandra周期性地写入memtable。SSTable总是追加数据,并且有序的存储在磁盘上,由每个表来维护。

关键组件

  • Gossip(流言)

一种P2P通信协议,用于在集群中发现和共享其他节点的位置和状态信息。流言信息也会被每个节点持久化到本地,用以在一个节点重启后立即使用。

  • 分区器

分区器定义了数据如何在集群中的节点间分布,哪个节点该存放数据的第一份拷贝。基本上,分区器就是一个计算分区键token的哈希函数。每一行数据由一个分区键唯一标识,并通过token的值在集群中分发。Murmur3Patitioner 是新的Cassandra集群默认的分区策略,也是大多数场景下的首选策略。

你必须设置分区器,并且为每一个节点分配一个num_tokens值。分配的tokens的数量取决于系统的硬件容量。如果没有使用虚拟节点,则用initial_token来代替。

  • 副本因子

集群中所有副本的数量。副本因子1代表每行数据只有一份拷贝并且只存在于一个节点上;副本因子为2代表每行数据有两份拷贝,并且分别存储于不同的节点上。所有的副本的重要性都是相同的,没有主副之分。你需要为每个数据中心定义副本因子。一般情况下,需要设置副本因子大于1,但是不能超过集群中节点的数量。

  • 副本放置策略

Cassandra将数据存储于多个节点上以确保可靠性和容错性。副本放置策略决定了哪些节点用于存放数据。数据的第一个副本就是简单的第一个拷贝;任何意义上来说,这都不是唯一的。NetworkTopologyStrategy策略对大多数部署来说是极力推荐的,因为在将来需要扩展的时候很容易扩展到多个数据中心。

创建keyspace时,必须指定副本放置策略和副本的数量(副本因子)。

  • Snitch(告密者)

Snitch定义了数据中心或环(拓扑)中的一组机器,副本策略用来放置副本。

创建集群时必须配置Snitch,所有的snitch使用一个动态snitch层,用来监控性能并选择最佳副本用于读取。默认是开启的,并且在大多数部署中是推荐的。在每个节点的cassandra.yaml配置文件中配置动态snitch阈值。

默认的SimpleSnitch并不感知数据中心或环信息,其只适用于单数据中心或公有云中的单个区域。在产品中推荐使用GossipingPropertyFileSnitch,它定义了一个节点的数据中心和环,并且使用流言协议将这些信息传播给其他节点。

  • cassandra.yaml配置文件

集群初始化的主要配置文件。表的缓存参数,属性调整和资源利用,超时设置,客户端连接备份,安全等。

默认情况下,一个节点存储数据的目录配置在cassandra.yaml文件中:

安装包安装:/var/lib/cassandra

Tar包安装:install_location/data/data

在生产环境集群部署中,你可以将commitlog-directory改到不同于data_file_directories所在的磁盘上。

  • 系统keyspace表属性

可以通过编程设置每个keyspace和每个表的存储配置信息,或者通过客户端应用,如CQL。

原文地址:http://docs.datastax.com/en/cassandra/2.1/cassandra/architecture/architectureIntro_c.html

本文已迁移到我的新博客地址:blog.favorstack.io 欢迎访问~

​​​​​​​

猜你喜欢

转载自blog.csdn.net/pzoozq/article/details/48654901