【问题标题】:Access Cassandra Via Network Load Balancer(AWS) in different AWS account通过不同 AWS 账户中的网络负载均衡器(AWS)访问 Cassandra
【发布时间】:2021-06-26 03:10:55
【问题描述】:

我已经在aws帐户的kubernetes上安装了cassandra(三个节点)。

我想通过 aws 端点(通过 NLB)打开同一个 cassandra 到不同的 aws 帐户,以便我可以访问这个 cassandra 以进行读/写。

我正在使用 spark(在不同的 AWS 账户中)在 cassandra 中加载数据,但我在加载数据时收到此警告。

WARN ChannelPool: [s0|/10.0.246.140:32034] Error while opening new channel (ConnectionInitException: [s0|connecting...] Protocol initialization request, step 1 (STARTUP {CQL_VERSION=3.0.0, DRIVER_NAME=DataStax Java driver for Apache Cassandra(R), DRIVER_VERSION=4.7.2, CLIENT_ID=b52c9022-561a-48d3-bd98-893c6c17f0c3, APPLICATION_NAME=Spark-Cassandra-Connector-application_1606197155514_0510}): failed to send request (java.nio.channels.NotYetConnectedException))

有没有人通过 NLB 打开 Cassandra,我需要为 NLB 的 cassandra 中的每个节点创建单独的路由吗?如果是,该怎么做?

【问题讨论】:

    标签: cassandra cassandra-3.0 spark-cassandra-connector


    【解决方案1】:

    您需要定义 K8s 服务并通过 Ingress controller(例如 Traefik)公开它,以便客户端(例如您的 Spark 应用程序)可以从 Kubernetes 集群外部连接到您的 Cassandra 集群。

    如果您使用的是DataStax Cassandra Operator (cass-operator),它会变得容易得多,因为它预先配置了您可以使用的服务。请参阅我们在 Connecting to Cassandra from outside the Kubernetes cluster 中包含的 Ingress 示例。

    如果您还不知道,请查看开源 K8ssandra。它是一个现成的平台,用于在 Kubernetes 中使用 DataStax Cassandra Operator 在底层运行 Apache Cassandra,但所有工具都捆绑在一起:

    • Reaper 用于自动维修
    • Medusa 用于备份和恢复
    • Metrics Collector 使用 Prometheus + Grafana 进行监控
    • k8s 集群入口的 Traefik 模板

    由于所有这些组件都是开源的,因此它们都可以免费使用,不需要许可证或付费订阅,但仍具有强大的社区支持。干杯!

    【讨论】:

    • 我已经通过 Kong(NLB) 打开了 cassandra,我可以从外部 aws 帐户连接 cassandra。但是当我连接到 cassandra 时,它连接到一个节点并开始写入它,但它给出了上面的警告,因为它无法建立与其他节点的连接。因为这些 IP 无法从其他 AWS 账户访问。当前架构:Spark 应用程序 --> AWS 端点 --> AWS 端点服务 --> NLB --> Kong(ingress) --> 服务 --> Pod。如何确保 spark 将连接到 cassandra 中的每个节点?
    猜你喜欢
    • 2018-04-02
    • 2021-07-16
    • 1970-01-01
    • 1970-01-01
    • 2019-10-03
    • 2023-03-08
    • 2019-12-30
    • 2021-12-04
    • 2018-05-24
    相关资源
    最近更新 更多