【问题标题】:Cassandra ReBuild卡桑德拉重建
【发布时间】:2016-06-10 21:51:44
【问题描述】:

DSE 版本 4.8.2

我将 6 个新节点添加到包含数据的集群中,并设置了 bootstrap:false。他们加入后,我对每个人都进行了重建。我相信 1 NODE 已完成,但控制台上的命令仍在“运行”(例如,我还不能运行另一个命令)。我想确保它完全完成。该单元没有压缩,也没有活动的流。更新:现在已经 4 天了,仍然坐在命令提示符下。

除了 compationstats 和 netstats 之外,我可能还缺少什么吗?我看到它流式传输数据,然后它压缩它,但现在.....

还有一个问题,在我完全完成重建然后清理之后,我还应该考虑其他任务来完全同步集群吗?

更新:

当我尝试运行重建时,我不断收到以下错误。我将 Ubuntu 14.04 中的文件限制提高到 200,000,但仍然出现错误。

INFO [MemtableFlushWriter:747] 2016-02-29 03:57:18,114 Memtable.java:382 - 完成刷新 /media/slot02/cjd/match-b633b251a04f11e58b7b89a485a622c1/cjd-match-tmp-ka-127932-Data.db (71.866MiB) 用于提交日志位置 重播位置(segmentId=1456708497054,位置=14141564)信息 [ScheduledTasks:1] 2016-02-29 03:58:33,573 ColumnFamilyStore.java:905 - compaction_history 的队列刷新:17177 (0%) on-heap, 0 (0%) off-heap INFO [MemtableFlushWriter:748] 2016-02-29 03:58:33,574 Memtable.java:347 - 写作 Memtable-compaction_history@971836863(3.428KiB序列化字节,123 ops, 0%/0% of on/off-heap limit) INFO [MemtableFlushWriter:748] 2016-02-29 03:58:33,575 Memtable.java:382 - 完成刷新 /media/slot01/system/compaction_history-b4dbb7b4dc493fb5b3bfce6e434832ca/system-compaction_history-tmp-ka-142-Data.db (0.000KiB) 用于提交日志位置 ReplayPosition(segmentId=1456708497058, position=20942643) 警告 [STREAM-IN-/10.0.1.243] 2016-02-29 04:00:02,317 CLibrary.java:231 - 打开(/media/slot01/cjd/match-b633b251a04f11e58b7b89a485a622c1, O_RDONLY) 失败,错误号 (24)。错误 [STREAM-IN-/10.0.1.243] 2016-02-29 04:00:02,541 JVMStabilityInspector.java:117 - JVM 状态确定为 不稳定。由于以下原因强行退出: java.io.FileNotFoundException: /media/slot01/cjd/match-b633b251a04f11e58b7b89a485a622c1/cjd-match-tmp-ka-128371-Index.db (打开的文件太多)在 java.io.RandomAccessFile.open0(Native 方法)~[na:1.8.0_72] 在 java.io.RandomAccessFile.open(RandomAccessFile.java:316) ~[na:1.8.0_72] 在 java.io.RandomAccessFile.(RandomAccessFile.java:243) ~[na:1.8.0_72] 在 org.apache.cassandra.io.util.SequentialWriter.(SequentialWriter.java:78) ~[cassandra-all-2.1.11.908.jar:2.1.11.908] 在 org.apache.cassandra.io.util.SequentialWriter.open(SequentialWriter.java:111) ~[cassandra-all-2.1.11.908.jar:2.1.11.908] 在 org.apache.cassandra.io.util.SequentialWriter.open(SequentialWriter.java:106) ~[cassandra-all-2.1.11.908.jar:2.1.11.908] 在 org.apache.cassandra.io.sstable.SSTableWriter$IndexWriter.(SSTableWriter.java:587) ~[cassandra-all-2.1.11.908.jar:2.1.11.908] 在 org.apache.cassandra.io.sstable.SSTableWriter.(SSTableWriter.java:140) ~[cassandra-all-2.1.11.908.jar:2.1.11.908] 在 org.apache.cassandra.io.sstable.SSTableWriter.(SSTableWriter.java:81) ~[cassandra-all-2.1.11.908.jar:2.1.11.908] 在 org.apache.cassandra.streaming.StreamReader.createWriter(StreamReader.java:135) ~[cassandra-all-2.1.11.908.jar:2.1.11.908] 在 org.apache.cassandra.streaming.compress.CompressedStreamReader.read(CompressedStreamReader.java:80) ~[cassandra-all-2.1.11.908.jar:2.1.11.908] 在 org.apache.cassandra.streaming.messages.IncomingFileMessage$1.deserialize(IncomingFileMessage.java:48) ~[cassandra-all-2.1.11.908.jar:2.1.11.908] 在 org.apache.cassandra.streaming.messages.IncomingFileMessage$1.deserialize(IncomingFileMessage.java:38) ~[cassandra-all-2.1.11.908.jar:2.1.11.908] 在 org.apache.cassandra.streaming.messages.StreamMessage.deserialize(StreamMessage.java:56) ~[cassandra-all-2.1.11.908.jar:2.1.11.908] 在 org.apache.cassandra.streaming.ConnectionHandler$IncomingMessageHandler.run(ConnectionHandler.java:250) ~[cassandra-all-2.1.11.908.jar:2.1.11.908] 在 java.lang.Thread.run(Thread.java:745) [na:1.8.0_72] 信息 [Thread-2] 2016-02-29 04:00:02,543 DseDaemon.java:418 - DSE 关闭...

