使用 java-driver 连接到 Kubernetes 上的 Cassandra

Connect to Cassandra on Kubernetes using java-driver

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

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))

Adding all nodes?

您绝对不需要将所有节点都添加为接触点。即使在香草 Cassandra 中,只添加一些也可以,因为驱动程序会八卦并找到其余部分。

Adding just the service address?

您需要做的就是绑定服务地址的第二个选项。服务地址的好处在于它将占集群中 IP 的 changing/removing。

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

  • 数据中心服务
  • 种子服务
  • 全部pods服务

种子服务仅解析为 pods 的种子。其名称的格式为 <cluster-name>-seed-service。由于 pods 的短暂性质,c​​ass 运算符可能会将不同的 C* 节点指定为种子节点。不要使用种子服务连接客户端应用程序。

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

数据中心服务解析为就绪 pods。其名称的格式为 <cluster-name>-<dc-name>-service 这是您应该用于连接客户端应用程序的服务。不要直接使用 Pod IP,因为它们会随时间变化。