2019년 8월 26일 월요일

엘라스틱 노드 에러(node.max_local_storage_nodes)

엘라스틱은 한 컴퓨터에서 둘 이상의 노드를 굴릴 수 있다. 이때 인덱스 저장 경로를 노드끼리 공유하려면 node.max_local_storage_nodes 옵션값을 2이상, 최소 노드 개수만큼 줘야함. 하지만 윈도우 기본 인덱스 저장 경로는 'elasticsearch\data\node'.


압축 파일 설치 시 기본 인덱스 저장 경로가 설치 경로 따라 달라지기 때문에 노드를 둘 이상 굴려도 별도 설정이 필요 없다.


리눅스 역시 RPM 설치 시 기본 인덱스 저장 경로(/var/lib/elasticsearch)가 설치 경로와 다르다. 또한 RPM 중복 설치는 안 되기 때문에 노드 추가는 불가.

설정 및 실행 파일 경로
인덱스 저장 경로

문제는 삭제 및 재설치 과정에서 발생한다. 다음은 기존 노드 삭제 후 설치한 신규 노드 실행 과정에서 발생한 에러.
[2019-08-09T00:50:57,034][ERROR][o.e.b.Bootstrap          ] [Centos7] Exception
java.lang.IllegalStateException: failed to obtain node locks, tried [[/var/lib/elasticsearch]] with lock id [0]; maybe these locations are not writable or multiple nodes were started without increasing [node.max_local_storage_nodes] (was [1])?
 at org.elasticsearch.env.NodeEnvironment.<init>(NodeEnvironment.java:299) ~[elasticsearch-7.3.0.jar:7.3.0]
 at org.elasticsearch.node.Node.<init>(Node.java:278) ~[elasticsearch-7.3.0.jar:7.3.0]
 at org.elasticsearch.node.Node.<init>(Node.java:258) ~[elasticsearch-7.3.0.jar:7.3.0]
 at org.elasticsearch.bootstrap.Bootstrap$5.<init>(Bootstrap.java:221) ~[elasticsearch-7.3.0.jar:7.3.0]
 at org.elasticsearch.bootstrap.Bootstrap.setup(Bootstrap.java:221) ~[elasticsearch-7.3.0.jar:7.3.0]
 at org.elasticsearch.bootstrap.Bootstrap.init(Bootstrap.java:349) [elasticsearch-7.3.0.jar:7.3.0]
 at org.elasticsearch.bootstrap.Elasticsearch.init(Elasticsearch.java:159) [elasticsearch-7.3.0.jar:7.3.0]
 at org.elasticsearch.bootstrap.Elasticsearch.execute(Elasticsearch.java:150) [elasticsearch-7.3.0.jar:7.3.0]
 at org.elasticsearch.cli.EnvironmentAwareCommand.execute(EnvironmentAwareCommand.java:86) [elasticsearch-7.3.0.jar:7.3.0]
 at org.elasticsearch.cli.Command.mainWithoutErrorHandling(Command.java:124) [elasticsearch-cli-7.3.0.jar:7.3.0]
 at org.elasticsearch.cli.Command.main(Command.java:90) [elasticsearch-cli-7.3.0.jar:7.3.0]
 at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:115) [elasticsearch-7.3.0.jar:7.3.0]
 at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:92) [elasticsearch-7.3.0.jar:7.3.0]
Caused by: java.io.IOException: failed to obtain lock on /var/lib/elasticsearch/nodes/0

기존 노드가 사용하던 인덱스 저장 경로를 신규 노드가 쓸 수 없다고 하는 모양. 기존 노드를 삭제해도 설정 및 실행 파일 경로만 삭제되고 인덱스 저장 경로는 남아서 발생하는 문제인 듯.

node.max_local_storage_nodes 설정을 추가하면 해결되는데, 그냥 깔끔하게 '/var/lib/elasticsearch' 경로 삭제 후 재설치 추천. 근데 버전 7부터 이 설정 안 쓴다고 한다. 한 컴퓨터에서 노드 둘 이상 굴리지 말라는 얘기인가?

22.08.02

댓글 없음:

댓글 쓰기

크리에이티브 커먼즈 라이선스