【云小课】【第13课】初识GaussDB(for Cassandra)基础架构
架构原理
Cassandra旨在处理多个节点之间的大数据工作负载且无单节点故障。
Cassandra通过在同构节点之间采用p2p分布式系统来解决故障问题,其中数据分布在集群中的所有节点上。通过点对点Gossip通信协议,集群中的每个节点与其他节点频繁交换状态信息。每个节点上都有一个顺序写入的commit log用来记录写入操作,以确保数据实现持久化。然后将数据编入索引并写入内存结构,称为内存表(memtable),类似于回写缓存。当内存结构写满数据时,则把数据存储到SSTable数据文件中的磁盘。所有的写入操作会在整个集群中自动分区和备份。Cassandra通过一个称为压缩(compaction)的过程定期整合SSTable,丢弃标记为删除的旧数据。为确保整个集群中所有数据的一致性,采用了各种修复机制。
Cassandra是一个分区式行存储数据库,行被组织成具有所需主键的表。Cassandra架构允许任何授权用户连接到任一数据中心的任一节点,并使用CQL语言访问数据。为了方便使用,CQL使用与SQL类似的语法并与数据表一起使用。开发者可以通过cqlsh访问CQL。通常,对于由不同表组成的应用程序,一个集群对应一个密钥空间。
客户端读写请求可以发送到集群中的任一节点。当客户端连接到有请求的节点时,该节点用作该客户端的协调器(coordinator)。作为客户端应用程序和被请求数据所在的节点之间的代理,协调器根据集群的配置确定环(ring)中的哪些节点应该获得请求。
关键组件
● Gossip
Gossip是用于发现和共享关于Cassandra集群中其他节点的位置和状态信息的p2p通信协议。每个节点将Gossip信息持久化到本地,以便在节点重新启动时使用该信息。
● Partitioner分区器
Partitioner分区器用于确定哪个节点将接收到数据的第一个副本,以及如何在集群中的其他节点上分发其他副本。每一行数据都由主键唯一标识,该主键可以与其分区键相同,但也可以包括其他集群列。分区器是一个散列函数,从一个行的主键派生出一个令牌(token)。分区器使用令牌值来确定集群中的哪些节点接收该行的副本。
Murmur3 Partitioner是新Cassandra集群的默认分区策略,在多数情况下,也是新集群的正确选择。
您必须设置分区器并为每个节点分配一个num _ tokens值。令牌数量取决于系统的硬件能力。如果不使用虚拟节点(vnode),使用initial _ token设置即可。
● 复制因子
跨集群的副本总数。复制因子1意味着一个节点上的每一行只有一个副本。复制因子2表示每行有两个副本,每个副本在不同的节点上。没有主副本,所有副本同样重要。您可以为数据中心设置复制因子的个数。一般情况下,设置复制策略大于1,但不要超过集群中的节点数量。
● 副本放置策略
Cassandra将数据的副本存储在多个节点上,以保证可靠性和容错性。复制策略决定将副本放置在哪些节点上。
推荐使用NetworkTopologyStrategy,以便将来扩展到多个数据中心。
创建密钥空间(keyspace)时,必须确定副本放置策略和需要的副本数量。
● Snitch
Snitch将机器组划分到数据中心和机架(拓扑),复制策略根据拓扑结构放置副本。
创建集群时必须配置snitch。所有的snitch都使用一个动态snitch层用来监控性能并选择最佳的副本读取数据。默认情况,snitch为开启状态,推荐在大多数部署中使用。您需要在Cassandra.yaml配置文件中配置各节点的动态snitch阈值。
默认情况下,SimpleSnitch不识别数据中心或机架信息,用于单个数据中心部署或公有云中的单个区域。对于生产环境,推荐使用GossipingPropertyFileSnitch,它定义了节点的数据中心和机架的信息,并通过gossip将此信息传播到其他节点。
● cassandra.yaml配置文件
用于设置集群的初始化属性、表的缓存参数、调优和资源利用率、超时设置、客户端连接、备份和安全性的主要配置文件。
● 系统键空间表属性
可以以编程方式或使用客户端应用程序(如CQL)在每个键空间或表基础上设置存储配置属性。
- 点赞
- 收藏
- 关注作者
评论(0)