cassandra nosql 数据库中的节点、集群和数据中心之间有啥区别?
Posted
技术标签:
【中文标题】cassandra nosql 数据库中的节点、集群和数据中心之间有啥区别?【英文标题】:What are the differences between a node, a cluster and a datacenter in a cassandra nosql database?cassandra nosql 数据库中的节点、集群和数据中心之间有什么区别? 【发布时间】:2015-03-27 14:24:12 【问题描述】:我正在尝试使用 datastax 操作中心为学校项目复制 cassandra nosql 数据库中的数据。根据我的阅读,有三个关键字:集群、节点和数据中心,据我了解,一个节点中的数据可以复制到另一个节点中,另一个节点存在于另一个集群中。所有包含相同(重复)数据的节点组成一个数据中心。对吗?
如果不是,有什么区别?
【问题讨论】:
【参考方案1】: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 个虚拟节点) 数据的每个副本都称为副本 数据单元称为分区 复制由每个数据中心控制【讨论】:
根据link - One (Token) Ring to Rule Them All一簇一环。所以完整的令牌环实际上可能存在于集群中而不是数据中心中。 @hkbharath 该链接不再有效-您是否在某处有缓存副本,或者您能总结一下它所说的内容吗?我认为这可能与我现在遇到的问题有关。谢谢 假设您在 DC1、DC2 中有 6 台服务器,每台服务器有 1 个节点。节点令牌是 DC1 中的 1(node1)、2(node2)、3(node3)和 DC2 中的 1(node4)、2(node5)和 3(node6)。分区的令牌是通过散列创建的。分区令牌与节点令牌匹配以查找主副本。如果一个分区的令牌为 1,那么我们知道它在 DC1 = 节点 1 和 DC2 = 节点 4 中的主副本。来自 Apigee 的示例:community.apigee.com/articles/13096/… 对于那些坚持这些概念的人,请使用nodetool ring
查看集群中的节点令牌。它会让您清楚地了解这些概念,尤其是当您对互联网上相互矛盾的信息感到困惑时。
一个节点或服务器可以是多个数据中心的成员吗?【参考方案2】:
节点是运行 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 类会检查每个请求的分区键,找出哪些节点有数据,然后直接将请求发送到那里。
对于其他负载平衡策略,或者对于单个分区键无法确定的查询,请求将被发送到单个节点。该节点将充当“协调者”。这个选定的节点将处理将请求路由到负责它们的节点,以及任何结果集的编译/返回。
【讨论】:
我是一名 ios 开发人员,试图理解这些。对我来说,一切都只是与服务器通信,即它发出一个网络request 并获得一个response。当我发出网络请求时,我是在对服务器发出请求吗?还是节点?或者我向服务器发出请求,然后 route 它并从节点或其他东西读取?可以添加图片吗? @Honey 编辑完成。 你是指环作为数据结构还是什么? @pentanol 否。“环”有时用于指代一个集群或几个节点(机器)的组。【参考方案3】:节点:
存储整个数据库的某些部分的机器。这可能包括从另一个节点复制的数据以及它自己的数据。它负责什么数据取决于它的token范围,以及保存数据的keyspace的复制策略。
数据中心:
可以与其他节点分开的节点的逻辑分组。一个常见的用例是 AWS-EAST 与 AWS-WEST。复制NetworkTopologyStrategy
用于指定在任何给定数据中心中应该存在多少个整个键空间的副本。这就是 Cassandra 用户实现跨 DC 复制的方式。此外,它们是一致性级别策略,仅需要在协调器 (LOCAL_*
) 的数据中心内确认仅
集群
数据库中所有机器的总和,包括所有数据中心。没有跨集群复制。
【讨论】:
我们在 30 秒内相互回答,并且都以东/西海岸数据中心为例。那有什么几率呢?哈哈。 哈,Cassandra SO 有时感觉像是个小地方 :) 如果一个集群是所有机器的总和,是否意味着只有一个集群?当人们提到多个集群时,他们是什么意思? 多个集群将是多个完全独立的数据库。他们不会交流。 我是一名 iOS 开发人员,试图理解这些。对我来说,一切都只是与服务器通信,即它发出一个网络request 并获得一个response。当我发出网络请求时,我是在对服务器发出请求吗?还是节点?或者我向服务器发出请求,然后 route 它并从节点或其他东西读取?可以添加图片吗?【参考方案4】:根据以下文件:- https://docs.datastax.com/en/archived/cassandra/3.0/cassandra/architecture/archIntro.html
节点 您存储数据的位置。它是 Cassandra 的基础架构组件。
数据中心 相关节点的集合。数据中心可以是物理数据中心或虚拟数据中心。不同的工作负载应使用单独的数据中心,无论是物理的还是虚拟的。复制由数据中心设置。使用单独的数据中心可以防止 Cassandra 事务受到其他工作负载的影响,并使请求彼此靠近以降低延迟。根据复制因子,可以将数据写入多个数据中心。数据中心绝不能跨越物理位置。
集群 一个集群包含一个或多个数据中心。它可以跨越物理位置。
【讨论】:
以上是关于cassandra nosql 数据库中的节点、集群和数据中心之间有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章