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

时间:2017-12-24 00:06:57

标签: kubernetes google-kubernetes-engine cockroachdb

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

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

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

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

1 个答案:

答案 0 :(得分:3)

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

我不知道集群联盟在过去12-18个月内的发展情况如何,但似乎应该解决这个问题。

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

如果这并没有引起您的兴趣,那么不幸的是,为每个StatefulSet实例创建服务可能是下一个最好的选择。从Kubernetes最近的一次更改开始,将为每个pod创建一个单独的标签,这应该比以前更容易:https://github.com/kubernetes/kubernetes/pull/55329

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

相关问题