如何在CoreOS上运行Elasticsearch?

时间:2015-03-17 10:04:52

标签: elasticsearch coreos

我有一台带有三台服务器的CoreOS集群(在Digital Ocean上),此时正在运行MongoDB。现在我想在1个副本上启动Elasticsearch(不使用Mongo河)。

我按照here概述的说明进行了操作。

导致两项服务elasticsearch@.service& elasticsearch-discovery@.service

elasticsearch@.service

[Unit]
Description=ElasticSearch service
After=etcd.service
After=docker.service
Before=elasticsearch-discovery@%i.service

Requires=elasticsearch-discovery@%i.service

[Service]
KillMode=none
TimeoutStartSec=0
TimeoutStopSec=360
EnvironmentFile=/etc/environment

ExecStartPre=-/usr/bin/docker kill %p-%i
ExecStartPre=-/usr/bin/docker rm %p-%i
ExecStartPre=-/usr/bin/bash -c "echo PreKill and rm done;"
ExecStartPre=/usr/bin/mkdir -p /data/elasticsearch
ExecStartPre=/usr/bin/docker pull dockerfile/elasticsearch
ExecStartPre=/usr/bin/bash -c "echo mkdir and docker pull done;"

ExecStart=/bin/bash -c "\
    echo StartingUp; \
    curl -f ${COREOS_PUBLIC_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 ','); \
        echo Key found; \
    else \
        UNICAST_HOSTS=''; \
        echo No Key found; \
    fi;"
ExecStartPost=/bin/bash -c "\
    echo Starting Docker; \
    /usr/bin/docker run \
      --name %p-%i \
      --publish 9200:9200 \
      --publish 9300:9300 \
      --volume /data/elasticsearch:/data \
      dockerfile/elasticsearch \
      /elasticsearch/bin/elasticsearch \
        --node.name=%p-%i \
        --cluster.name=nvssearch \
        --network.publish_host=${COREOS_PUBLIC_IPV4} \
        --discovery.zen.ping.multicast.enabled=false \
        --discovery.zen.ping.unicast.hosts=$UNICAST_HOSTS;"

ExecStop=/bin/bash/ -c "/usr/bin/docker kill %p-%i"

Restart=on-failure

[X-Fleet]
X-Conflicts=%p@*.service

elasticsearch-discovery@.service

[Unit]
Description=ElasticSearch discovery service
BindsTo=elasticsearch@%i.service

After=elasticsearch@%i.service

[Service]
EnvironmentFile=/etc/environment

ExecStart=/bin/bash -c '\
    while true; do \
        curl -f ${COREOS_PUBLIC_IPV4}:9200; \
        if [ "$?" = "0" ]; then \
            etcdctl set /services/elasticsearch/${COREOS_PUBLIC_IPV4} \ '{"http_port": 9200, "transport_port": 9300}\' --ttl 60; \
        else \
            etcdctl rm /services/elasticsearch/${COREOS_PUBLIC_IPV4}; \
        fi; \
        sleep 45; \
    done'

ExecStop=/usr/bin.etcdctl rm /services/elasticsearch/${COREOS_PUBLIC_IPV4}

[X-Fleet]
X-ConditionMachineOf=elasticsearch@%i.service

但是如果我尝试运行服务(fleetctl submit / load / start elasticsearch@1.service),它会立即死掉:

elasticsearch@1.service     475f6273.../IP  inactive    dead

运行fleetctl journal elasticsearch@1会产生以下消息:

Mar 17 09:17:04 nvs-1 systemd[1]: Stopped ElasticSearch service.

这就是全部,没有显示我(或服务)添加的回声。任何关于如何让我更进一步的想法?

2 个答案:

答案 0 :(得分:0)

获得Elasticsearch running with Weave稍微简单一些。我的博客文章展示了如何在Vagrant上运行它,但是将相同的设置移动到云应该非常简单。

答案 1 :(得分:0)

我跟着你做的同一篇文章,遇到了同样的问题。我将其跟踪到Docker容器不再可用,因此我更改了elasticsearch@service单元中的docker run命令:

[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 \
    --rm \
    --name %p-%i \
    --publish 9200:9200 \
    --publish 9300:9300 \
    --volume /data/elasticsearch:/data \
    elasticsearch \
    --node.name=%p-%i \
    --cluster.name=logstash \
    --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

除此之外,我认为,在您的原始帖子中,您错过了一些引号,双引号并且有一些错误的空格。

这是我目前的弹性发现@服务供参考:

[Unit]
Description=ElasticSearch discovery service
BindsTo=elasticsearch@%i.service

[Service]
EnvironmentFile=/etc/environment

ExecStart=/bin/bash -c '\
  while true; do \
    curl -f ${COREOS_PRIVATE_IPV4}:9200; \
    if [ "$?" = "0" ]; then \
      etcdctl set /services/elasticsearch/${COREOS_PRIVATE_IPV4} \'{"http_port": 9200, "transport_port": 9300}\' --ttl 60; \
    else \
      etcdctl rm /services/elasticsearch/${COREOS_PRIVATE_IPV4}; \
    fi; \
    sleep 45; \
  done'

ExecStop=/usr/bin/etcdctl rm /services/elasticsearch/${COREOS_PRIVATE_IPV4}

[X-Fleet]
X-ConditionMachineOf=elasticsearch@%i.service