初始化期间出现致命异常-cassandra服务无法启动

初始化期间出现致命异常-cassandra服务无法启动,cassandra,datastax-enterprise,cassandra-2.1,Cassandra,Datastax Enterprise,Cassandra 2.1,开始通过opscenter修复整个群集,一个节点出现以下错误 ERROR [CompactionExecutor:530] 2016-03-04 18:25:39,893 CassandraDaemon.java:227 - Exception in thread Thread[CompactionExecutor:530,1,main] java.lang.AssertionError: /data/cass_data/data/system/local-7ad54392bcdd35a684

开始通过opscenter修复整个群集,一个节点出现以下错误

ERROR [CompactionExecutor:530] 2016-03-04 18:25:39,893  CassandraDaemon.java:227 - Exception in thread Thread[CompactionExecutor:530,1,main]
java.lang.AssertionError: /data/cass_data/data/system/local-7ad54392bcdd35a684174e047860b377/system-local-ka-3046-Data.db
        at org.apache.cassandra.io.sstable.SSTableReader.getApproximateKeyCount(SSTableReader.java:268) ~[cassandra-all-2.1.11.908.jar:2.1.11.908]
        at org.apache.cassandra.db.compaction.CompactionTask.runMayThrow(CompactionTask.java:151) ~[cassandra-all-2.1.11.908.jar:2.1.11.908]
        at org.apache.cassandra.utils.WrappedRunnable.run(WrappedRunnable.java:28) ~[cassandra-all-2.1.11.908.jar:2.1.11.908]
        at org.apache.cassandra.db.compaction.CompactionTask.executeInternal(CompactionTask.java:73) ~[cassandra-all-2.1.11.908.jar:2.1.11.908]
        at org.apache.cassandra.db.compaction.AbstractCompactionTask.execute(AbstractCompactionTask.java:59) ~[cassandra-all-2.1.11.908.jar:2.1.11.908]
        at org.apache.cassandra.db.compaction.CompactionManager$BackgroundCompactionCandidate.run(CompactionManager.java:262) ~[cassandra-all-2.1.11.908.jar:2.1.11.908]
        at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) ~[na:1.8.0_60]
        at java.util.concurrent.FutureTask.run(FutureTask.java:266) ~[na:1.8.0_60]
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) ~[na:1.8.0_60]
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [na:1.8.0_60]
        at java.lang.Thread.run(Thread.java:745) [na:1.8.0_60]
试图终止进程id并启动dse服务,出现以下错误,但未启动cassandra服务。


有什么问题吗?运行修复如何停止cassandra服务?

您的系统密钥空间已损坏。从第一个错误来看,一些表数据似乎也已损坏。因此,您的磁盘/文件系统可能存在一些问题。要使节点重新启动,您需要从最近的备份中恢复系统密钥空间,或者删除系统密钥空间文件夹,确保您在cassandra.yaml中设置了令牌,然后您应该能够启动节点并重新创建它。

您的系统密钥空间已损坏。从第一个错误来看,一些表数据似乎也已损坏。因此,您的磁盘/文件系统可能存在一些问题。要使节点重新启动,您需要从最近的备份中恢复系统密钥空间,或者删除系统密钥空间文件夹,确保您在cassandra.yaml中设置了令牌,然后您应该能够启动节点并重新创建它。

正在执行的代码非常简单:

    Keyspace keyspace;
    try
    {
        keyspace = Keyspace.open(Keyspace.SYSTEM_KS);
    }
    catch (AssertionError err)
    {
        // this happens when a user switches from OPP to RP.
        ConfigurationException ex = new ConfigurationException("Could not read system keyspace!");
        ex.initCause(err);
        throw ex;
    }

    ColumnFamilyStore cfs = keyspace.getColumnFamilyStore(LOCAL_CF);

    String req = "SELECT cluster_name FROM system.%s WHERE key='%s'";
    UntypedResultSet result = executeInternal(String.format(req, LOCAL_CF, LOCAL_KEY));

    if (result.isEmpty() || !result.one().has("cluster_name"))
    {
        // this is a brand new node
        if (!cfs.getSSTables().isEmpty())
            throw new ConfigurationException("Found system keyspace files, but they couldn't be loaded!");

        // no system files.  this is a new node.
        req = "INSERT INTO system.%s (key, cluster_name) VALUES ('%s', ?)";
        executeInternal(String.format(req, LOCAL_CF, LOCAL_KEY), DatabaseDescriptor.getClusterName());
        return;
    }
它能够打开系统键空间,然后尝试从system.local读取,但失败。这意味着system.local表/数据丢失或损坏

sstable已经打印出来了,所以我们知道它在磁盘上。它有-ka版本控制,所以我们知道它是2.1。下一个最有可能的选项是它在某种程度上已经损坏了-测试损坏似乎应该很容易,但在2.1的许多版本中,checksum-Digest.sha1文件实际上是一个adler32 checksum而不是sha1,而且,它对于压缩的SSTable(如system.local tables)可能是不正确的。因此,检查腐败将很困难

我相信你有两个可行的选择:

1您可以尝试运行scrub offline sstablescrub,请记住它将编写一个根拥有的commitlog段,您需要在完成时对其进行检查。如果这不起作用:


2您可以擦除系统键空间,然后使用或不使用replace_地址将节点重新加入群集。

正在执行的代码非常简单:

    Keyspace keyspace;
    try
    {
        keyspace = Keyspace.open(Keyspace.SYSTEM_KS);
    }
    catch (AssertionError err)
    {
        // this happens when a user switches from OPP to RP.
        ConfigurationException ex = new ConfigurationException("Could not read system keyspace!");
        ex.initCause(err);
        throw ex;
    }

    ColumnFamilyStore cfs = keyspace.getColumnFamilyStore(LOCAL_CF);

    String req = "SELECT cluster_name FROM system.%s WHERE key='%s'";
    UntypedResultSet result = executeInternal(String.format(req, LOCAL_CF, LOCAL_KEY));

    if (result.isEmpty() || !result.one().has("cluster_name"))
    {
        // this is a brand new node
        if (!cfs.getSSTables().isEmpty())
            throw new ConfigurationException("Found system keyspace files, but they couldn't be loaded!");

        // no system files.  this is a new node.
        req = "INSERT INTO system.%s (key, cluster_name) VALUES ('%s', ?)";
        executeInternal(String.format(req, LOCAL_CF, LOCAL_KEY), DatabaseDescriptor.getClusterName());
        return;
    }
它能够打开系统键空间,然后尝试从system.local读取,但失败。这意味着system.local表/数据丢失或损坏

sstable已经打印出来了,所以我们知道它在磁盘上。它有-ka版本控制,所以我们知道它是2.1。下一个最有可能的选项是它在某种程度上已经损坏了-测试损坏似乎应该很容易,但在2.1的许多版本中,checksum-Digest.sha1文件实际上是一个adler32 checksum而不是sha1,而且,它对于压缩的SSTable(如system.local tables)可能是不正确的。因此,检查腐败将很困难

我相信你有两个可行的选择:

1您可以尝试运行scrub offline sstablescrub,请记住它将编写一个根拥有的commitlog段,您需要在完成时对其进行检查。如果这不起作用:

2您可以擦除系统键空间,并使用或不使用replace_地址将节点重新加入集群