【问题标题】:CockroachDB Clustered Across Google Container Engine Clusters, Stateful SetsCockroachDB 集群跨谷歌容器引擎集群,Statefulset
【发布时间】:2018-06-06 00:37:09
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: kubernetes google-kubernetes-engine cockroachdb


    【解决方案1】:

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

    我不知道集群联合在过去 12 到 18 个月内发展得如何,但似乎这才是真正应该解决的地方。

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-04
      • 2019-02-16
      • 2017-09-05
      • 1970-01-01
      • 2016-11-14
      相关资源
      最近更新 更多