Cassandra nosql 数据库中的节点、集群和数据中心之间有什么区别?



我正在尝试使用datastax运营中心为学校项目复制cassandra nosql数据库中的数据。从我所读到的内容来看,有三个关键字:群集、节点和数据中心,据我所知,一个节点中的数据可以在另一个节点中复制,该节点存在于另一个群集中。包含相同(重复)数据的所有节点组成一个数据中心。是吗?

如果不是,有什么区别?

Cassandra 中元素的层次结构为:

    • 数据中心
      • 机架
        • 服务器
            节点
          • (更准确地说,是虚拟节点)

集群是数据中心的集合。

数据中心是机架的集合。

机架是服务器的集合。

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

虚拟节点是服务器中的数据存储层。

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

现在专门解决您的问题。

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

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

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

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

虽然每个服务器默认有 256 个虚拟节点,但 Cassandra 足够聪明,可以选择存在于不同物理服务器上的虚拟节点。

总结一下:

  • 跨多个虚拟节点复制数据(默认情况下,每个服务器包含 256 个虚拟节点)
  • 数据的每个副本称为副本
  • 数据单元称为分区
  • 复制按数据中心控制
节点

是运行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 类将检查每个请求的分区键,找出哪个节点具有数据,并将请求直接发送到那里。

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

节点:

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

数据中心:

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

数据库中所有计算机(包括所有数据中心)的总和。没有跨集群复制。

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

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

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

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

最新更新