-
Notifications
You must be signed in to change notification settings - Fork 2
Droongaノードをchef cookbooksリポジトリを使ってセットアップする手順
まず必要なパッケージをインストールする。 Ubuntu 12.04LTSの場合は、libgecode-devをあらかじめインストールしておかないとberksのインストールに失敗するようだった。
% sudo apt-get install libgecode-dev
cookbooksを置くディレクトリを作成し、そこで作業する。
% md -p chef
% cd chef
knife soloとberksをインストールする準備を整え、インストールする。
% vi Gemfile
% cat Gemfile
# -*- ruby -*-
source "https://rubygems.org/"
gem "knife-solo"
gem "berkshelf"
% git add Gemfile
% git commit -m "Add Gemfile"
% bundle install --path vendor/bundle
knife soloでその作業ディレクトリを初期化する。
この操作により、いくつかのファイルとディレクトリが自動的に用意される。
% bundle exec knife solo init .
% git add .chef
% git commit -m "Add knife solo configuration file"
依存することになるcookbooksをインストールする準備を整える。
% vi Berksfile
% cat Berksfile
# -*- ruby -*-
source "http://api.berkshelf.com/"
local_cookbooks_dir = "cookbooks"
cookbook "groonga", :git => "https://github.com/groonga/chef-cookbooks.git", :rel => "groonga"
cookbook "droonga", :git => "https://github.com/droonga/chef-cookbooks.git", :rel => "droonga"
% git commit Berksfile -m "Add groonga and droonga to the list of dependencies"
% bundle exec berks install
2度目以降の実行では、berks updateする。
% bundle exec berks update
プロジェクト固有の情報を置いておくcookbookを作成する。
% knife cookbook create wikipedia-search -o site-cookbooks
管理対象のノードを初期化する。
この操作により、管理対象のノード用の設定ファイルも自動的に用意される。
(ユーザ名、ホスト名は実際のケースに合わせる。ここではあらかじめ準備しておいたVagrantの検証用環境を指定している。)
% bundle exec knife solo prepare vagrant@node0
ノードに対して、droonga-engineをセットアップするように設定する。
% vi nodes/node0.json
% cat nodes/node0.json
{
"run_list": [
"droonga::engine"
]
}
この時、ホスト名が名前解決できない環境(検証用環境や、ノードの入れ替わりが激しい環境など)では、セットアップが完了した後でそのノード自身が自分に対してメッセージを配送できない。
なので、そのノード自身のループバックIPアドレスを、ホスト名の代わりとして使うように設定する。
% vi nodes/node0.json
% cat nodes/node0.json
{
"droonga": {
"engine": {
"host": "127.0.0.1"
}
},
"run_list": [
"droonga::engine"
]
}
準備が整ったので、ノードをセットアップする。
% bundle exec knife solo cook node0
droonga-engineが起動しているかどうかを確認する。
% ssh node0
% git clone https://github.com/droonga/droonga-client-ruby.git
% cd droonga-client-ruby
% bundle install --path vendor/
% vi add.json
% cat add.json
{
"type": "add",
"dataset": "Droonga",
"body": {
"table": "User",
"key": "key",
"values": {
}
}
}
% bundle exec bin/droonga-request --host 127.0.0.1 --port 10031 --tag droonga add.json
droonga-requestに渡すホスト名、ポート番号、タグは設定に合わせる。ホスト名の名前解決ができる状況であれば、--host node0などとしても良い。 レスポンスが返ってきていれば、Droonga Engineが機能している。
droonga.engine.template.cookbooks['catalog.json']にプロジェクト固有のcookbookの名前を指定する。
{
"droonga":{
"engine": {
"host": "127.0.0.1",
"template": {
"cookbooks": {
"catalog.json": "wikipediqa-search"
}
}
},
"http_server": {
"host": "127.0.0.1"
}
},
"run_list": [
"droonga::engine",
"droonga::http-server",
"wikipedia-search"
]
}
プロジェクト固有のcookbookのtemplates以下には、catalog.json用のカスタムテンプレートとして使う droonga-engine-catalog.json.erb を設置する 例:site-cookbooks/wikipedia-search/templates/droonga-engine-catalog.json.erb
ノードに対して、droonga-http-serverをセットアップするように設定する。
% vi nodes/node0.json
% cat nodes/node0.json
{
"run_list": [
"droonga::http-server"
]
}
この時、ホスト名が名前解決できない環境(検証用環境や、ノードの入れ替わりが激しい環境など)では、セットアップが完了した後でDroonga Engineに対してメッセージを配送できない。
なので、HTTP Serverから見た時のDroonga EngineのIPアドレスと、Droonga Engineから見た時のHTTP ServerのIPアドレスを、ホスト名の代わりとして使うように設定する。
npmのバージョンが1.3.5とかだとインストール途中でこけてしまうので、npmの新しめのバージョンを指定する。(このあたり、cookbooks側でどうにかできないか?)
% vi nodes/node0.json
% cat nodes/node0.json
{
"droonga": {
"engine": {
"host": "127.0.0.1"
},
"http_server": {
"host": "127.0.0.1"
}
},
"nodejs": {
"npm": "1.4.7"
},
"run_list": [
"droonga::http-server"
]
}
準備が整ったので、ノードをセットアップする。
% bundle exec knife solo cook node0