您的位置:首页 > 运维架构 > 网站架构

cassandra架构学习

2015-05-18 09:52 134 查看

架构概述

1. 节点关系

cassandra的所有节点都是对等的,没有master和slave之分,数据分布集群内的各个节点上,因此没有单点失败问题。每个节点每一秒都会和集群保持通讯。

2. 数据写入

每个节点都会维护一个写提交日志文件,每次写入动作都会记录在日志中,以此保证写入数据的持久性。实际的数据会首先写入位于内存中的memtable结构,写入的数据是进行索引处理过的,memtable相当于一个写cache,当一个memtable写满后,该结构的数据会写入位于磁盘上的SSTable文件,写入数据时会自动在集群内进行分片和复制。cassandra还会周期性的调用compaction过程将数据“压实”,该过程主要是删除过期和已经标注为删除的数据。

3. 访问方式

cassandra是一个面向行的数据库。读写采用CQL语言,该语言和SQL语言类似。从该语言的角度来看,数据库由一些表组成。一般而言,一个集群中每一个应用都有一个keyspace(可以将其理解为关系型数据库中的一个库。)开发者可以通过cqlsh使用CQL,也可以通过不同语言的驱动程序使用CQL。
客户端可以和任何一个节点建立连接和读写数据,当客户端连接到一个节点时,该节点就成为客户端与集群之间的协调者(coordinator),协调者负责将客户端的请求发送给实际拥有该数据的节点。

术语

节点

实际存储数据的机器,它是cassandra的基本组件。

数据中心

相关节点的集合,数据中心可以是物理的,也可以是虚拟的,数据中心负责配置副本集。数据中心不能跨物理位置。

集群

集群由一个或多个数据中心组成,可以跨物理位置。

提交日志

所有的数据首先被写入提交日志,在这些数据被实际写入SSTables之后,它可以被归档,删除或者回收。

从行获取的排序的列的集合,一行由很多列组成,并且有一个主键。键的第一个部分是列的名字。

SSTable

排序过的字符串表,它是一个不可修改的数据文件,只可追加数据,数据顺序写入磁盘,为每个表单独维护。

关键配置组件

Gossip

点对点的通讯协议,集群中的节点用本协议发现和分享位置和状态信息。每个节点都会持久保存gossip信息,当节点重启时,可以迅速使用这些信息。

Patitioner(分片器)

分片器决定如何将数据分配到集群的各个节点和那个节点保存数据的第一份副本。分片器可以说是一个hash函数,用于计算一个分片key的token。每行数据都由一个集群内唯一的分片key标识,使用token将其分布到集群内的节点。目前cassandra使用Murmur3Partitioner分片策略。
必须为每个节点设置分片器并为其分配一个num_tokens值。token的数量依赖于系统的硬件能力。如果不使用虚拟节点,那么使用intial_token参数代替。
建议使用虚拟节点。

复制因子

表示整个集群的副本数。1表示一行数据只会保存在一个节点上,2表示一行数据保存在两个不同节点上,所有副本同样重要,没有主次之分。
每个数据中心都要定义复制因子,一般而言你需要设置其大于1,但是不超过整个集群的节点数量。

副本放置策略

cassandra在多个节点上保存副本以提高可靠性。推荐使用NetworkTopologyStrategy,因为本策略可以方便地扩展到多个数据中心。
在建立keyspace的时候,你必须定义副本放置策略和副本数量。

Snitch

Snitch定义了数据中心的机器分组和机架,副本放置策略可以据此保存数据。
在建立集群的时候必须配置一个snitch,所有的snitch使用一个动态snitch层监视性能,选择最佳副本集读取。动态snitch在cassandra.yaml文件中配置。

cassandra.yam配置文件

这是集群设置和初始化时的主要配置文件。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: