当前位置: 首页 > 知识库问答 >
问题:

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

苏昂雄
2023-03-14

我们在 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个答案

戚森
2023-03-14

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

臧翰采
2023-03-14

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

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

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

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

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

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

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

 类似资料:
  • 请看下面的代码,让我知道我哪里做错了? 使用: DSE版本-5.1.0 172.31.16.45:9042连接到测试群集。[cqlsh 5.0.1|Cassandra3.10.0.1652|DSE 5.1.0|CQL规范3.4.4|本地协议v4]使用HELP寻求帮助。 谢谢 斯卡拉 斯卡拉 斯卡拉 我在这里什么都得不到?甚至没有错误。

  • DSE版本4.8.2 我用数据向集群添加了6个新节点,并将bootstrap:false。他们加入后,我正在对每一个进行重建。我相信1NODE已完成,但控制台上的命令仍在“运行”(例如,我还无法运行另一个命令)。我想确保它完全完成。该单元没有压实,也没有活动的溪流。更新:现在已经4天了,仍然处于命令提示符下。 除了compationstats和netstats,还有什么我可能缺少的吗?我看到它流式

  • 我已经和Cassandra合作了一段时间,并遵循了以下链接中的基准测试提示: http://www.datastax.com/dev/blog/how-not-to-benchmark-cassandra 我有4个节点运行Cassandra,2个不同的节点使用本机基准测试工具“cassandra-stress”为集群提供数据。我知道,由于Cassandra写操作的LSM特性,它们很难绑定到IO,但

  • 我正在使用一个安装了docker的docker映像,为了运行任务来清理我的kubernetes集群中每个节点上的docker映像数据。我尝试使用Daemonset,因为它将在除master之外的每个节点上运行,但是在docker容器中运行cron被证明是徒劳的。 因此,我尝试使用K8s Cronjob,它定期运行,具有以下属性: 和 我正在运行一个 shell 脚本,该脚本从上述 CronJob

  • 引用这篇文章: http://www.datastax.com/dev/blog/4-simple-rules-when-using-the-datastax-drivers-for-cassandra Cassandra的存储引擎进行了优化,以避免存储不必要的空列,但是当使用预准备语句时,那些未提供的参数会导致空值被传递给Cassandra(从而存储墓碑)。目前,这种情况的唯一解决方法是为最常见

  • 我正在为python使用datastax cassandra驱动程序。 有争议的代码部分是: 结果是: 我不确定括号周围的括号来自哪里,一旦我删除了括号,prepare 语句就会起作用。 想法?