1

我们已经在 Kubernetes 中建立了一个 Cassandra 集群。我们正在使用 statefulSet 和无头服务。并计划实施多机架功能。

为此,我想在一个 pod 中部署多个容器,并计划为此添加关联规则。

但我能想到的一个可能的问题是

在 Kubernetes 中,IP 可以在重启/失败期间更改。

因此,如果我在一个 pod 中有 2 个容器,并且我的 pod 出现故障。当 pod 出现时,两个容器可能会交换它们的 IP,这将导致状态不一致。由于这 2 个容器的主要令牌范围发生了更改,并且其他 Cassandra 节点没有更新有关此更改的信息。

如果两个容器都获得了新的 IP,那么我看不到任何问题,因为其他 Cassandra 节点会自行更新。我在这一点上是对的吗?

如何在重启/失败期间防止此 IP 交换?

是否有任何文件可以帮助我实现多机架功能?

4

1 回答 1

1

因此,如果我在一个 pod 中有 2 个容器,并且我的 pod 出现故障。当 pod 出现时,两个容器可能会交换它们的 IP,这将导致状态不一致。由于这 2 个容器的主要令牌范围发生了更改,并且其他 Cassandra 节点没有更新有关此更改的信息。

IP交换是不可能的。由于 C* 集群会抱怨 IP 已在使用中。因此,如果 C* pod 提供了 C* 集群中存在的其他 IP,但如果它尝试提供 C* 集群中存在的 IP,则 pod 将无法启动并保持挂起状态。

如果两个容器都获得了新的 IP,那么我看不到任何问题,因为其他 Cassandra 节点会自行更新。我在这一点上是对的吗?

是的,你是对的。

如何在重启/失败期间防止此 IP 交换?

我们可以将其称为 IP 交叉,而不是 IP 交换。你无法阻止这种情况。只有当这种情况发生时,您才能采取补救措施。您可以确定发生了 IP 交叉,然后杀死 pod 并查看它是否获取了其他一些 IP。

于 2020-09-03T11:13:57.060 回答