Cassandra tmpdir 위치 변경

Cassandra tmpdir 위치 변경

/tmpCassandra가 다음과 같이 설정 되면 시작되지 않습니다 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 내보내기

관련 정보