我们将Cassandra(5 5个节点)2.0.9升级到2.1.2(二进制文件)并逐个运行nodetool upgradesstables(bash脚本),之后我们发现了一些问题:

  • 在每个节点上我们观察到其中一个超过500的50个“待处理任务”,它持续了5天 - 当我们启动nodetool升级时,即使concurrent_compactors设置为8,cassandra也不会超过3-4个同时 . 一个超过500个待处理任务的节点在列族目录中有大约11k个文件...我们有2个ssd磁盘,但在压缩期间,最多有10MB / s读取和最大5MB / s写入 - 即使compaction_throughput_mb_per_sec设置为32或64或256

  • 在某些表的升级期间获得:“WARN [RMI TCP连接(100)-10.64.72.34] 2014-12-21 23:53:18,953 ColumnFamilyStore.java:2492 - 无法取消对reco_active_items_v1进行中的压缩 . 也许在那里是一个异常大的行正在进行中,或者系统只是过载.INFO [RMI TCP连接(100)-10.64.72.34] 2014-12-21 23:53:18,953 CompactionManager.java:247 - 在reco_prod上中止操作 . reco_active_items_v1在无法中断其他压缩操作后“nodetool失败并且在密钥空间中的至少一个列系列的中止升级sstables,请查看服务器日志以获取更多信息 . ”

  • 在某些节点上nodetool upgradedesstables成功完成但仍可以在列族目录中看到jb文件 .

某些节点上的

  • nodetool upgradedesstables返回:error:null - 在org.apache.cassandra.io的org.apache.cassandra.io.sstable.SSTableReader.cloneWithNewStart(SSTableReader.java:952)处的StackTrace - java.lang.NullPointerException .sstable.SSTableRewriter.moveStarts(SSTableRewriter.java:250)org.apache.cassandra.io.sstable.SSTableRewriter.switchWriter(SSTableRewriter.java:300)org.apache.cassandra.io.sstable.SSTableRewriter.abort(SSTableRewriter) .java:186)org.apache.cassandra.db.compaction.CompactionTask.runWith(CompactionTask.java:204)org.apache.cassandra.io.util.DiskAwareRunnable.runMayThrow(DiskAwareRunnable.java:48)at org . 位于org.apache.cassandra.db.compaction.AbstractCompactionTask的org.apache.cassandra.db.compaction.CompactionTask.executeInternal(CompactionTask.java:75)中的apache.cassandra.utils.WrappedRunnable.run(WrappedRunnable.java:28) . 执行(AbstractCompactionTask.java:59)org.apache.cassandra.db.compaction.CompactionManager $ 4.execute(CompactionManager.java: 340)在java.util.concurrent.ThreadPoolExecutor的java.util.concurrent.FutureTask.run(FutureTask.java:262)的org.apache.cassandra.db.compaction.CompactionManager $ 2.call(CompactionManager.java:267) . runWorker(ThreadPoolExecutor.java:1145)at java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:615)at java.lang.Thread.run(Thread.java:745)

这是我们的 生产环境 环境(24小时),我们观察到节点上的负载更高,读取延迟更高,甚至超过1秒 .

任何建议......?