我刚刚阅读了Kubernetes文档中的使用状态集部署Cassandra 主题。 部署过程: 1.创建StorageClass 2.创建PersistentVolume(在我的示例中为4 PersistentVolume)。在1)storageClassName中创建的集 3.创建Cassandra无头服务 4.使用StatefulSet创建Cassandra环-在StatefulSet yml定义中的1)storageClassName中创建的设置。
因此,有4个Pod:Cassandra-0,Cassandra-1,Cassandra-2,Cassandra-4,它们已装入2个(pv-0,pv-1,pv-2, pv-3)。 我想知道这些持久卷如何/是否彼此同步数据。
例如如果我添加一些记录,该记录将由pod cassandra-0写入永久卷pv-0中,那么如果稍后要从数据库检索数据的人-使用cassandra-1 pod / pv将看到已被添加到pv-0。谁能告诉我它是如何工作的?
答案 0 :(得分:2)
如果将数据部署在kubernetes或裸机实例中,则跨集群分布数据的机制是独立的。 Cassandra将尝试根据哈希值(称为令牌)在节点上随机分布数据,并将使用相同的算法来检索信息。
还有其他因素需要考虑:复制因素(份数)和使用的一致性级别。
您可能想看看Datastax academy中的DS201: DataStax Enterprise Foundations of Apache Cassandra™
,其中涵盖了Cassandra的基础知识。
答案 1 :(得分:2)
这与Kubernetes无关
复制是由数据库完成的,并且是可配置的
请参阅Cassandra的CAP定理和最终一致性
您可以控制Cassandra中的一致性级别,无论记录是立即更新还是稍后更新,都取决于您在Cassandra中所做的配置。
另请参见:同步复制,异步复制
Cassandra一致性:
答案 2 :(得分:1)
只是略微扩展了卡洛斯的答案,所以不涉及Kubernetes,并且完全隔离了卷。复制和分发工作完全取决于数据库软件来处理。就K8而言,它们只是单独的进程和单独的卷。
答案 3 :(得分:0)
谢谢大家的评论! 因此,当我的数据库具有3个PV时:
cassandra-pod0 cassandra-pod1 cassandra-pod2
| | |
cassandra-pv0 cassandra-pv0 cassandra-pv0
数据分为3个pvs。当我杀死cassandra-pod1时-我有可能会丢失(暂时)部分数据。我说的对吗?