提问者:小点点

我们如何在一个单独的Openshift/Kubernetes集群中添加第二个运行的卡珊德拉·DC?


我们在 2 个不同的 openshift 集群中部署了 2 个 cassandra 数据中心(每个 openshift 集群一个)。每个Cassandra数据中心都有一个种子盒(pod-0)

我们使用了bitnami helm-chart(https://github . com/bitnami/charts/tree/master/bitnami/Cassandra)

现在我们想连接两个cassandra数据中心以同步数据。我们怎么做呢?

我想我们需要使用开放式路线公开 Cassandra 流量。但是要公开/使用哪个端口和服务?

我可以看到我们有:

  • 一个名为myrelease-cassandra的服务,类型为ClusterIP,面向9042 / TCP (cql)
  • 一个名为myrelease-cassandra-headless的服务,Headless(无ip),针对7000 / TCP(内部),7001 / TCP (tls),7199 / TCP (jmx),9042 / TCP (cql)

我尝试了一些解决方案,但到目前为止我没有成功:例如,我可以从日志中看到Cassandra环试图通过端口9042连接,但Openshift路由可以通过端口443访问:

  • 如果我使用端口号设置外部种子(基本上是另一个openShift cluser路由)(例如my-os-的路由:443),我看到错误说:主机无法解析。
  • 如果我不设置端口号,我会看到超时,因为端口是9042而不是443

我们将cassandra配置为使用ssl,openshift中的路由可通过F5负载平衡器访问,该负载平衡器面向ops shift的所有基础节点

更新1

基本上,我们希望复制这种体系结构(但有2k8s集群,没有操作员)https://itnext.io/managing-a-multi-site-cassandra-cluster-on-multiple-kubernetes-with-casskop-multicasskop-cf407c297701

或者https://docs.k8ssandra.io/components/k8ssandra-operator/

更新2

基本上,如果有一种方法可以将内部节点端口配置为7000,但对cassandra说使用另一个端口连接到其他cassandra主机,它就可以工作。类似于Elasticsearch,您有http.porthttp.publish_portElasticsearch配置


共2个答案

匿名用户

如您所知,这些是节点形成集群所需的三个基本属性:

  • 相同的cluster_name
  • 用于八卦的节点间网络连接
  • 常见种子

为了使不同K8s集群中的两个DC能够组成一个集群,您需要在两个K8s集群之间的八卦端口7000上设置第一个启用双向TCP网络连接的DC。

您还需要确保将 Pod 配置为对 cassandra.yaml 中的种子列表使用服务。必须公开此种子服务,以便其他 K8s 群集可以访问它。

第一个 DC 正常运行后,需要将配置复制到其他 K8s 群集中的第二个 DC,以便:

  • 第二个 DC 具有相同的cluster_name
  • 在 Pod 的种子列表中使用与 DC1 相同的种子服务
  • 在端口 7000 上与八卦有网络连接

理想情况下,第二个DC还配置了种子服务,以便两个DC都可以使用它们。干杯!

匿名用户

你能用hostPort而不是nodePort吗?我已经能够使用 cass 运算符将两个独立的 OpenShift K8s kube 连接到一个集群中,但它需要一些 hijinks。你能看到这个文档吗 https://docs.google.com/document/d/1YuS0FaCKIu_Sa9XMDRSI17MqMOHqzScR6SO7XVBImz4/edit