cassandra - 应用程序查询 schema_keyspaces 和使用 RoundRobin 策略中的升级问题
问题描述
在我们使用 cassandra 2.1 的 Java 应用程序版本 1 中
在启动时,我们正在执行查询:“*SELECT * from system.schema_keyspaces;*”以获取键空间信息(如果失败,应用程序将无法启动)
然而,我们正在从使用 cassandra 3.11 的驱动程序的 cluster.metadata 实例中获取 keypspace 信息的新代码
我们正在使用 java datastax 驱动程序的 DC 感知 RoundRobin 负载平衡策略。
现在考虑升级 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 并成功重新启动。但这对我来说似乎很丑陋。
解决方案
推荐阅读
- ios - ios 13 PHImageManager.default().requestImage 和 Fusuma
- django - 将一个模板文件中的变量包含到 Django 中的另一个模板中
- php - 如何在 laravel 上切换表名前缀?
- ssl-certificate - 无法使用所有 Python 插件的用户名和密码对 SharePoint API 进行身份验证
- c# - 如何将 URL从 Webapi 传递到标签以接受 base64 的图像?
- ios - Xamarin.Forms Observablecollection 在 ios 设备上引发异常
- android - 如何将目录的内容列出到微调器中?
- selenium - 在哪个注解之后我们可以使用@Override 注解?
- vb.net - How can i allow only positive number in my code
- django - 用于过滤的 Django“或查询 **kwargs”