【发布时间】:2019-04-09 13:31:09
【问题描述】:
在我们使用 cassandra 2.1 的 Java 应用程序版本 1 中
在启动时,我们正在执行查询:“*SELECT * from system.schema_keyspaces;*”以获取键空间信息(如果失败,应用程序将无法启动)
然而,我们从使用 cassandra 3.11 的驱动程序的 cluster.metadata 实例中获取 keypspace 信息的新代码
我们正在使用 Java 的 DC 感知 RoundRobin 负载平衡策略 datastax 驱动程序。
现在考虑升级 3 个节点的场景:A、B 和 C,其中 A 已升级(新应用程序 + Cassandra 3.11),B 上的升级正在进行中(Cassandra 已关闭)且 C 未升级(旧应用程序 + Cassandra 2.1)。并且您在 C 节点上的客户端应用程序将重新启动。
如果 C 节点的 java 客户端上的旧查询在 A 上执行(因为客户端将以循环方式发送查询),我将收到 InvalidQueryException。如果失败,则旧应用程序中没有处理。我们如何解决这个问题?
com.datastax.driver.core.exceptions.InvalidQueryException: un-configured table schema_keyspaces
我发现从 C Cassandra 节点上的客户端应用程序 + 对等表的联系点中删除 A 的 Ip 的一种方法。现在重新启动客户端应用程序。然后 Cassandra 恢复 peers 表条目。
其他方法是继续在 C 上重新启动客户端应用程序,直到客户端应用程序查询实际命中 Cassandra 2.1 并成功重新启动。但这对我来说似乎很难看。
【问题讨论】:
标签: cassandra datastax-java-driver