@johtaniの日記 2nd

@johtani ‘s blog 2nd edition

すずけんさんのメモを元にVagrantでElasticsearchクラスタを起動してみた

すずけんさんがVagrant+puppet使って、VM起動してElasticsearchのクラスタを組んでる記事を書いているのを見て、試してみたくなりました。 ということで、VagrantとかPuppetなに?くらいの私ですが、クラスタを起動するところまで行ったので、その時のメモを残しておきます。

元記事とか参考

なんとなくの理解

VagrantやPuppetについては、何度か勉強会で話を聞いてはいたのですが、 想像していたレベルだったので良い機会でした。 今のところの認識はこんな感じです。

Vagrant

VMを起動したり、VM周りの設定をあれこれできるツール。 VMのネットワーク設定や、インスタンス名?などを指定できる。

Puppet

起動後のVM(VMとは限らないか。)のゲストOS側の設定周りやアプリのインストールなどを 実行できるツール。

詰まった箇所

すずけんさんのブログを元に作業をしましたが、自分がVagrantやPuppetに疎いため、以下の部分で躓いたので、備忘録のために残しておきました。

その1:Puppetのファイルの場所

search01.vm.localのVMを設定(というか、elasticsearchのインストール?)するときに、manifests/search.approles/search/manifests/init.ppファイルが必要で作成します。

このファイルの配置場所は/vagrant配下に作成する必要がありました。 ssh search01.vm.localでVMにログインした場合は/home/vagrantにログインしており、この場所でファイルを作ってもPuppetがエラーを吐いたためです。

と思ったのですが、あれ?これひょっとしてVagrantfileがあるところにディレクトリとファイル作ると勝手にVMにコピーしてくれるんですか?destroyして、upしたら、ファイルが勝手にコピーされてる。ひょっとして、/vagrantってディレクトリはVagrantfileがあるディレクトリを共有してたりするのかな?そのうち、Vagrantについても調べてみようかな。

その2:ネットワーク周り

1
curl http://192.168.10.114:9200/

をホストOSから実行してみましたがうまく行きませんでした。。。 ネットワーク周りの設定だと思うんですが。 少なくとも「sshによるログイン」「ping」コマンドの応答は返ってきてます。

また、VM内でcurlコマンドを実行したらレスポンスが返ってきました。

なんで?ってツイートしたら各所から「iptables」という単語が飛んできて、 service止めたら大正解でした。まぁ、そうですよね。基本ですよね。。。

ということで、Puppetがよくわかっていませんが、ググって変更してみました。

manifests/search.appに以下を追加

1
include iptables

roles/iptables/manifests/init.pp

1
2
3
4
5
6
class iptables {
  service { 'iptables':
    enable => false,
    ensure => stopped,
  }
}

iptablesを停止するmanifests?です(良くないことなんですが、よくわかってない)。

ということで、ローカルで1個のVM起動して、elasticsearchにアクセスできることは確認できました。

と、書いてるそばから、元記事が修正されてしまいましたw

クラスタ編(変更点)

クラスタを組むときに、追加でプラグインを入れたのでroles/search/manifests/init.ppは次のようにしました。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
class search {
  class { 'elasticsearch':
    package_url => 'https://download.elasticsearch.org/elasticsearch/elasticsearch/elasticsearch-1.0.0.RC2.noarch.rpm',
    java_install => true,
    config => {
      'cluster' => {
        'name' => 'test-es-cluster'
      },
      'network.host' => '_eth1:ipv4_',,
      'marvel.agent.exporter.es.hosts' => ['192.168.10.114:9200','192.168.10.115:9200']
    }
  }

  elasticsearch::plugin{'elasticsearch/marvel/latest':
    module_dir => 'marvel'
  }

  elasticsearch::plugin{'mobz/elasticsearch-head':
    module_dir => 'head'
  }

  elasticsearch::plugin{'royrusso/elasticsearch-HQ':
    module_dir => 'HQ'
  }

  elasticsearch::plugin{'elasticsearch/elasticsearch-analysis-kuromoji/2.0.0.RC1':
    module_dir => 'analysis-kuromoji'
  }

  elasticsearch::plugin{'info.johtani/elasticsearch-extended-analyze/1.0.0.RC1':
    module_dir => 'extended-analyze'
  }

  elasticsearch::plugin{'polyfractal/elasticsearch-inquisitor':
    module_dir => 'inquisitor'
  }
}

とりあえず、今日はクラスタ組んでMarvelやプラグインの動作確認でおしまいです。

疑問点

いくつか疑問点が。試してみてもないんでなんとも言えませんが。気が向いたら、調べて追記するかも。

  • :private_networkはVirtualBox内で完結する(Macから外には影響しない)ネットワークが構築される?たぶん、VagrantというよりはVM、仮想化周りの知識なんだろうけど
  • どこから再開可能?elasticsearch.ymlの設定を書き換えた場合に、最後のコマンドだけ実行するとちゃんとやりなしてくれたりするのかな?
  • VMのディスク増やすのもVagrantでできるんかな?まぁ、できると思うけど。
  • :forwarded_portのauto_correctとかわかってない。
  • JVMをSunのJVMでかつ、7u25に変更したいのだがどうしたものか?(現時点での推奨バージョン)

感想

Vagrantって便利ですね。あれ?って思ったら、destroyして、やり直すのがすごく簡単です。 元記事があるので、なんとなくですが、構成とかどうすればいいかがわかるのは本当に助かりました。 これで、あれこれと検証する環境が簡単に構築できることがわかったので、色々と楽できるかも。ありがとうございます、すずけんさん!

Comments