読者です 読者をやめる 読者になる 読者になる

Ubuntu16でElasticsearch5を構築

以前すでに構築されたものを運用したことはあるけど設計や構築の細か所とか見てなかったので何回かに分けてGetting Started的なものをやってみる。

Vagrantでささっと触れる環境を作る。

bento/ubuntu-16.04 がなければ以下で入る(はず)

$ vagrant box add bento/ubuntu-16.04 --provider virtualbox

./Vagrant ファイル

Vagrant.configure(2) do |config|
  config.vm.box = "bento/ubuntu-16.04"
  config.vm.network "private_network", ip: "192.168.99.11"
  # root権限で ./provision.sh を実行する
  config.vm.provision :shell, :path => "./provision.sh", :privileged => true
end

./provision.sh ファイル

#!/usr/bin/env bash

# JDK
apt-get install -y software-properties-common
add-apt-repository -y ppa:webupd8team/java
apt-get update
## ライセンス許諾のプロンプトが出ないようにする
echo debconf shared/accepted-oracle-license-v1-1 select true | debconf-set-selections
## `oracle-java8-set-default` は環境変数とかを設定してくれるらしい
apt-get install -y oracle-java8-installer oracle-java8-set-default

# Elasticsearch
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | apt-key add -
apt-get install apt-transport-https
echo "deb https://artifacts.elastic.co/packages/5.x/apt stable main" | tee -a /etc/apt/sources.list.d/elastic-5.x.list
apt-get update
apt-get install -y elasticsearch
## デフォルトメモリが2gになってるのでよしなに変更する
sed -i 's/-Xmx2g/-Xmx256m/' /etc/elasticsearch/jvm.options
sed -i 's/-Xms2g/-Xms256m/' /etc/elasticsearch/jvm.options
## デフォルトだとローカルのみなのでどこからでもアクセス出来るようにする(開発用なんで)
sed -i 's/#network.host: 192.168.0.1/network.host: 0.0.0.0/' /etc/elasticsearch/elasticsearch.yml
## Cross-Origin Resource Sharingを有効にする(開発用なんで * で)
echo "http.cors.enabled: true" >> /etc/elasticsearch/elasticsearch.yml
echo "http.cors.allow-origin: \"*\"" >> /etc/elasticsearch/elasticsearch.yml
service elasticsearch start

# Elasticsearch Head
apt-get install -y nodejs npm
npm cache clean
## n を使うとさくっと最新のnodeが入れられる
npm install n -g
n stable
## 紛らわしいので削除しとく
apt-get purge -y nodejs npm
## Elasticserch5からhead pluginが使えなくなったのでStand Aloneサーバを使う
## https://www.elastic.co/jp/blog/running-site-plugins-with-elasticsearch-5-0
git clone git://github.com/mobz/elasticsearch-head.git
cd elasticsearch-head
/usr/local/bin/npm install
chown -R vagrant:vagrant ../elasticsearch-head
su - vagrant -c "cd /home/vagrant/elasticsearch-head && node_modules/grunt/bin/grunt server > server.log &"

これをカレントディレクトリに置いて vagrant up を実行。

終わったらブラウザで http://192.168.99.11:9100/ を開いて cluster health: green (0 of 0) になってればOK。

f:id:shohhei1126:20170121151105p:plain

最後に vagrant ssh で入ってもろもろ確認しとく。

バージョン確認

$ dpkg -l | grep -e elasticsearch -e java
dpkg -l | grep -e elasticsearch -e java
ii  elasticsearch                      5.1.2                               all          Elasticsearch is a distributed RESTful search engine built for the cloud. Reference documentation can be found at https://www.elastic.co/guide/en/elasticsearch/reference/current/index.html and the 'Elasticsearch: The Definitive Guide' book can be found at https://www.elastic.co/guide/en/elasticsearch/guide/current/index.html
ii  java-common                        0.56ubuntu2                         all          Base package for Java runtimes
ii  javascript-common                  11                                  all          Base support for JavaScript library packages
ii  oracle-java8-installer             8u121-1~webupd8~0                   all          Oracle Java(TM) Development Kit (JDK) 8
ii  oracle-java8-set-default           8u121-1~webupd8~0                   all          Set Oracle JDK 8 as default Java

動いてるか確認

$ sudo service elasticsearch status
● elasticsearch.service - Elasticsearch
   Loaded: loaded (/usr/lib/systemd/system/elasticsearch.service; disabled; vendor preset: enabled)
   Active: active (running) since Sat 2017-01-21 06:06:39 UTC; 5min ago
     Docs: http://www.elastic.co
  Process: 13487 ExecStartPre=/usr/share/elasticsearch/bin/elasticsearch-systemd-pre-exec (code=exited, status=0/SUCCESS)
 Main PID: 13491 (java)
    Tasks: 31
   Memory: 426.1M
      CPU: 9.613s
   CGroup: /system.slice/elasticsearch.service
           └─13491 /usr/bin/java -Xms256m -Xmx256m -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=75 -XX:+UseCMSInitiatingOccupancyOnly -XX:+DisableExplicitGC -XX:+Alway

Jan 21 06:06:39 vagrant systemd[1]: Starting Elasticsearch...
Jan 21 06:06:39 vagrant systemd[1]: Started Elasticsearch.

最後にAPI叩けるか確認

$ curl http://localhost:9200/
{
  "name" : "oAJY3cU",
  "cluster_name" : "elasticsearch",
  "cluster_uuid" : "ZPU6XFphQdqVrwyFI49ktA",
  "version" : {
    "number" : "5.1.2",
    "build_hash" : "c8c4c16",
    "build_date" : "2017-01-11T20:18:39.146Z",
    "build_snapshot" : false,
    "lucene_version" : "6.3.0"
  },
  "tagline" : "You Know, for Search"
}

とりあえずここまで。