46

我正在尝试使用 datastax 操作中心为学校项目复制 cassandra nosql 数据库中的数据。根据我的阅读,有三个关键字:集群、节点和数据中心,据我了解,一个节点中的数据可以复制到另一个节点中,另一个节点存在于另一个集群中。所有包含相同(重复)数据的节点组成一个数据中心。那正确吗?

如果不是,有什么区别?

4

4 回答 4

87

Cassandra 中元素的层次结构是:

    • 数据中心
      • 机架
        • 服务器
          • 节点(更准确地说,一个 vnode)

集群是数据中心的集合。

数据中心是机架的集合。

机架是服务器的集合。

默认情况下,一个服务器包含 256 个虚拟节点(或 vnode)。

vnode 是服务器内的数据存储层。

注意:服务器是 Cassandra 软件。服务器安装在机器上,其中机器可以是物理服务器、EC2 实例或类似的。

现在专门解决您的问题。

单个数据单元称为分区。是的,分区是跨多个节点复制的。分区的每个副本称为副本。

在多数据中心集群中,复制是按数据中心进行的。例如,如果您在旧金山有一个名为 dc-sf 的数据中心,在纽约有一个名为 dc-ny 的数据中心,那么您可以控制每个数据中心的副本数量。

例如,您可以将 dc-sf 设置为 3 个副本,将 dc-ny 设置为 2 个副本。

这些数字称为复制因子。您会特别说 dc-sf 的复制因子为 3,而 dc-ny 的复制因子为 2。简单来说,dc-sf 将有 3 个数据副本分布在三个 vnode 上,而 dc-sf 将有2 个数据副本分布在两个 vnode 上。

虽然默认情况下每台服务器都有 256 个 vnode,但 Cassandra 足够聪明,可以选择存在于不同物理服务器上的 vnode。

总结一下:

  • 数据跨多个虚拟节点复制(每个服务器默认包含 256 个虚拟节点)
  • 数据的每个副本称为副本
  • 数据的单位称为分区
  • 每个数据中心控制复制
于 2015-02-12T03:30:34.223 回答
28

节点是运行 Cassandra 的单台机器。持有相似数据的节点集合被分组在所谓的“环”或集群中。

有时,如果您有大量数据,或者如果您在不同的地理区域提供数据,则将集群的节点分组到不同的数据中心是有意义的。一个很好的用例是电子商务网站,它可能在东海岸和西海岸有很多常客。这样,您在东海岸的客户连接到您的东海岸 DC(以获得更快的性能),但最终可以访问与西海岸客户相同的数据集(两个 DC 在同一个集群中)。

可以在此处找到更多信息:关于 Apache Cassandra - Cassandra 是如何工作的?

所有包含相同(重复)数据的节点组成一个数据中心。那正确吗?

关闭,但不一定。您拥有的数据重复级别由您的复制因子决定,该因子是基于每个键空间设置的。例如,假设我的单个 DC 中有 3 个节点,全部存储 600GB 的产品数据。我的products键空间定义可能如下所示:

CREATE KEYSPACE products
WITH replication = {'class': 'NetworkTopologyStrategy', 'MyDC': '3'};

这将确保我的产品数据平等地复制到所有 3 个节点。我的总数据集大小为 600GB,在所有 3 个节点上重复。

但是假设我们正在推出一个新的、相当大的产品线,我估计我们将有另外 300GB 的数据到来,这可能会开始推动我们硬盘的最大容量。如果我们现在无法升级所有硬盘驱动器,我可以像这样更改复制因子:

CREATE KEYSPACE products
WITH replication = {'class': 'NetworkTopologyStrategy', 'MyDC': '2'};

这将创建我们所有数据的 2 个副本,并将其存储在我们当前的 3 个节点集群中。我们的数据集的大小现在是 900GB,但是由于它只有两个副本(每个节点基本上负责 2/3 的数据),我们的磁盘大小仍然是 600GB。这里的缺点是(假设我在一致性级别上读写ONE)我只能承受损失 1 个节点的损失。而对于 3 个节点和 3 个 RF(再次以一致性读写ONE),我可能会丢失 2 个节点并仍然为请求提供服务。

编辑 20181128

当我发出网络请求时,我是在对服务器发出请求吗?还是节点?或者我向服务器发出请求,然后它会路由它并从节点或其他东西读取?

如此快速的解释: 服务器==节点

至于对集群中的节点发出请求,该行为实际上是由应用程序端的驱动程序决定的。事实上,驱动程序维护当前网络拓扑的副本,因为它读取集群八卦类似于节点的方式。

在应用端,可以设置负载均衡策略。具体来说,TokenAwareLoadBalancingPolicy类将检查每个请求的分区键,找出哪些节点有数据,然后直接将请求发送到那里。

对于其他负载均衡策略,或者对于单个分区键无法确定的查询,请求将被发送到单个节点。该节点将充当“协调者”。这个选定的节点将处理将请求路由到负责它们的节点,以及任何结果集的编译/返回。

于 2015-01-28T16:42:14.357 回答
12

节点:

存储整个数据库的某些部分的机器。这可能包括从另一个节点复制的数据以及它自己的数据。它负责什么数据取决于它的令牌范围,以及保存数据的键空间的复制策略。

数据中心:

可以与其他节点分开的节点的逻辑分组。一个常见的用例是 AWS-EAST 与 AWS-WEST。复制NetworkTopologyStrategy用于指定在任何给定的数据中心中应该存在多少个整个键空间的副本。这就是 Cassandra 用户实现跨 DC 复制的方式。此外,它们是一致性级别策略,仅需要协调器的数据中心内进行确认 ( LOCAL_*)

数据库中所有机器的总和,包括所有数据中心。没有跨集群复制。

于 2015-01-28T16:41:41.613 回答
0

根据以下文件:- https://docs.datastax.com/en/archived/cassandra/3.0/cassandra/architecture/archIntro.html

节点 存储数据的位置。它是 Cassandra 的基本基础架构组件。

数据中心 相关节点的集合。数据中心可以是物理数据中心或虚拟数据中心。不同的工作负载应使用单独的数据中心,无论是物理的还是虚拟的。复制由数据中心设置。使用单独的数据中心可以防止 Cassandra 事务受到其他工作负载的影响,并使请求彼此靠近以降低延迟。根据复制因子,可以将数据写入多个数据中心。数据中心绝不能跨越物理位置。

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

于 2020-03-05T05:47:11.547 回答