2015-10-31 9 views
8

से Vagrant VM में Elasticsearch 2.0 तक नहीं पहुंच सकता है। मैं Elasticsearch 2.0 को ऊपर और एक Vagrant VM में चलाने की कोशिश कर रहा हूं। जिस विधि का मैं 1.7 के लिए उपयोग कर रहा था, अब काम नहीं करता है, इसलिए मैं अपनी विधि को अपडेट करने का प्रयास कर रहा हूं। मैं वीएम में ईएस 2.0 स्थापित कर सकता हूं, और ऐसा लगता है कि वीएम के भीतर से ठीक काम करता है, लेकिन मैं इसे वीएम के बाहर से नहीं एक्सेस कर सकता। ऐसा लगता है कि वीएम कुछ कारणों से पोर्ट-फॉरवर्डिंग पोर्ट 9200 नहीं है, भले ही मैं इसे कह रहा हूं। तो मैं यह पता लगाने की कोशिश कर रहा हूं कि मैं क्या गलत कर रहा हूं।होस्ट ओएस

को देखते हुए इस Vagrantfile:

Vagrant.configure(2) do |config| 

    config.vm.box = "hashicorp/precise64" 
    config.vm.hostname = "ES-2.0.0" 
    config.vm.provision :shell, path: "bootstrap.sh" 
    config.vm.network :forwarded_port, host: 9200, guest: 9200 
    config.vm.synced_folder "/Users/sloan/code", "/srv/code" 

    config.vm.provider "virtualbox" do |v| 
    v.memory = 2048 
    v.cpus = 1 
    v.name = config.vm.hostname.to_s 
    end 

end 

मेरे पुराने bootstrap.sh ठीक काम करता है:

#!/usr/bin/env bash 

sudo apt-get update 
sudo apt-get upgrade 

# install openjdk-7 
sudo apt-get purge openjdk* 
sudo apt-get -y install openjdk-7-jdk 

# install curl 
sudo apt-get -y install curl 

# install Elasticsearch 1.7.3 
wget https://download.elastic.co/elasticsearch/elasticsearch/elasticsearch-1.7.3.tar.gz -O elasticsearch.tar.gz 
tar -xf elasticsearch.tar.gz 
rm elasticsearch.tar.gz 
sudo mv elasticsearch-* elasticsearch 
sudo mv elasticsearch /usr/local/share 

# set up ES as service 
curl -L http://github.com/elasticsearch/elasticsearch-servicewrapper/tarball/master | tar -xz 
sudo mv *servicewrapper*/service /usr/local/share/elasticsearch/bin/ 
rm -Rf *servicewrapper* 
sudo /usr/local/share/elasticsearch/bin/service/elasticsearch install 
sudo ln -s 'readlink -f /usr/local/share/elasticsearch/bin/service/elasticsearch' /usr/local/bin/rcelasticsearch 

# start ES service 
sudo service elasticsearch start 

# enable cors (to be able to use Sense) 
sudo echo "http.cors.enabled: true" >> /usr/local/share/elasticsearch/config/elasticsearch.yml 
# enable dynamic scripting 
sudo echo "script.disable_dynamic: false" >> /usr/local/share/elasticsearch/config/elasticsearch.yml 

sudo service elasticsearch restart 

मेरा मतलब है कि यह भावना में काम करता है कि, मेजबान ओएस से (ओएस एक्स 10.9.5) मैं ईएस को ठीक कर सकते हैं ठीक है:

es173 > curl localhost:9200 
{ 
    "status" : 200, 
    "name" : "Gibbon", 
    "cluster_name" : "elasticsearch", 
    "version" : { 
    "number" : "1.7.3", 
    "build_hash" : "05d4530971ef0ea46d0f4fa6ee64dbc8df659682", 
    "build_timestamp" : "2015-10-15T09:14:17Z", 
    "build_snapshot" : false, 
    "lucene_version" : "4.10.4" 
    }, 
    "tagline" : "You Know, for Search" 
} 

लेकिन जब मैंके इस नए संस्करण का उपयोग करता हूंजो मैं Elasticsearch दस्तावेजों (हमेशा एक कठिन कार्य) का पालन करने की कोशिश कर द्वारा पकाया:

#!/usr/bin/env bash 

sudo apt-get update 
sudo apt-get upgrade 

# install curl 
sudo apt-get -y install curl 

# install openjdk-7 
sudo apt-get purge openjdk* 
sudo apt-get -y install openjdk-7-jdk 

wget -qO - https://packages.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add - 
echo "deb http://packages.elastic.co/elasticsearch/2.x/debian stable main" | sudo tee -a /etc/apt/sources.list.d/elasticsearch-2.x.list 
sudo apt-get update && sudo apt-get install elasticsearch 

sudo update-rc.d elasticsearch defaults 95 10 
sudo /etc/init.d/elasticsearch start 

# enable cors (to be able to use Sense) 
sudo echo "http.cors.enabled: true" >> /etc/elasticsearch/elasticsearch.yml 
# enable dynamic scripting 
sudo echo "script.disable_dynamic: false" >> /etc/elasticsearch/elasticsearch.yml 

sudo /etc/init.d/elasticsearch restart 

काम नहीं करता है। वी एम के अंदर से, अपेक्षा के अनुरूप curl localhost:9200 काम करता है, लेकिन मेजबान ओएस से मिली:

es200 > curl localhost:9200 
curl: (52) Empty reply from server 

मैं यहाँ क्या याद आ रही है? क्या कोई मुझे बता सकता है कि नया संस्करण पोर्ट अग्रेषण क्यों नहीं है?

+0

