3

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

Cockroach 的好处之一是您可以在一个大陆内跨区域进行集群。Cockroach 自己发布了一个很好的 k8s 配置来在有状态集上建立一个 cockroach 集群。看到这个配置。

我正在尝试找到一种将蟑螂集群跨越不同区域的两个 GKE 集群的方法。区域之间的 DNS 和连接并不是真正的问题,但我不知道如何解决有状态集实例。在集群内部,它们是 cockroachdb-1.cockroach。有什么方法可以让这些跨集群寻址?一种选择是将第二个集群中的节点端口和点实例公开给具有第一个集群中端口的机器。这似乎很骇人听闻,如果机器出现故障,则表示单点故障。关于如何做到这一点的任何其他想法?我也探索了 k8s federation,但我认为它也不能真正解决这个问题(尽管我可能是错的)。

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

4

1 回答 1

3

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

我不知道过去 12 到 18 个月集群联邦的发展情况如何,但似乎这才是真正应该解决的问题。

除非集群联合有很大的发展,否则想到的“最简单”的方法是对所有 cockroachdb pod 使用主机网络。您可以指定一些已知的机器 IP 作为新 pod 连接的加入地址,然后它们都可以相互通信。我之前已经使用 StatefulSets 进行了这项工作(通过dnsPolicy: ClusterFirstWithHostNet与 一起设置hostNetwork: true),但我不确定它是否是一个得到良好支持的用例。使用 DaemonSet 可能会更好(如果您不希望所有节点都使用标签选择器,则仅在某些节点上运行)。像这样的东西:https ://gist.github.com/a-robinson/ec2b86783ccbf053c83ba83170673d63

如果这不能满足您的要求,那么不幸的是,为每个 StatefulSet 实例创建一个服务可能是下一个最佳选择。作为 Kubernetes 的一个相当新的变化,将为每个 pod 创建一个单独的标签,这应该比以前更容易:https ://github.com/kubernetes/kubernetes/pull/55329

不过,我很乐意看到其他建议,因为它都是手动的或特定于基础架构的。

于 2018-01-02T15:57:59.847 回答