추가 케이스 - 흔한 설치 실패 재현·해결 (약 15분)
실패를 일부러 만들어 증상과 해결을 익힙니다. 세 케이스 모두 실제로 재현되는 것만 담았습니다. 각 케이스는 먼저 Elasticsearch를 내린 뒤 진행합니다.
kill $(cat /tmp/es.pid)
until ! curl -sf -o /dev/null http://127.0.0.1:9200; do sleep 2; done
재현할 때는 화면에서 오류를 바로 보기 위해 -d 없이 앞단에서 기동합니다(Ctrl+C로 중단).
sudo -u elasticsearch env ES_PATH_CONF=/etc/elasticsearch \
/usr/share/elasticsearch/bin/elasticsearch
케이스 1 - 힙을 너무 작게 잡음
- 재현:
printf -- "-Xms64m\n-Xmx64m\n" > /etc/elasticsearch/jvm.options.d/heap.options후 기동. - 증상:
java.lang.OutOfMemoryError: Java heap space로 기동 도중 종료. - 진단: 기동 로그 마지막 줄에 OutOfMemoryError가 그대로 찍힙니다.
- 해결:
printf -- "-Xms1g\n-Xmx1g\n" > /etc/elasticsearch/jvm.options.d/heap.options로 되돌립니다. - 함께 알아둘 것: 반대로 호스트 메모리보다 크게(예
-Xms16g) 잡으면 오류 없이 기동이 끝나지 않고 멈춥니다. 힙은 호스트 여유의 절반 이하로, 최소=최대로 잡습니다.
케이스 2 - 설정 파일에 같은 키가 두 번
- 재현: C-2의
sed삭제를 건너뛴 상태를 흉내 냅니다.echo "xpack.security.enabled: true" >> /etc/elasticsearch/elasticsearch.yml후 기동. - 증상: 기동 즉시 실패.
SettingsException: Failed to load settings from [elasticsearch.yml]Caused by: XContentParseException: [96:23] Duplicate field 'xpack.security.enabled' - 진단: 오류 메시지의
[줄:칸]이 중복된 위치를 그대로 알려 줍니다. - 해결: 중복된 줄을 지웁니다.
sed -i '$d' /etc/elasticsearch/elasticsearch.yml
케이스 3 - 이미 떠 있는데 또 기동
- 재현: Elasticsearch가 떠 있는 상태에서 기동 명령을 한 번 더 실행합니다.
- 증상:
failed to obtain node locks, tried [/var/lib/elasticsearch]/LockObtainFailedException: Lock held by another program: /var/lib/elasticsearch/node.lock - 진단: 같은 데이터 경로를 두 프로세스가 함께 쓸 수 없습니다.
ps -ef | grep [e]lasticsearch로 이미 떠 있는지 확인합니다. - 해결: 중복 실행을 하지 않습니다. 다시 띄워야 하면
kill $(cat /tmp/es.pid)로 내린 뒤 기동합니다.
케이스를 마치면 정상 상태로 되돌리고 확인합니다.
sudo -u elasticsearch env ES_PATH_CONF=/etc/elasticsearch \
/usr/share/elasticsearch/bin/elasticsearch -d -p /tmp/es.pid > /dev/null 2>&1
until curl -sf -o /dev/null http://127.0.0.1:9200/_cluster/health; do sleep 3; done
curl -s "http://127.0.0.1:9200/_cat/indices/logs-*?h=index,docs.count&s=index"