Elasticsearch는 인덱스 손실을 유지합니다
Docker 컨테이너에 Kibana와 함께 간단한 Elasticsearch 데이터베이스가 있습니다. 문제는 컨테이너가 계속 실행되지만 모든 인덱스와 모든 데이터가 반복적으로 손실된다는 것입니다. 모두 다시 삽입해야하는데 하루가 지나면 다시 사라집니다. 단일 및 다중 노드 클러스터, 메모리 제한 증가, 이미지 업그레이드 등을 모두 시도했습니다.이를 방지하는 방법은 무엇입니까? 다음은 현재 도커 작성 파일입니다.
version: '2.2'
services:
kibana:
image: docker.elastic.co/kibana/kibana:7.10.0
depends_on:
- es01
- es02
- es03
links:
- "es01:elasticsearch"
ports:
- "5601:5601"
networks:
- elastic
es01:
image: docker.elastic.co/elasticsearch/elasticsearch:7.10.0
container_name: es01
environment:
- node.name=es01
- cluster.name=es-docker-cluster
- discovery.seed_hosts=es02,es03
- cluster.initial_master_nodes=es01,es02,es03
- bootstrap.memory_lock=true
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
ulimits:
memlock:
soft: -1
hard: -1
volumes:
- data01:/usr/share/elasticsearch/data
ports:
- 9200:9200
networks:
- elastic
es02:
image: docker.elastic.co/elasticsearch/elasticsearch:7.10.0
container_name: es02
environment:
- node.name=es02
- cluster.name=es-docker-cluster
- discovery.seed_hosts=es01,es03
- cluster.initial_master_nodes=es01,es02,es03
- bootstrap.memory_lock=true
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
ulimits:
memlock:
soft: -1
hard: -1
volumes:
- data02:/usr/share/elasticsearch/data
networks:
- elastic
es03:
image: docker.elastic.co/elasticsearch/elasticsearch:7.10.0
container_name: es03
environment:
- node.name=es03
- cluster.name=es-docker-cluster
- discovery.seed_hosts=es01,es02
- cluster.initial_master_nodes=es01,es02,es03
- bootstrap.memory_lock=true
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
ulimits:
memlock:
soft: -1
hard: -1
volumes:
- data03:/usr/share/elasticsearch/data
networks:
- elastic
volumes:
data01:
driver: local
data02:
driver: local
data03:
driver: local
networks:
elastic:
driver: bridge
로그에서 다음과 같은 것을 발견했습니다.
fatal error in thread [main], exiting
java.lang.ExceptionInInitializerError
at org.elasticsearch.node.Node.<init>(Node.java:637)
at org.elasticsearch.node.Node.<init>(Node.java:289)
at org.elasticsearch.bootstrap.Bootstrap$5.<init>(Bootstrap.java:227)
at org.elasticsearch.bootstrap.Bootstrap.setup(Bootstrap.java:227)
at org.elasticsearch.bootstrap.Bootstrap.init(Bootstrap.java:393)
at org.elasticsearch.bootstrap.Elasticsearch.init(Elasticsearch.java:170)
at org.elasticsearch.bootstrap.Elasticsearch.execute(Elasticsearch.java:161)
at org.elasticsearch.cli.EnvironmentAwareCommand.execute(EnvironmentAwareCommand.java:86)
at org.elasticsearch.cli.Command.mainWithoutErrorHandling(Command.java:127)
at org.elasticsearch.cli.Command.main(Command.java:90)
at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:126)
at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:92)
Caused by: java.security.AccessControlException: access denied ("java.lang.RuntimePermission" "getClassLoader")
at java.base/java.security.AccessControlContext.checkPermission(AccessControlContext.java:472)
at java.base/java.security.AccessController.checkPermission(AccessController.java:1036)
at java.base/java.lang.SecurityManager.checkPermission(SecurityManager.java:408)
at java.base/java.lang.ClassLoader.checkClassLoaderPermission(ClassLoader.java:2068)
at java.base/java.lang.ClassLoader.getParent(ClassLoader.java:1815)
at org.apache.logging.log4j.core.selector.ClassLoaderContextSelector.locateContext(ClassLoaderContextSelector.java:114)
at org.apache.logging.log4j.core.selector.ClassLoaderContextSelector.getContext(ClassLoaderContextSelector.java:70)
at org.apache.logging.log4j.core.selector.ClassLoaderContextSelector.getContext(ClassLoaderContextSelector.java:57)
at org.apache.logging.log4j.core.impl.Log4jContextFactory.getContext(Log4jContextFactory.java:148)
at org.apache.logging.log4j.core.impl.Log4jContextFactory.getContext(Log4jContextFactory.java:45)
at org.apache.logging.log4j.LogManager.getContext(LogManager.java:194)
at org.apache.logging.log4j.LogManager.getLogger(LogManager.java:581)
at org.elasticsearch.persistent.PersistentTasksService.<clinit>(PersistentTasksService.java:49)
... 12 more
{"type": "server", "timestamp": "2020-11-20T02:13:00,006Z", "level": "INFO", "component": "o.e.x.m.a.TransportDeleteExpiredDataAction", "cluster.name": "es-docker-cluster", "node.name": "es01", "message": "Deleting expired data", "cluster.uuid": "B76EHJrlTzG80_NuQFjCqQ", "node.id": "oCU5GS2xStSf4q7IPtdcTA" }
답변
아래 메시지가 표시되면 만료 된 데이터를 삭제하는 클러스터에 일부 정책이 정의되어있는 것 같습니다 (이 만료 기간은 무엇인지 알아 내야합니다).
{ "type": "server", "timestamp": "2020-11-20T02 : 13 : 00,006Z", "level": "INFO", "component": "oexmaTransportDeleteExpiredDataAction", "cluster.name": "es -docker-cluster ","node.name ":"es01 ","message ":"만료 된 데이터 삭제 ","cluster.uuid ":"B76EHJrlTzG80_NuQFjCqQ ","node.id ":"oCU5GS2xStSf4q7IPtdcTA "}
그러나 인덱스를 삭제하는 ILM 인지 확인하십시오 .
정책에 어려움을 겪은 후 악의적 인 봇의 표적이 된 것으로 밝혀졌습니다. 이는 몸값 요구가있는 read_me 파일을 남겼습니다. API는 공개적으로 액세스 할 수 있으므로 쉬운 대상이었습니다.