/tmp
Cassandra가 다음과 같이 설정 되면 시작되지 않습니다 noexec
. 이는 요즘 거의 기본값입니다.
java.lang.NoClassDefFoundError: Could not initialize class com.sun.jna.Native
at org.apache.cassandra.utils.memory.MemoryUtil.allocate(MemoryUtil.java:82) ~[apache-cassandra-2.2.2.jar:2.2.2]
at org.apache.cassandra.io.util.Memory.<init>(Memory.java:74) ~[apache-cassandra-2.2.2.jar:2.2.2]
at org.apache.cassandra.io.util.Memory.allocate(Memory.java:97) ~[apache-cassandra-2.2.2.jar:2.2.2]
at org.apache.cassandra.io.sstable.IndexSummary$IndexSummarySerializer.deserialize(IndexSummary.java:323) ~[apache-cassandra-2.2.2.jar:2.2.2]
at org.apache.cassandra.io.sstable.format.SSTableReader.loadSummary(SSTableReader.java:836) ~[apache-cassandra-2.2.2.jar:2.2.2]
at org.apache.cassandra.io.sstable.format.SSTableReader.load(SSTableReader.java:692) ~[apache-cassandra-2.2.2.jar:2.2.2]
at org.apache.cassandra.io.sstable.format.SSTableReader.load(SSTableReader.java:664) ~[apache-cassandra-2.2.2.jar:2.2.2]
at org.apache.cassandra.io.sstable.format.SSTableReader.open(SSTableReader.java:458) ~[apache-cassandra-2.2.2.jar:2.2.2]
at org.apache.cassandra.io.sstable.format.SSTableReader.open(SSTableReader.java:363) ~[apache-cassandra-2.2.2.jar:2.2.2]
at org.apache.cassandra.io.sstable.format.SSTableReader$4.run(SSTableReader.java:501) ~[apache-cassandra-2.2.2.jar:2.2.2]
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) ~[na:1.8.0_102]
at java.util.concurrent.FutureTask.run(FutureTask.java:266) ~[na:1.8.0_102]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) ~[na:1.8.0_102]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [na:1.8.0_102]
at java.lang.Thread.run(Thread.java:745) [na:1.8.0_102]
마운트 noexec
에서 플래그를 제거하면/var/tmp
카산드라제대로 시작됩니다. 파일에서 tmpdir의 위치를 변경하기 위해 여러 가지 방법을 시도했습니다 cassandra-env.sh
.
JVM_OPTS="$JVM_OPTS -Djna.tmpdir=/home/cassandra/tmp"
JVM_OPTS="$JVM_OPTS -Djava.io.tmpdir=/home/cassandra/tmp"
JVM_OPTS="$JVM_OPTS -Dorg.xerial.snappy.tempdir=/home/cassandra/tmp"
물론 이 모든 것을 한꺼번에 사용한 것은 아닙니다. 인터넷에서 찾은 솔루션이지만 아무 것도 작동하지 않는 것 같습니다. TMPDIR
파일 시작 부분에서 내보내기도 시도했지만 cassandra-env.sh
소용이 없었습니다. 항상 같은 메시지로 실패합니다.
/tmp
보안 측면에서 noexec 플래그 없이 떠나는 것은 나쁜 생각이라고 생각합니다 . 나는 분명히 여기에 기본적인 것을 놓치고 있습니다. tmpdir을 /home/cassandra/tmp
이와 유사한 것으로 설정하려면 어떻게 해야 합니까 ?
답변1
아, 그럴 것 같아둘 다옵션이 파일에 있어야 합니다 cassandra-env.sh
.
JVM_OPTS="$JVM_OPTS -Djna.tmpdir=/home/cassandra/tmp"
JVM_OPTS="$JVM_OPTS -Djava.io.tmpdir=/home/cassandra/tmp"
답변2
또한 파일에 TMPDIR 환경 변수를 추가해야 했습니다 cassandra-env.sh
. 예를 들어:
TMPDIR=/home/cassandra/tmp 내보내기