docker - Elasticsearch 不断丢失索引
问题描述
我在 Docker 容器中拥有简单的 Elasticsearch 数据库和 Kibana。问题是,尽管容器一直在运行,但我反复丢失了所有索引,从而丢失了所有数据。我被迫重新插入所有这些,但一天后它又消失了。我已经尝试过单节点和多节点集群,增加内存限制,升级图像等。如何防止这种情况?这是我当前的 docker-compose 文件:
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" }
解决方案
如果您注意到下面的消息,它看起来像是在您的集群中定义了一些策略,正在删除过期的数据(您需要弄清楚这个过期时间是什么)。
{“类型”:“服务器”,“时间戳”:“2020-11-20T02:13:00,006Z”,“级别”:“INFO”,“组件”:“oexmaTransportDeleteExpiredDataAction”,“cluster.name”:“es -docker-cluster”、“node.name”:“es01”、“message”:“删除过期数据”、“cluster.uuid”:“B76EHJrlTzG80_NuQFjCqQ”、“node.id”:“oCU5GS2xStSf4q7IPtdcTA”}
但请检查您的ILM是否正在删除索引。
推荐阅读
- sass - 热模块更换在包裹捆绑器中不起作用
- reactjs - React useEffect 尝试同时设置 Object
- flutter - 当我尝试运行调试时,屏幕上没有显示任何内容
- docker - Nginx 容器无法启动 - 在“启动工作进程”时挂起
- doppler - 为什么回声在多普勒中不起作用但 printenv 工作正常?
- python - 多元 xgboost 时间序列
- openiddict - id 令牌上的令牌加密
- ios - 应用程序图标出现几秒钟,然后变为空白
- c - 如何在每行代码之后检查其主体内的 While 循环“条件”?
- sql - 循环遍历 SQL 表,根据另一个表的数据创建一个新表