Docker compose + image elasticsearch:6.8.0的问题

0dxa2lsx  于 2023-06-29  发布在  ElasticSearch
关注(0)|答案(3)|浏览(139)

我试图从我的弹性映像将版本从5.6升级到6.8.0,但是当我运行ddev start时,ES容器没有启动。

elasticsearch服务的DDEV日志

OpenJDK 64-Bit Server VM warning: Option UseConcMarkSweepGC was deprecated in version 9.0 and will likely be removed in a future release.
OpenJDK 64-Bit Server VM warning: UseAVX=2 is not supported on this CPU, setting it to UseAVX=1
[2020-02-28T21:32:29,269][WARN ][o.e.b.ElasticsearchUncaughtExceptionHandler] [unknown] uncaught exception in thread [main]
org.elasticsearch.bootstrap.StartupException: java.lang.IllegalStateException: failed to obtain node locks, tried [[/usr/share/elasticsearch/data]] 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.bootstrap.Elasticsearch.init(Elasticsearch.java:163) ~[elasticsearch-6.8.0.jar:6.8.0]
    at org.elasticsearch.bootstrap.Elasticsearch.execute(Elasticsearch.java:150) ~[elasticsearch-6.8.0.jar:6.8.0]
    at org.elasticsearch.cli.EnvironmentAwareCommand.execute(EnvironmentAwareCommand.java:86) ~[elasticsearch-6.8.0.jar:6.8.0]
    at org.elasticsearch.cli.Command.mainWithoutErrorHandling(Command.java:124) ~[elasticsearch-cli-6.8.0.jar:6.8.0]
    at org.elasticsearch.cli.Command.main(Command.java:90) ~[elasticsearch-cli-6.8.0.jar:6.8.0]
    at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:116) ~[elasticsearch-6.8.0.jar:6.8.0]
    at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:93) ~[elasticsearch-6.8.0.jar:6.8.0]
Caused by: java.lang.IllegalStateException: failed to obtain node locks, tried [[/usr/share/elasticsearch/data]] with lock id [0]; maybe these locations are not writable or multiple nodes were started without increasing [node.max_local_storage_nodes] (was [1])?

另外,我不能使用mem_limit参数,因为我使用的是最新的3.0版本。
docker-compose.elasticsearch.yaml

version: '3.6'
services:
  elasticsearch:
    container_name: ddev-${DDEV_SITENAME}-elasticsearch
    hostname: ${DDEV_SITENAME}-elasticsearch
    image: elasticsearch:6.8.0
    ports:
      - "9200"
      - "9300"
    environment:
      - cluster.name=docker-cluster
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
      - VIRTUAL_HOST=$DDEV_HOSTNAME
      - HTTP_EXPOSE=9200
    ulimits:
      memlock:
        soft: -1
        hard: -1
    labels:
      com.ddev.site-name: ${DDEV_SITENAME}
      com.ddev.approot: $DDEV_APPROOT
    volumes:
      - elasticsearch:/usr/share/elasticsearch/data
      - ".:/mnt/ddev_config"
  web:
    links:
      - elasticsearch:elasticsearch

volumes:
  elasticsearch:
    name: "${DDEV_SITENAME}-elasticsearch"

我做错了什么,或者还缺少了什么?
更新
我已经根据这里发布的一个解决方案尝试了以下解决方案

version: '3.6'
services:
  elasticsearch:
    container_name: ddev-${DDEV_SITENAME}-elasticsearch
    hostname: ${DDEV_SITENAME}-elasticsearch
    image: elasticsearch:6.8.0
    ports:
      - "9200"
      - "9300"
    environment:
      - cluster.name=docker-cluster
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xmx1024m -Xms1024m"
      - VIRTUAL_HOST=$DDEV_HOSTNAME
      - HTTP_EXPOSE=9200
      - node.max_local_storage_nodes=3
    ulimits:
      memlock:
        soft: -1
        hard: -1
    labels:
      com.ddev.site-name: ${DDEV_SITENAME}
      com.ddev.approot: $DDEV_APPROOT
    volumes:
      - elasticsearch:/usr/share/elasticsearch/data
      - ".:/mnt/ddev_config"
  web:
    links:
      - elasticsearch:elasticsearch

volumes:
  elasticsearch:
    name: "${DDEV_SITENAME}-elasticsearch"

但现在,抛出以下错误:

chhqkbe1

chhqkbe11#

我刚刚在我的ubuntu AWS示例上安装ES 7. 6时遇到了同样的问题,该示例已经安装了另一个ES版本。如果你仔细看看你的错误消息的结尾,它提到:
原因:java.lang.IllegalStateException:无法获取节点锁,尝试/usr/share/elasticsearch/data,锁ID为[0];可能这些位置不可写,或者在未增加[node.max_local_storage_nodes](was [1])的情况下启动了多个节点?
有关此设置的更多详细信息,请参阅官方ES文档。

要解决此问题,需要在elasticsearch.yml文件中将node.max_local_storage_nodes设置为大于1。

有关该错误的更多信息,请参阅org.elasticsearch.env.NodeEnvironment#NodeEnvironment方法中的Elasticsearch源代码。

if (nodeLock == null) {
    final String message = String.format(
        Locale.ROOT,
        "failed to obtain node locks, tried [%s] with lock id%s;" +
            " maybe these locations are not writable or multiple nodes were started without increasing [%s] (was [%d])?",
        Arrays.toString(environment.dataFiles()),
        maxLocalStorageNodes == 1 ? " [0]" : "s [0--" + (maxLocalStorageNodes - 1) + "]",
        MAX_LOCAL_STORAGE_NODES_SETTING.getKey(),
        maxLocalStorageNodes);
    throw new IllegalStateException(message, lastException);
}
oknrviil

oknrviil2#

我也有同样的问题,对我有效的解决方案是完全删除承载elasticsearch数据的卷。它将删除node.lock和整个索引,但您可以重新创建它。

fnvucqvd

fnvucqvd3#

对我有用的是更改卷名,在下面的docker-compose.elasticsearch.yaml中标记volumes.elasticsearch6(两次):

version: '3.6'
services:
  elasticsearch:
    container_name: ddev-${DDEV_SITENAME}-elasticsearch
    hostname: ${DDEV_SITENAME}-elasticsearch
    image: elasticsearch:6.8.23
    expose:
      - "9200"
      - "9300"
    environment:
      - cluster.name=docker-cluster
      - discovery.type=single-node
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
      - VIRTUAL_HOST=$DDEV_HOSTNAME
      - HTTP_EXPOSE=9200:9200
      - HTTPS_EXPOSE=9201:9200
    labels:
      com.ddev.site-name: ${DDEV_SITENAME}
      com.ddev.approot: $DDEV_APPROOT
    volumes:
      - elasticsearch6:/usr/share/elasticsearch/data
      - ".:/mnt/ddev  _config"
    healthcheck:
      test: ["CMD-SHELL", "curl --fail -s localhost:9200"]

volumes:
  elasticsearch6:

相关问题