मुझे नहीं पता कि ईएस नेटवर्क विशिष्ट कॉन्फ़िगरेशन आपके सेटअप में कैसे है, लेकिन यह पहला होगा जो मैं देखता हूं। चूंकि प्रलेखन में उल्लिखित 2.0 में एक बड़ा परिवर्तन है, जिसका अर्थ यह है: 'वर्तमान में एक लोचदार खोज नोड कई पतों से बाध्य हो सकता है, लेकिन केवल एक प्रकाशित करता है।' यह पहले ऐसा नहीं था। 2.0 में ऐसा करने का एक तरीका 'network.bind_host: 0' सेट करना प्रतीत होता है। –

+0

क्या यह 'elasticsearch.yml' में जाता है? मैंने कोशिश की, ऐसा प्रतीत नहीं होता है। –

+0

मैं कैसे पता लगा सकता हूं कि "ईएस नेटवर्क विशिष्ट विन्यास" मेरे सेटअप में क्या है? '/ Etc/elasticsearch/elasticsearch.yml' में दो (अब तीन) सेटिंग्स जोड़ने के अलावा, मैंने किसी भी तरह से डिफ़ॉल्ट सेटिंग्स को नहीं बदला है। –

उत्तर

8

ES लॉग फ़ाइल (cat /var/log/elasticsearch/elasticsearch.log) की जांच मैंने पाया कि script.disable_dynamic: false चीजों को तोड़ने गया था पर:

[2015-10-31 19:58:54,428][INFO ][node      ] [Yuri Topolov] version[2.0.0], pid[9826], build[de54438/2015-10-22T08:09:48Z] 
[2015-10-31 19:58:54,428][INFO ][node      ] [Yuri Topolov] initializing ... 
[2015-10-31 19:58:54,537][INFO ][plugins     ] [Yuri Topolov] loaded [], sites [] 
[2015-10-31 19:58:54,630][INFO ][env      ] [Yuri Topolov] using [1] data paths, mounts [[/ (/dev/mapper/precise64-root)]], net usable_space [72.3gb], net total_space [78.8gb], spins? [possibly], types [ext4] 
[2015-10-31 19:58:58,668][ERROR][bootstrap    ] Guice Exception: java.lang.IllegalArgumentException: script.disable_dynamic is not a supported setting, replace with fine-grained script settings. 
Dynamic scripts can be enabled for all languages and all operations by replacing `script.disable_dynamic: false` with `script.inline: on` and `script.indexed: on` in elasticsearch.yml 
    at org.elasticsearch.script.ScriptService.<init>(ScriptService.java:146) 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57) 
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) 
    at java.lang.reflect.Constructor.newInstance(Constructor.java:526) 
    at <<<guice>>> 
    at org.elasticsearch.node.Node.<init>(Node.java:198) 
    at org.elasticsearch.node.NodeBuilder.build(NodeBuilder.java:145) 
    at org.elasticsearch.bootstrap.Bootstrap.setup(Bootstrap.java:170) 
    at org.elasticsearch.bootstrap.Bootstrap.init(Bootstrap.java:270) 
    at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:35) 

मैं जोड़ा के बाद मैं अपने समस्या थी की स्थापना है, लेकिन इससे पहले कि मैं शुरू में टिप्पणी में सुझाव की कोशिश की, और तो ईएस असफल रहा था। इस सेटिंग को ठीक करने से मेरी मूल समस्या ठीक नहीं हुई, लेकिन यह समाधान को अस्पष्ट कर रहा था।

#!/usr/bin/env bash 

sudo apt-get update 
sudo apt-get upgrade 

# install curl 
sudo apt-get -y install curl 

# install openjdk-7 
sudo apt-get purge openjdk* 
sudo apt-get -y install openjdk-7-jdk 

# install ES 
wget -qO - https://packages.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add - 
echo "deb http://packages.elastic.co/elasticsearch/2.x/debian stable main" | sudo tee -a /etc/apt/sources.list.d/elasticsearch-2.x.list 
sudo apt-get update && sudo apt-get install elasticsearch 
sudo update-rc.d elasticsearch defaults 95 10 

# either of the next two lines is needed to be able to access "localhost:9200" from the host os 
sudo echo "network.bind_host: 0" >> /etc/elasticsearch/elasticsearch.yml 
sudo echo "network.host: 0.0.0.0" >> /etc/elasticsearch/elasticsearch.yml 

# enable cors (to be able to use Sense) 
sudo echo "http.cors.enabled: true" >> /etc/elasticsearch/elasticsearch.yml 
sudo echo "http.cors.allow-origin: /https?:\/\/localhost(:[0-9]+)?/" >> /etc/elasticsearch/elasticsearch.yml 

# enable dynamic scripting 
sudo echo "script.inline: on" >> /etc/elasticsearch/elasticsearch.yml 
sudo echo "script.indexed: on" >> /etc/elasticsearch/elasticsearch.yml 

sudo /etc/init.d/elasticsearch start 
+0

शायद सभी डोमेन सक्षम कर सकता है और 'http.cors.allow-origin:/https?: \/\ /.*/ ' – keety

+0

हाँ, ठीक है, यह काम करता है। धन्यवाद। –

12

अपने /etc/elasticsearch/elasticsearch.yml विन्यास फाइल में इतना है कि elasticsearchlocalhost के बाहर से पहुंचा है सेट network.host: 0.0.0.0:

वैसे भी, यहाँ bootstrap.sh फ़ाइल है कि मेरे लिए काम कर रहा है। service elasticsearch restart करना याद रखें।

+1

'sudo systemctl द्वारा 'systemd' के साथ elasticsearch पुनरारंभ करें elasticsearch.service' को पुनरारंभ करें। –