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

enj*_*web 36 cluster-computing cassandra nosql opscenter datastax

我正在尝试使用datastax ops center在cassandra nosql数据库中复制学校项目中的数据.根据我的阅读,有三个关键字:集群,节点和数据中心,根据我的理解,节点中的数据可以复制到另一个集群中的另一个节点中.并且包含相同(重复)数据的所有节点组成数据中心.是对的吗?

如果不是,有什么区别?

Akb*_*med 70

Cassandra中元素的层次结构是:

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

群集是数据中心的集合.

数据中心是Racks的集合.

Rack是服务器的集合.

默认情况下,服务器包含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个vnode)
  • 每个数据副本称为副本
  • 数据单元称为分区
  • 每个数据中心控制复制


Aar*_*ron 25

节点是运行Cassandra的单个机器.保存类似数据的节点集合被分组在所谓的"环"或集群中.

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

有关这方面的更多信息,请访问:关于Apache Cassandra- Cassandra如何运作?

并且包含相同(重复)数据的所有节点组成数据中心.是对的吗?

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

CREATE KEYSPACE products
WITH replication = {'class': 'NetworkTopologyStrategy', 'MyDC': '3'};
Run Code Online (Sandbox Code Playgroud)

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

但是,让我们说我们正在推出一个新的,相当大的产品线,我估计我们将有另外300GB的数据,这可能会开始推动我们硬盘的最大容量.如果我们现在无法负担升级所有硬盘的费用,我可以改变复制因素,如下所示:

CREATE KEYSPACE products
WITH replication = {'class': 'NetworkTopologyStrategy', 'MyDC': '2'};
Run Code Online (Sandbox Code Playgroud)

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

编辑20181128

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

所以真正的快速解释: server == node

就针对集群中的节点发出请求而言,该行为实际上取决于应用程序端的驱动程序.实际上,驱动程序维护当前网络拓扑的副本,因为它读取类似于节点的群集八卦.

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

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


Rus*_*ssS 11

节点:

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

数据中心:

节点的逻辑分组,可以与其他节点分开.常见的用例是AWS-EAST与AWS-WEST.复制NetworkTopologyStrategy用于指定任何给定数据中心中应存在的整个键空间的副本数.这就是Cassandra用户实现跨DC复制的方式.另外他们是唯一需要确认的一致性程度的政策内协调的数据中心(LOCAL_*)

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

  • 我们在30秒内回答,并且都使用东/西海岸数据中心示例.有什么可能性?大声笑. (6认同)
  • 哈,卡桑德拉有时候感觉像个小地方:) (6认同)