Dockerで ElasticSearch クラスターを実行し、DigitalOceanでCoreOS [stable]を実行しようとしています。永続ストレージを機能させるために、私はほとんどすべてのオプションを試し、アイデアを使い果たしました。
ほとんどすべての--volumeオプション(_-v /data/elasticsearch
_、-v $(pwd)/esdata:/data/elasticsearch
、...)は無視され、ログにはusing [1] data paths, mounts [[/usr/share/elasticsearch/data (/dev/vda9)]]
と表示されます。
_-v /usr/share/elasticsearch/data:/data/elasticsearch
_を使用している場合にのみ、読み取り専用ファイルシステムに書き込めないというエラーが表示されます。
私は何が間違っているのですか?
完全なelasticsearch.serviceは次のとおりです。
_[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
_
単一ノードで実行されているElasticSearchは、/ data/elasticsearchに何も入れませんでした。複数のノードをデプロイした瞬間、データがあり、それは永続的であるように見えます。最終的な.serviceファイル:
[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