cassandra nosql数据库中的节点,集群和数据中心之间有什么区别?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了cassandra nosql数据库中的节点,集群和数据中心之间有什么区别?相关的知识,希望对你有一定的参考价值。
我正在尝试使用datastax ops center在cassandra nosql数据库中复制学校项目中的数据。根据我的阅读,有三个关键字:集群,节点和数据中心,根据我的理解,节点中的数据可以复制到另一个集群中的另一个节点中。并且包含相同(重复)数据的所有节点组成数据中心。是对的吗?
如果不是,有什么区别?
Cassandra中元素的层次结构是:
- 簇 数据中心 架(S) 服务器(S) 节点(更准确地说,是一个vnode)
群集是数据中心的集合。
taken for a成立。
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。
istic总结enhanced:
- 数据跨多个虚拟节点复制(默认情况下,每个服务器包含256个vnode)
- 每个数据副本称为副本
- 数据单元称为分区
- 每个数据中心控制复制
节点是运行Cassandra的单个机器。保存类似数据的节点集合被分组在所谓的“环”或集群中。
有时,如果您有大量数据,或者您在不同地理区域提供数据,则有必要将群集中的节点分组到不同的数据中心。一个很好的用例是电子商务网站,它可能在东海岸和西海岸有许多常客。这样,您在东海岸的客户就可以连接到您的东海岸DC(以获得更快的性能),但最终可以访问与西海岸客户相同的数据集(两个DC位于同一群集中)。
有关这方面的更多信息,请访问:About Apache Cassandra- How does Cassandra work?
并且包含相同(重复)数据的所有节点组成数据中心。是对的吗?
关闭,但不一定。您拥有的数据重复级别由复制因子决定,复制因子是基于每个键空间设置的。例如,假设我的单个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
当我发出网络请求时,我是在针对服务器进行的吗?还是节点?或者我对服务器提出请求然后路由它并从节点或其他东西读取?
所以真正的快速解释:server == node
就针对集群中的节点发出请求而言,该行为实际上取决于应用程序端的驱动程序。实际上,驱动程序维护当前网络拓扑的副本,因为它读取类似于节点的群集八卦。
在应用程序端,您可以设置负载平衡策略。具体来说,TokenAwareLoadBalancingPolicy类将检查每个请求的分区键,找出哪些节点有数据,并直接在那里发送请求。
对于其他负载平衡策略,或者对于无法确定单个分区密钥的查询,请求将发送到单个节点。该节点将充当“协调者”。此选定节点将处理对负责它们的节点的请求路由,以及任何结果集的编译/返回。
Node:
存储整个数据库某些部分的计算机。这可能包括从另一个节点复制的数据以及它自己的数据。它负责的数据取决于它的令牌范围,以及保存数据的键空间的复制策略。
Datacenter:
节点的逻辑分组,可以与其他节点分开。常见的用例是AWS-EAST与AWS-WEST。复制NetworkTopologyStrategy
用于指定任何给定数据中心中应存在的整个键空间的副本数。这就是Cassandra用户实现跨DC复制的方式。此外,它们是一致性级别策略,仅需要在协调器的数据中心内进行确认(LOCAL_*
)
Cluster
数据库中所有计算机的总和,包括所有数据中心。没有跨群集复制。
以上是关于cassandra nosql数据库中的节点,集群和数据中心之间有什么区别?的主要内容,如果未能解决你的问题,请参考以下文章
开源Nosql数据库Cassandra3.0实战-集群部署与插件使用