卡桑德拉重建
Cassandra ReBuild
DSE 版本 4.8.2
我将 6 个新节点添加到一个有数据的集群中并放入 bootstrap:false。他们加入后,我正在 运行 对每个人进行重建。我相信 1 个节点已完成,但控制台上的命令仍然是 "running"(例如,我还不能 运行 另一个命令)。我想确保它完全完成。该单元没有压缩,也没有活动的流。更新:现在已经 4 天了,仍然坐在命令提示符下。
除了 compationstats 和 netstats 之外,还有什么我可能遗漏的吗?我看到它流式传输数据,然后压缩它但是现在.....
还有一个问题,在我完全完成重建和清理之后,是否还有其他我应该考虑的任务来完全同步集群?
更新:
当我尝试 运行 重建时,我不断收到以下错误。我将 Ubuntu 14.04 中的文件限制提高到 200,000,但我仍然收到错误消息。
INFO [MemtableFlushWriter:747] 2016-02-29 03:57:18,114
Memtable.java:382 - Completed flushing
/media/slot02/cjd/match-b633b251a04f11e58b7b89a485a622c1/cjd-match-tmp-ka-127932-Data.db
(71.866MiB) for commitlog position
ReplayPosition(segmentId=1456708497054, position=14141564) INFO
[ScheduledTasks:1] 2016-02-29 03:58:33,573 ColumnFamilyStore.java:905
- Enqueuing flush of compaction_history: 17177 (0%) on-heap, 0 (0%) off-heap INFO [MemtableFlushWriter:748] 2016-02-29 03:58:33,574
Memtable.java:347 - Writing
Memtable-compaction_history@971836863(3.428KiB serialized bytes, 123
ops, 0%/0% of on/off-heap limit) INFO [MemtableFlushWriter:748]
2016-02-29 03:58:33,575 Memtable.java:382 - Completed flushing
/media/slot01/system/compaction_history-b4dbb7b4dc493fb5b3bfce6e434832ca/system-compaction_history-tmp-ka-142-Data.db
(0.000KiB) for commitlog position
ReplayPosition(segmentId=1456708497058, position=20942643) WARN
[STREAM-IN-/10.0.1.243] 2016-02-29 04:00:02,317 CLibrary.java:231 -
open(/media/slot01/cjd/match-b633b251a04f11e58b7b89a485a622c1,
O_RDONLY) failed, errno (24). ERROR [STREAM-IN-/10.0.1.243] 2016-02-29
04:00:02,541 JVMStabilityInspector.java:117 - JVM state determined to
be unstable. Exiting forcefully due to:
java.io.FileNotFoundException:
/media/slot01/cjd/match-b633b251a04f11e58b7b89a485a622c1/cjd-match-tmp-ka-128371-Index.db
(Too many open files) at java.io.RandomAccessFile.open0(Native
Method) ~[na:1.8.0_72] at
java.io.RandomAccessFile.open(RandomAccessFile.java:316)
~[na:1.8.0_72] at
java.io.RandomAccessFile.(RandomAccessFile.java:243)
~[na:1.8.0_72] at
org.apache.cassandra.io.util.SequentialWriter.(SequentialWriter.java:78)
~[cassandra-all-2.1.11.908.jar:2.1.11.908] at
org.apache.cassandra.io.util.SequentialWriter.open(SequentialWriter.java:111)
~[cassandra-all-2.1.11.908.jar:2.1.11.908] at
org.apache.cassandra.io.util.SequentialWriter.open(SequentialWriter.java:106)
~[cassandra-all-2.1.11.908.jar:2.1.11.908] at
org.apache.cassandra.io.sstable.SSTableWriter$IndexWriter.(SSTableWriter.java:587)
~[cassandra-all-2.1.11.908.jar:2.1.11.908] at
org.apache.cassandra.io.sstable.SSTableWriter.(SSTableWriter.java:140)
~[cassandra-all-2.1.11.908.jar:2.1.11.908] at
org.apache.cassandra.io.sstable.SSTableWriter.(SSTableWriter.java:81)
~[cassandra-all-2.1.11.908.jar:2.1.11.908] at
org.apache.cassandra.streaming.StreamReader.createWriter(StreamReader.java:135)
~[cassandra-all-2.1.11.908.jar:2.1.11.908] at
org.apache.cassandra.streaming.compress.CompressedStreamReader.read(CompressedStreamReader.java:80)
~[cassandra-all-2.1.11.908.jar:2.1.11.908] at
org.apache.cassandra.streaming.messages.IncomingFileMessage.deserialize(IncomingFileMessage.java:48)
~[cassandra-all-2.1.11.908.jar:2.1.11.908] at
org.apache.cassandra.streaming.messages.IncomingFileMessage.deserialize(IncomingFileMessage.java:38)
~[cassandra-all-2.1.11.908.jar:2.1.11.908] at
org.apache.cassandra.streaming.messages.StreamMessage.deserialize(StreamMessage.java:56)
~[cassandra-all-2.1.11.908.jar:2.1.11.908] at
org.apache.cassandra.streaming.ConnectionHandler$IncomingMessageHandler.run(ConnectionHandler.java:250)
~[cassandra-all-2.1.11.908.jar:2.1.11.908] at
java.lang.Thread.run(Thread.java:745) [na:1.8.0_72] INFO [Thread-2]
2016-02-29 04:00:02,543 DseDaemon.java:418 - DSE shutting down...
我的 OpenFile 限制目前是 200,000,来自 ulimit -a。我可以尝试提高,但 Cassandra 建议限制为 100,000。
如果我不得不猜测,问题是一个节点无法压缩,因为数据来自的节点上的 2 个磁盘已满。当它从那里拉取重建数据时,它拉取了 50,000 个小文件,这与其他节点拉取 1-2 个大文件不同。也许这是我必须首先解决的问题?
真的需要帮助...谢谢!
谢谢,
I added 6 new nodes to a cluster with data and put bootstrap:false
首先,这是错误的,根据文档,在向集群添加新节点时,您应该输入 auto_bootstrap = true
看这里:http://docs.datastax.com/en/cassandra/2.1/cassandra/operations/ops_add_node_to_cluster_t.html
其次,建议一次一个或两个节点添加节点,不要同时添加所有6个节点,因为这会给网络带来很大压力(因为数据流)
确保您的 ulimit 设置正确
cat /proc/<DSE pid>/limits
我经常看到有人认为他们设置了 ulimit 配置,但却是为错误的用户设置的。如果您检查特定的进程 ID,您可以 100% 确定。
一件棘手的事情是,无论您通过 limits.conf 设置什么,都将被 limits.d/cassandra.conf 中的设置覆盖,因此请记住根据您的需要从那里编辑文件需要。
此外,正如@phact 提到的,通过上面的 cat 确保你所期望的确实存在。
DSE 版本 4.8.2
我将 6 个新节点添加到一个有数据的集群中并放入 bootstrap:false。他们加入后,我正在 运行 对每个人进行重建。我相信 1 个节点已完成,但控制台上的命令仍然是 "running"(例如,我还不能 运行 另一个命令)。我想确保它完全完成。该单元没有压缩,也没有活动的流。更新:现在已经 4 天了,仍然坐在命令提示符下。
除了 compationstats 和 netstats 之外,还有什么我可能遗漏的吗?我看到它流式传输数据,然后压缩它但是现在.....
还有一个问题,在我完全完成重建和清理之后,是否还有其他我应该考虑的任务来完全同步集群?
更新:
当我尝试 运行 重建时,我不断收到以下错误。我将 Ubuntu 14.04 中的文件限制提高到 200,000,但我仍然收到错误消息。
INFO [MemtableFlushWriter:747] 2016-02-29 03:57:18,114 Memtable.java:382 - Completed flushing /media/slot02/cjd/match-b633b251a04f11e58b7b89a485a622c1/cjd-match-tmp-ka-127932-Data.db (71.866MiB) for commitlog position ReplayPosition(segmentId=1456708497054, position=14141564) INFO [ScheduledTasks:1] 2016-02-29 03:58:33,573 ColumnFamilyStore.java:905 - Enqueuing flush of compaction_history: 17177 (0%) on-heap, 0 (0%) off-heap INFO [MemtableFlushWriter:748] 2016-02-29 03:58:33,574 Memtable.java:347 - Writing Memtable-compaction_history@971836863(3.428KiB serialized bytes, 123 ops, 0%/0% of on/off-heap limit) INFO [MemtableFlushWriter:748] 2016-02-29 03:58:33,575 Memtable.java:382 - Completed flushing /media/slot01/system/compaction_history-b4dbb7b4dc493fb5b3bfce6e434832ca/system-compaction_history-tmp-ka-142-Data.db (0.000KiB) for commitlog position ReplayPosition(segmentId=1456708497058, position=20942643) WARN [STREAM-IN-/10.0.1.243] 2016-02-29 04:00:02,317 CLibrary.java:231 - open(/media/slot01/cjd/match-b633b251a04f11e58b7b89a485a622c1, O_RDONLY) failed, errno (24). ERROR [STREAM-IN-/10.0.1.243] 2016-02-29 04:00:02,541 JVMStabilityInspector.java:117 - JVM state determined to be unstable. Exiting forcefully due to: java.io.FileNotFoundException: /media/slot01/cjd/match-b633b251a04f11e58b7b89a485a622c1/cjd-match-tmp-ka-128371-Index.db (Too many open files) at java.io.RandomAccessFile.open0(Native Method) ~[na:1.8.0_72] at java.io.RandomAccessFile.open(RandomAccessFile.java:316) ~[na:1.8.0_72] at java.io.RandomAccessFile.(RandomAccessFile.java:243) ~[na:1.8.0_72] at org.apache.cassandra.io.util.SequentialWriter.(SequentialWriter.java:78) ~[cassandra-all-2.1.11.908.jar:2.1.11.908] at org.apache.cassandra.io.util.SequentialWriter.open(SequentialWriter.java:111) ~[cassandra-all-2.1.11.908.jar:2.1.11.908] at org.apache.cassandra.io.util.SequentialWriter.open(SequentialWriter.java:106) ~[cassandra-all-2.1.11.908.jar:2.1.11.908] at org.apache.cassandra.io.sstable.SSTableWriter$IndexWriter.(SSTableWriter.java:587) ~[cassandra-all-2.1.11.908.jar:2.1.11.908] at org.apache.cassandra.io.sstable.SSTableWriter.(SSTableWriter.java:140) ~[cassandra-all-2.1.11.908.jar:2.1.11.908] at org.apache.cassandra.io.sstable.SSTableWriter.(SSTableWriter.java:81) ~[cassandra-all-2.1.11.908.jar:2.1.11.908] at org.apache.cassandra.streaming.StreamReader.createWriter(StreamReader.java:135) ~[cassandra-all-2.1.11.908.jar:2.1.11.908] at org.apache.cassandra.streaming.compress.CompressedStreamReader.read(CompressedStreamReader.java:80) ~[cassandra-all-2.1.11.908.jar:2.1.11.908] at org.apache.cassandra.streaming.messages.IncomingFileMessage.deserialize(IncomingFileMessage.java:48) ~[cassandra-all-2.1.11.908.jar:2.1.11.908] at org.apache.cassandra.streaming.messages.IncomingFileMessage.deserialize(IncomingFileMessage.java:38) ~[cassandra-all-2.1.11.908.jar:2.1.11.908] at org.apache.cassandra.streaming.messages.StreamMessage.deserialize(StreamMessage.java:56) ~[cassandra-all-2.1.11.908.jar:2.1.11.908] at org.apache.cassandra.streaming.ConnectionHandler$IncomingMessageHandler.run(ConnectionHandler.java:250) ~[cassandra-all-2.1.11.908.jar:2.1.11.908] at java.lang.Thread.run(Thread.java:745) [na:1.8.0_72] INFO [Thread-2] 2016-02-29 04:00:02,543 DseDaemon.java:418 - DSE shutting down...
我的 OpenFile 限制目前是 200,000,来自 ulimit -a。我可以尝试提高,但 Cassandra 建议限制为 100,000。
如果我不得不猜测,问题是一个节点无法压缩,因为数据来自的节点上的 2 个磁盘已满。当它从那里拉取重建数据时,它拉取了 50,000 个小文件,这与其他节点拉取 1-2 个大文件不同。也许这是我必须首先解决的问题?
真的需要帮助...谢谢!
谢谢,
I added 6 new nodes to a cluster with data and put bootstrap:false
首先,这是错误的,根据文档,在向集群添加新节点时,您应该输入 auto_bootstrap = true
看这里:http://docs.datastax.com/en/cassandra/2.1/cassandra/operations/ops_add_node_to_cluster_t.html
其次,建议一次一个或两个节点添加节点,不要同时添加所有6个节点,因为这会给网络带来很大压力(因为数据流)
确保您的 ulimit 设置正确
cat /proc/<DSE pid>/limits
我经常看到有人认为他们设置了 ulimit 配置,但却是为错误的用户设置的。如果您检查特定的进程 ID,您可以 100% 确定。
一件棘手的事情是,无论您通过 limits.conf 设置什么,都将被 limits.d/cassandra.conf 中的设置覆盖,因此请记住根据您的需要从那里编辑文件需要。
此外,正如@phact 提到的,通过上面的 cat 确保你所期望的确实存在。