Cassandra 3.11.6 совместимость с 3.11.3 и 3.11.4
В моем проекте мы обновили Cassandra 3.11.3 до 3.11.6. Мы видели множество случаев, когда первый узел обновлялся до 3.11.6, предлагал другую версию схемы и никогда не согласовывался с другими узлами в одной схеме. Таким образом, мы получаем две схемы в кластере: одну для узла с 3.11.6 и другую для узлов с 3.11.3.
Перезапуск узлов, который обычно решает проблему с несколькими схемами, в этом случае не работает. В system.log на узлах 3.11.3 существует следующее сообщение:
ERROR [MessagingService-Incoming-/10.102.134.123] 2020-11-04 23:18:03,132 CassandraDaemon.java:228 - Exception in thread Thread[MessagingService-Incoming-/10.102.134.123,5,main]
java.lang.RuntimeException: Unknown column kind during deserialization
at org.apache.cassandra.db.Columns$Serializer.deserialize(Columns.java:452) ~[apache-cassandra-3.11.3.jar:3.11.3]
at org.apache.cassandra.db.SerializationHeader$Serializer.deserializeForMessaging(SerializationHeader.java:412) ~[apache-cassandra-3.11.3.jar:3.11.3]
at org.apache.cassandra.db.rows.UnfilteredRowIteratorSerializer.deserializeHeader(UnfilteredRowIteratorSerializer.java:195) ~[apache-cassandra-3.11.3.jar:3.11.3]
at org.apache.cassandra.db.partitions.PartitionUpdate$PartitionUpdateSerializer.deserialize30(PartitionUpdate.java:851) ~[apache-cassandra-3.11.3.jar:3.11.3]
at org.apache.cassandra.db.partitions.PartitionUpdate$PartitionUpdateSerializer.deserialize(PartitionUpdate.java:839) ~[apache-cassandra-3.11.3.jar:3.11.3]
at org.apache.cassandra.db.Mutation$MutationSerializer.deserialize(Mutation.java:425) ~[apache-cassandra-3.11.3.jar:3.11.3]
at org.apache.cassandra.db.Mutation$MutationSerializer.deserialize(Mutation.java:434) ~[apache-cassandra-3.11.3.jar:3.11.3]
at org.apache.cassandra.service.MigrationManager$MigrationsSerializer.deserialize(MigrationManager.java:669) ~[apache-cassandra-3.11.3.jar:3.11.3]
at org.apache.cassandra.service.MigrationManager$MigrationsSerializer.deserialize(MigrationManager.java:652) ~[apache-cassandra-3.11.3.jar:3.11.3]
at org.apache.cassandra.net.MessageIn.read(MessageIn.java:123) ~[apache-cassandra-3.11.3.jar:3.11.3]
at org.apache.cassandra.net.IncomingTcpConnection.receiveMessage(IncomingTcpConnection.java:192) ~[apache-cassandra-3.11.3.jar:3.11.3]
at org.apache.cassandra.net.IncomingTcpConnection.receiveMessages(IncomingTcpConnection.java:180) ~[apache-cassandra-3.11.3.jar:3.11.3]
at org.apache.cassandra.net.IncomingTcpConnection.run(IncomingTcpConnection.java:94) ~[apache-cassandra-3.11.3.jar:3.11.3]
Это также происходит при обновлении с 3.11.4 до 3.11.6. Кассандра заявила, что изменения между выпусками должны быть совместимыми, но, видимо, здесь дело обстоит не так.
Если мы понизим версию Cassandra до 3.11.3 или 3.11.4, узлы согласятся на единую схему. Или, если мы сделаем флэш-обновление всех узлов до 3.11.6, тогда они согласятся на единую схему. Но нам нужно делать одно обновление за раз, поскольку нам всегда нужна доступность Cassandra.
Кто-нибудь еще видел эту проблему и есть ли решение, кроме обновления флэш-памяти?