Recipiente ElasticSearch no CoreOS com armazenamento persistente

1

Estou tentando executar um cluster ElasticSearch no Docker e CoreOS [stable] em DigitalOcean. Para manter o armazenamento persistente em funcionamento, tentei praticamente todas as opções e fiquei sem ideias.

Praticamente todas as opções --volume ( -v /data/elasticsearch , -v $(pwd)/esdata:/data/elasticsearch , ...) são ignoradas e nos logs ele diz using [1] data paths, mounts [[/usr/share/elasticsearch/data (/dev/vda9)]] .

Apenas quando uso -v /usr/share/elasticsearch/data:/data/elasticsearch , recebo um erro dizendo que não é possível gravar em um sistema de arquivos somente leitura.

O que estou fazendo de errado?

O elasticsearch.service completo é:

[Unit]
Description=ElasticSearch service
After=docker.service
Requires=docker.service

[Service]
TimeoutSec=180
EnvironmentFile=/etc/environment

ExecStartPre=/usr/bin/mkdir -p /data/elasticsearch
ExecStartPre=/usr/bin/docker pull elasticsearch

ExecStart=/bin/bash -c '\
  curl -f ${COREOS_PRIVATE_IPV4}:4001/v2/keys/services/elasticsearch; \
  if [ "$?" = "0" ]; then \
      UNICAST_HOSTS=$(etcdctl ls --recursive /services/elasticsearch \
                      | sed "s/\/services\/elasticsearch\///g" \
                      | sed "s/$/:9300/" \
                      | paste -s -d","); \
  else \
      UNICAST_HOSTS=""; \
  fi; \
  /usr/bin/docker run \
    -v /data/elasticsearch \
    --name %p-%i \
    --net=host \
    elasticsearch \
    --node.name=%p-%i \
    --cluster.name=mysearchcluster \
    --network.publish_host=${COREOS_PRIVATE_IPV4} \
    --discovery.zen.ping.multicast.enabled=false \
    --discovery.zen.ping.unicast.hosts=$UNICAST_HOSTS'

ExecStop=/usr/bin/docker stop %p-%i
ExecStop=/usr/bin/docker rm %p-%i

[X-Fleet]
X-Conflicts=%p@*.service
    
por Patrick 25.01.2016 / 19:36

1 resposta

0

Rodando em um único nó, o ElasticSearch não colocou nada em / data / elasticsearch. No momento em que implantei vários nós, havia dados e parece persistente. O arquivo final de serviço:

[Unit]
Description=ElasticSearch service
After=docker.service
Requires=docker.service

[Service]
TimeoutSec=180
EnvironmentFile=/etc/environment

ExecStartPre=/usr/bin/mkdir -p /data/elasticsearch
ExecStartPre=/usr/bin/docker pull elasticsearch

ExecStart=/bin/bash -c '\
  curl -f ${COREOS_PRIVATE_IPV4}:4001/v2/keys/services/elasticsearch; \
  if [ "$?" = "0" ]; then \
      UNICAST_HOSTS=$(etcdctl ls --recursive /services/elasticsearch \
                      | sed "s/\/services\/elasticsearch\///g" \
                      | sed "s/$/:9300/" \
                      | paste -s -d","); \
  else \
      UNICAST_HOSTS=""; \
  fi; \
  /usr/bin/docker run \
    --volume /data/elasticsearch:/usr/share/elasticsearch/data \
    --name %p-%i \
    --net=host \
    elasticsearch \
    --node.name=%p-%i \
    --cluster.name=myescluster \
    --network.publish_host=${COREOS_PRIVATE_IPV4} \
    --discovery.zen.ping.multicast.enabled=false \
    --discovery.zen.ping.unicast.hosts=$UNICAST_HOSTS'

ExecStop=/usr/bin/docker stop %p-%i
ExecStop=/usr/bin/docker rm %p-%i

[X-Fleet]
X-Conflicts=%p@*.service
    
por 26.01.2016 / 09:50