1

我们正在建立一个 Cassandra 集群,使用 k8ssandra helm chart,它公开了几个服务,我们的客户端应用程序使用 datastax Java-Driver 并在与 Cassandra 集群相同的 k8s 集群上运行(这是测试阶段)

CqlSessionBuilder builder = CqlSession.builder();

将应用程序(通过驱动程序)连接到 Cassandra 的推荐方法是什么?

添加所有节点?

for (String node :nodes) {
   builder.addContactPoint(new InetSocketAddress(node, 9042));
}

只添加服务地址?

 builder.addContactPoint(new InetSocketAddress(service-dns-name , 9042))

将服务地址添加为未解析?(这甚至行得通吗?)

 builder.addContactPoint(InetSocketAddress.createUnresolved(service-dns-name , 9042))
4

2 回答 2

1

除了许多其他资源外,k8ssandra Helm 图表还部署了 CassandraDatacenter 对象和 cass-operator。cass-operator 负责管理 CassandraDatacenter。它创建 StatefulSet(s) 并创建几个无头服务,包括:

  • 数据中心服务
  • 种子服务
  • 所有 pod 服务

种子服务仅解析为种子的豆荚。它的名字是<cluster-name>-seed-service. 由于 pod 的短暂性,cass-operator 可以将不同的 C* 节点指定为种子节点。不要使用种子服务来连接客户端应用程序。

all pods 服务解析到所有 Cassandra pod,无论它们是否准备就绪。它的名字是<cluster-name>-<dc-name>-all-pods-service. 该服务旨在促进监控。不要使用 all pods 服务来连接客户端应用程序。

数据中心服务解析为准备好的 pod。它的名称采用以下形式<cluster-name>-<dc-name>-service:这是您应该用于连接客户端应用程序的服务。不要直接使用 pod IP,因为它们会随着时间而改变。

于 2021-11-30T04:25:44.447 回答
0

添加所有节点?

您绝对不需要将所有节点都添加为接触点。即使在香草 Cassandra 中,只添加一些也可以,因为司机会闲聊并找到其余的。

只添加服务地址?

您需要做的就是绑定服务地址的第二个选项。服务地址的好处在于,它将解释集群中 IP 的更改/删除。

于 2021-11-29T15:58:32.843 回答