【问题标题】:Cassandra TokenRangeOfflineException in a 5n cluster5n 集群中的 Cassandra TokenRangeOfflineException
【发布时间】:2018-12-02 17:25:17
【问题描述】:

我是 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

更多信息:

在 localhost:9160 连接到 StorageOS。

[cqlsh 4.1.1 |卡桑德拉 2.1.11 | CQL 规范 3.1.1 | Thrift 协议 19.39.0]

我知道有一些与此异常相关的类似问题,但在我的具体情况下,我无法理解如何继续。有人可以帮忙吗???

【问题讨论】:

    标签: cassandra astyanax


    【解决方案1】:

    需要注意的是,您正在运行哪个版本的 Cassandra。 Astyanax 默认为 1.1 的“目标”Cassandra 版本。这是因为原始代码库利用了 Thrift API,该 API 使用端口 9160(正如我所看到的那样)。

    但较新版本的 Cassandra (2.2+) 默认情况下禁用 Thrift 协议。所以你有两个选择:

    1. 告诉 Astyanax 您正在使用哪个版本(如 documentation 所示):

    AstyanaxContext<Keyspace> context = new AstyanaxContext.Builder()
        .withAstyanaxConfiguration(new AstyanaxConfigurationImpl()      
            .setCqlVersion("3.4.4")
            .setTargetCassandraVersion("3.11.2"))
    

    请注意,使用此选项,您需要将 9042 设置为端口。

    或者

    2. 通过更改 cassandra.yaml 中的设置(在所有节点上),使 Cassandra 能够侦听 Thrift。

    # Whether to start the thrift rpc server.
    start_rpc: true
    

    看看有没有帮助。

    【讨论】:

    • 谢谢亚伦,我更新了我的答案。问题是我只是间歇性地注意到这个问题,而且也只是在一个节点上。你能帮忙吗??
    • 在我的 cassandra.yaml 文件中检查 start_rpc 设置为“true”。
    猜你喜欢
    • 1970-01-01
    • 2013-09-09
    • 2015-10-13
    • 1970-01-01
    • 2016-08-16
    • 2020-03-28
    • 2015-02-24
    • 2011-08-07
    • 2012-08-04
    相关资源
    最近更新 更多