如果所有 pods 在 Kubernetes 中重新启动而不重新启动客户端应用程序,Cassandra 驱动程序如何更新接触点?

How does Cassandra driver update contactPoints if all pods are restarted in Kubernetes without restarting the client application?

我们已经创建了一个有状态集和无头服务。我们可以通过两种方式在应用程序中定义对等 IP:

  1. 在 contactPoints
  2. 中使用 'cassandra-headless-service-name'
  3. 从 headless-service 获取对等点 ip 并在初始化连接时外部化对等点 ip 并读取这些 ips。 到目前为止,一切都很好。 如果 one/some pods 重新启动,以上将起作用,而不是全部。在这种情况下,驱动程序将自动更新新的 ips。

但是,如果完全中断,这将如何工作?如果所有 pods 都关闭并且当它们恢复时,如果所有 pods ip 都更改(IP 可以在 Kubernetes 中更改),应用程序将如何连接到 Cassandra?

在完全中断的情况下,您是对的,应用程序将没有任何有效的集群端点。在应用程序连接到 Cassandra 之前,需要刷新它们(并重新启动应用程序)。

我们实际上写了一个 RESTful API 我们可以使用集群查询当前有效的端点。这样,应用程序团队可以随时找到其集群的当前 IP。我建议做类似的事情。