我想使用DataStax OpsCenter在Cassandra NoSQL数据库中复制数据,以完成学校项目。根据我的阅读,有三个关键词:cluster、node和datacenter。根据我的理解,节点中的数据可以在另一个存在于另一个集群中的节点中进行复制。所有包含相同(复制)数据的节点组成一个数据中心。这样理解对吗?
如果不是,请问有什么区别?
我想使用DataStax OpsCenter在Cassandra NoSQL数据库中复制数据,以完成学校项目。根据我的阅读,有三个关键词:cluster、node和datacenter。根据我的理解,节点中的数据可以在另一个存在于另一个集群中的节点中进行复制。所有包含相同(复制)数据的节点组成一个数据中心。这样理解对吗?
如果不是,请问有什么区别?
Cassandra中元素的层次结构如下:
一个集群包含多个数据中心。
数据中心包含多个机架。
机架包含多个服务器。
每个服务器默认包含256个虚拟节点(或vnode)。
vnode是服务器内的数据存储层。
注意:服务器是Cassandra软件。该软件安装在一个机器上,这个机器可以是物理服务器、EC2实例或类似的设备。
现在来具体回答你的问题。
一组数据单元称为分区。是的,分区会在多个节点之间进行复制。每个分区的副本称为副本。
在多数据中心集群中,复制是按照数据中心进行的。例如,如果你有一个名为dc-sf的旧金山数据中心和一个名为dc-ny的纽约数据中心,那么你可以控制每个数据中心的副本数。
举个例子,你可以将dc-sf设置为3个副本,而将dc-ny设置为2个副本。
这些数字称为复制因子。你可以明确地说dc-sf的复制因子为3,dc-ny的复制因子为2。简单来说,dc-sf将在三个vnode上分布三个数据副本,而dc-ny将在两个vnode上分布两个数据副本。
虽然每台服务器默认有256个vnode,但Cassandra足够聪明,可以选择存在于不同物理服务器上的vnode。
总结:
products
keyspace定义可能如下:CREATE KEYSPACE products
WITH replication = {'class': 'NetworkTopologyStrategy', 'MyDC': '3'};
这将确保我的产品数据被同等地复制到所有3个节点。我的总数据集大小为600GB,全部复制到3个节点上。
但是,假设我们正在推出一个相当大的新产品系列,并且我估计我们还会有另外300GB的数据要到来,这可能会开始推动我们硬盘的最大容量。如果我们现在无法承担升级所有硬盘的费用,我可以像这样更改复制因子:
CREATE KEYSPACE products
WITH replication = {'class': 'NetworkTopologyStrategy', 'MyDC': '2'};
这将创建我们所有数据的两个副本,并将其存储在当前由3个节点组成的群集中。我们的数据集大小现在为900GB,但由于只有两个副本(每个节点实际上负责2/3的数据),因此我们的磁盘大小仍为600GB。这里的缺点是(假设我以ONE
的一致性级别读取和写入),我只能承受1个节点的损失。而对于3个节点和RF为3(再次以ONE
的一致性级别读写),我可以失去2个节点并仍然提供服务。存储整个数据库部分数据的机器。其中可能包括从另一个节点复制的数据以及其自己的数据。它负责哪些数据由其令牌范围和持有数据的键空间的复制策略来确定。
节点的逻辑分组,可以与其他节点分开。常见的用例是AWS-EAST与AWS-WEST。使用NetworkTopologyStrategy
来指定任何给定数据中心应存在整个键空间的副本数量。这是Cassandra用户实现跨数据中心复制的方式。此外,还有一些一致性级别策略,只需要在协调者所在数据中心内进行确认(LOCAL_*
)
数据库中所有机器的总和,包括所有数据中心。没有跨集群复制。
nodetool ring
查看集群中节点令牌。特别是当你被互联网上的冲突信息所困惑时,它会让这些概念变得更加清晰。 - Akbar Ahmed