我的 OpenFile 限制目前是 ulimit -a 的 200,000。我可以尝试更高,但 Cassandra 建议限制为 100,000。

如果我不得不猜测,问题是一个节点无法压缩,因为数据来自的节点上的 2 个磁盘已满。当它从那里提取重建数据时,它会提取 50,000 个小文件,这与其他节点提取 1-2 个大文件不同。也许这就是我必须首先解决的问题?

真的需要帮助...谢谢!

谢谢,

【问题讨论】:

    标签: cassandra cassandra-2.0 datastax datastax-enterprise


    【解决方案1】:

    一件棘手的事情是,您通过limits.conf 设置的任何内容都将被limits.d/cassandra.conf 中的设置覆盖,因此请记住根据您的需要从那里编辑文件。

    另外,正如@phact 所提到的,通过上面的猫确保你所期望的确实存在。

    【讨论】:

      【解决方案2】:

      确保您的 ulimit 设置正确

      cat /proc/<DSE pid>/limits
      

      我经常看到有人认为他们设置了 ulimit 配置但为错误的用户做了。如果您检查特定的进程 ID,您可以 100% 确定。

      【讨论】:

        【解决方案3】:

        我将 6 个新节点添加到带有数据的集群中并放入 bootstrap:false

        首先,这是错误的,根据文档,在向集群添加新节点时,应该输入auto_bootstrap = true

        请看这里:http://docs.datastax.com/en/cassandra/2.1/cassandra/operations/ops_add_node_to_cluster_t.html

        其次,建议一次一个或两个节点添加节点,不要同时添加所有6个节点,因为这会给网络带来很大的压力(因为数据流)

        【讨论】:

        • doanduyhai,虽然我完全同意你的说法。使用 auto_bootstrap:true 加入集群时,我遇到了很多问题。在我阅读的其他文章中,他们说设置为 false,然后在完成后重新设置为 true。每次我尝试加入时,都会收到 java-heap-out 错误。每个节点有 16 个内核和 40GB 的 RAM。我现在应该重新尝试设置为 true 并重新加入吗?虽然已经将一些数据添加到新节点。
        • 您是逐个添加节点还是同时添加所有 6 个节点?
        • 我同时添加了它们(或 3 个,然后是 3 个)。目前,我正在对有两个已填充驱动器的 CASS4 节点进行清理。我们确实运行了 replication=2,所以希望这意味着它会从另一个节点中提取数据,如果没有,不会对犯规造成伤害。一次添加一个节点是否重要?
        • 只有在数据流正确完成后才应该进行 CLEAN UP,否则可能会丢失数据。我们建议一个接一个或两个接一个地添加节点,因为它对现有节点的影响很大(数据流=读取磁盘上的数据+在网络上流式传输)
        • 上面列出的错误信息是怎么回事?我认为存在某种类型的内存泄漏。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-10-19
        • 2015-03-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-09-16
        相关资源
        最近更新 更多