数据库如何在Kubernetes中的持久卷之间同步数据

时间:2019-07-14 16:07:21

标签: kubernetes cassandra

我刚刚阅读了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。谁能告诉我它是如何工作的?

4 个答案:

答案 0 :(得分:2)

如果将数据部署在kubernetes或裸机实例中,则跨集群分布数据的机制是独立的。 Cassandra将尝试根据哈希值(称为令牌)在节点上随机分布数据,并将使用相同的算法来检索信息。

还有其他因素需要考虑:复制因素(份数)和使用的一致性级别。

您可能想看看Datastax academy中的DS201: DataStax Enterprise Foundations of Apache Cassandra™,其中涵盖了Cassandra的基础知识。

答案 1 :(得分:2)

  1. 这与Kubernetes无关

  2. 复制是由数据库完成的,并且是可配置的

  3. 请参阅Cassandra的CAP定理和最终一致性

  4. 您可以控制Cassandra中的一致性级别,无论记录是立即更新还是稍后更新,都取决于您在Cassandra中所做的配置。

  5. 另请参见:同步复制,异步复制

Cassandra一致性:

how to set cassandra read and write consistency

How is the consistency level configured?

答案 2 :(得分:1)

只是略微扩展了卡洛斯的答案,所以不涉及Kubernetes,并且完全隔离了卷。复制和分发工作完全取决于数据库软件来处理。就K8而言,它们只是单独的进程和单独的卷。

答案 3 :(得分:0)

谢谢大家的评论! 因此,当我的数据库具有3个PV时:

cassandra-pod0  cassandra-pod1 cassandra-pod2
     |                 |             |
cassandra-pv0   cassandra-pv0   cassandra-pv0 

数据分为3个pvs。当我杀死cassandra-pod1时-我有可能会丢失(暂时)部分数据。我说的对吗?