CockroachDB集群在Google容器引擎集群,状态集上

问题描述 投票:3回答:1

CockroachDB有一个相对简单的集群机制,你用命令行选项初始化数据库指向其他蟑螂机器的主机名(但是,这个问题确实与任何对等集群数据库相关)。

Cockroach的一个好处是你可以在一个大陆的各个地区聚集。蟑螂自己发布了一个很好的k8s配置,可以在状态集上站立一个蟑螂群。请参阅this配置。

我正试图找到一种方法来跨越不同地区的两个GKE集群中的蟑螂群。区域之间的DNS和连接不是真正的问题,但我无法弄清楚如何处理有状态集实例。在集群内部,它们是cockroachdb-1.cockroach。有没有办法允许这些跨群集可寻址?一种选择是将第二个集群中的节点端口和点实例公开为第一个集群中具有端口的计算机。这看起来很糟糕,如果机器发生故障,则代表单点故障。关于如何做到这一点的任何其他想法?我也探讨了k8s联盟,但我认为它确实没有解决这个问题(虽然我可能是错的)。

最后一个选择是通过负载均衡器公开每个实例......我真的不喜欢这样,但也许这是唯一的方法吗?

kubernetes google-kubernetes-engine cockroachdb
1个回答
3
投票

这是一个很好的问题,我很快就会玩。你一直在检查一套合理的想法。正如您所提到的,核心问题是每个蟑螂过程都需要能够单独解决其他所有蟑螂过程。

我不知道在过去的12-18个月中集群联合已经发展得如何,但似乎真的应该解决这个问题。

除非在集群联合方面取得重大进展,否则我想到的“最简单”方法是为所有cockroachdb pod使用主机网络。您可以指定一些已知的计算机IP作为要连接的新pod的连接地址,然后它们都可以相互通信。我之前使用过StatefulSets(通过设置dnsPolicy: ClusterFirstWithHostNethostNetwork: true),但我不确定这是一个支持得很好的用例。你可能最好使用DaemonSet(标签选择器只能在某些节点上运行,如果你不想在它们上面运行)。像这样:https://gist.github.com/a-robinson/ec2b86783ccbf053c83ba83170673d63

如果这不是你的想象,那么不幸的是,为每个StatefulSet实例创建一个服务可能是下一个最好的选择。至于Kubernetes最近的变化,将为每个吊舱创建一个单独的标签,这应该比以前更容易:https://github.com/kubernetes/kubernetes/pull/55329

不过,我很乐意看到其他建议,因为它是所有类型的手动或基础设施。

© www.soinside.com 2019 - 2024. All rights reserved.