初始化期间出现致命异常-cassandra服务无法启动
开始通过opscenter修复整个群集,一个节点出现以下错误初始化期间出现致命异常-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
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_地址将节点重新加入集群