В нашем java-приложении версии 1, которое использует cassandra 2.1
При запуске мы выполняем запрос: "* SELECT * from system.schema_keyspaces; *", чтобы получить информацию о пространстве ключей (если это не удастся, приложение не запустится)
Однако новый код мы получаем информацию о пространстве клавиш из экземпляра драйвера cluster.metadata, который использует cassandra 3.11
Мы используем политику балансировки нагрузки RoundRobin, поддерживающую DC
Драйвер Datastax.
Теперь рассмотрим сценарий с обновлением 3 узлов: A, B и C, где A обновляется (новое приложение + Cassandra 3.11), обновление на B находится в процессе (Cassandra здесь внизу), а C не обновляется (старый приложение + Кассандра 2.1). и ваше клиентское приложение на узле C перезапускается.
Я получаю InvalidQueryException, если старый запрос, присутствующий на клиенте java узла C, выполняется на A (так как клиент будет отправлять запрос циклически). если это не удается, в старом приложении нет обработки. Как мы можем решить эту проблему?
com.datastax.driver.core.exceptions.InvalidQueryException: un-configured table schema_keyspaces
Один из способов выяснить, как удалить Ip А из точек контакта клиентского приложения + таблица пиров на узле C Cassandra. Теперь перезапустите клиентское приложение. а затем Кассандра, чтобы восстановить запись таблицы сверстников.
Другой способ - продолжать перезапускать клиентское приложение на C до тех пор, пока запрос клиентского приложения не попадет на Cassandra 2.1 и не будет успешно перезапущен. Но это кажется мне уродливым.