Кассандра TokenRangeOfflineException в 5n кластере
Я новичок в Cassandra и сталкиваюсь со следующими исключениями TokenRangeOffline: у меня есть кластер 5n с коэффициентом репликации 5 и уровнем согласованности как Quorum.
Я сделал описание пространства ключей на моем кластере:
CREATE KEYSPACE "StorageOS" WITH replication = {
'class': 'NetworkTopologyStrategy',
'DC' : '5'
};
Исключения:
2018-06-22 18:44:26,161 [DriverUpdateThead_139] ERROR CountingConnectionPoolMonitor.java (line 94) com.netflix.astyanax.connectionpool.exceptions.TokenRangeOfflineException: TokenRangeOfflineException: [host=xx.xx.xx.xx(xx.xx.xx.xx):9160, latency=8(5009), attempts=2]UnavailableException()
com.netflix.astyanax.connectionpool.exceptions.TokenRangeOfflineException: TokenRangeOfflineException: [host=xx.xx.xx.xx(xx.xx.xx.xx):9160, latency=8(5009), attempts=2]UnavailableException()
at com.netflix.astyanax.thrift.ThriftConverter.ToConnectionPoolException(ThriftConverter.java:165)
at com.netflix.astyanax.thrift.AbstractOperationImpl.execute(AbstractOperationImpl.java:65)
at com.netflix.astyanax.thrift.ThriftColumnFamilyQueryImpl$1$2.execute(ThriftColumnFamilyQueryImpl.java:190)
at com.netflix.astyanax.thrift.ThriftColumnFamilyQueryImpl$1$2.execute(ThriftColumnFamilyQueryImpl.java:182)
at com.netflix.astyanax.thrift.ThriftSyncConnectionFactoryImpl$ThriftConnection.execute(ThriftSyncConnectionFactoryImpl.java:151)
at com.netflix.astyanax.connectionpool.impl.AbstractExecuteWithFailoverImpl.tryOperation(AbstractExecuteWithFailoverImpl.java:119)
at com.netflix.astyanax.connectionpool.impl.AbstractHostPartitionConnectionPool.executeWithFailover(AbstractHostPartitionConnectionPool.java:338)
at com.netflix.astyanax.thrift.ThriftColumnFamilyQueryImpl$1.execute(ThriftColumnFamilyQueryImpl.java:180)
Caused by: UnavailableException()
at org.apache.cassandra.thrift.Cassandra$get_slice_result$get_slice_resultStandardScheme.read(Cassandra.java:11815)
at org.apache.cassandra.thrift.Cassandra$get_slice_result$get_slice_resultStandardScheme.read(Cassandra.java:11773)
at org.apache.cassandra.thrift.Cassandra$get_slice_result.read(Cassandra.java:11699)
at org.apache.thrift.TServiceClient.receiveBase(TServiceClient.java:78)
at org.apache.cassandra.thrift.Cassandra$Client.recv_get_slice(Cassandra.java:671)
at org.apache.cassandra.thrift.Cassandra$Client.get_slice(Cassandra.java:655)
at com.netflix.astyanax.thrift.ThriftColumnFamilyQueryImpl$1$2.internalExecute(ThriftColumnFamilyQueryImpl.java:195)
at com.netflix.astyanax.thrift.ThriftColumnFamilyQueryImpl$1$2.internalExecute(ThriftColumnFamilyQueryImpl.java:182)
at com.netflix.astyanax.thrift.AbstractOperationImpl.execute(AbstractOperationImpl.java:60)
... 20 more
Еще немного информации:
Подключено к StorageOS на локальном хосте: 9160.
[cqlsh 4.1.1 | Кассандра 2.1.11 | CQL spec 3.1.1 | Комиссионный протокол 19.39.0]
Я знаю, что есть несколько похожих вопросов, которые касаются этого исключения, но в моем конкретном случае я не могу понять, как действовать дальше. Может кто-нибудь, пожалуйста, помогите???
1 ответ
Стоит взглянуть на то, какую версию Cassandra вы используете. По умолчанию Astyanax использует "целевую" версию Cassandra 1.1. Это потому, что исходная кодовая база использовала Thrift API, который использует порт 9160 (как я вижу, вы).
Но более новые версии Cassandra (2.2+) по умолчанию отключают протокол Thrift. Итак, у вас есть два варианта:
1. Сообщите Astyanax о том, какую версию вы используете (как указано в документации):
AstyanaxContext<Keyspace> context = new AstyanaxContext.Builder()
.withAstyanaxConfiguration(new AstyanaxConfigurationImpl()
.setCqlVersion("3.4.4")
.setTargetCassandraVersion("3.11.2"))
Обратите внимание, что с этой опцией вы хотите установить 9042 в качестве порта.
Или же
2. Включите Cassandra для прослушивания Thrift, изменив этот параметр в cassandra.yaml (на всех узлах).
# Whether to start the thrift rpc server.
start_rpc: true
Посмотрите, поможет ли это.