Vagrant up時にcurlすると"connection refused"になってしまう。


(奥寺 政貴) #1

お世話になります。

vagrantでelasticsearchをインストールして、curlでJSONを投げてindexを作成するところまでを行おうとしているのですが、

curl -X PUT http://192.168.33.20:9200/test --data-binary @/synced_folder/schema.json

とcurlでindexを作成しようとすると、"connection refused"エラーが発生してしまいます。

原因が推測できる方がいらっしゃったら、助けて頂けますと幸いです。

[各ソフトウェアのバージョン]
Centos7.1
Java8
Elasticsearch 2.2.0
Vagrant 1.7.2

以下、ファイルの内容です。

[Vagrantfile]

VAGRANTFILE_API_VERSION = "2"
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
 config.vm.box = "bento/centos-7.1"
 config.vm.box_url = "https://atlas.hashicorp.com/bento/boxes/centos-7.1"
 config.vm.network :private_network, ip: "192.168.33.20"
 config.vm.synced_folder "./", "/synced_folder"
 config.vm.provision "shell", path: "./script.sh"
end

[script.sh]

#!/bin/sh

systemctl disable firewalld
yum -y install nmap

#install java
yum -y install java

#install and start elasticsearch
rpm --import https://packages.elastic.co/GPG-KEY-elasticsearch
cp /synced_folder/elasticsearch.repo /etc/yum.repos.d
yum -y install elasticsearch
sed -i '/# network.host: 192.168.0.1/a\network.host: 192.168.33.20' /etc/elasticsearch/elasticsearch.yml
cd /usr/share/elasticsearch
bin/plugin install analysis-kuromoji
service elasticsearch start

#configure index 
# ここでconnection refusedが発生
curl -X PUT http://192.168.33.20:9200/test --data-binary @/synced_folder/schema.json
nmap 192.168.33.20

[/synced_folder/schema.json]

{"mappings":{"comment_data":{"properties":{"comment":{"type":"string","store":"yes","index":"analyzed"},"date":{"type":"date","store":"yes"},"vps":{"type":"float","store":"yes"}}}}}

尚、"vagrant up"が完了してから、sshでゲストOSにログインして

curl -X PUT http://192.168.33.20:9200/test --data-binary @/synced_folder/schema.json

を手で実行すると、なぜかその場合は正常にインデックスが作成されます。

しかし、やはりvagrant upの起動プロセスの中でインデックスの作成までを行いたいと思っています。

これまでに調べた事としては、
・firewalldを無効化する。

systemctl disable firewalld

でfirewalldを無効化してみました。最初はこれが原因かと思ったのですが、違ったようです。

・nmapで192.168.33.20:9200を調査

nmap 192.168.33.20:9200

で空いているportを調査しました。
この結果、"vagrant up"の実行中は22ポートしか空いておらず、9200ポートは空いていない事が判明しました。

・httpdには正常にアクセスできる。
Elasticsearchの問題ではなく、Vagrantのport forwardの設定の方に問題がある可能性もあると思い、apacheサーバーもインストールして試してみたのですが、こちらでは"connection refused"は発生せず、正常にアクセスできました。
従って、Elasticsearchの設定に問題があるのではと考えています。

どうぞよろしくお願い致します。


(Jun Ohtani) #2

'service elasticsearch start'のコマンド自体は、起動しましたと帰ってくるけど、
Javaのプロセスや実際の起動までに時間がかかっているとかはないでしょうか?


(奥寺 政貴) #3

Jun Ohtaniさん

ありがとうございます!

ご指摘の通り、起動するまでのタイムラグが原因でした。
以下のように待機処理を追加することで、うまくいきました。

while true;
do
echo "waiting Elasticsearch..."
curl -X -s GET http://192.168.33.20:9200
if [ $? -eq "0" ]; then
echo "Elasticsearch started!"
break
fi
sleep 1s
done

大変助かりました。
ありがとうございました!


(system) #4