Riak CS をインストールする優れたやり方
一部の人が愛してやまない(らしい)、Riak CS がオープンソース化されました。
id:kuenishi が【緊急】 Riak Cloud Storage が OSS になりました【速報】なんて記事を書いて、
インストール方法を説明していますが、手順が多すぎてなにいってんだかぜんぜんわかりません。
こんなに複雑な手順なのに、手順番号も振ってないし、クロスチェック用のチェック欄もありません。
手順書としては考えられない構成になっています。
しかたがないので、シンプルな手順で Riak CS が利用できるよう、chef でインストールすることにしましょう。
本家 Basho サイトを見ると Riak CS Using Chef という素敵な記事があります。
どうやら Basho では chef のレシピを提供してくれているようです。
Cheffile を作る
いつもどおり、librarian-chef 用の Cheffile を書きます。
先ほど書いたとおり、Basho が riak と riak-cs のレシピを提供しているのでこれを使います。
site 'http://community.opscode.com/api/v1' cookbook 's3cmd' cookbook 'riak', :git => 'https://github.com/basho/riak-chef-cookbook' cookbook 'riak-cs', :git => 'https://github.com/basho/riak-cs-chef-cookbook' cookbook 'riak-cs-prepare', :git => 'https://github.com/tk0miya/chef-riak-cs-prepare'
最後の行に riak-cs-prepare というものを追加しています。
これは僕がつくった riak-cs を入れるための調整用の cookbook です。
以下のような quick hack がなされています。
- riak cookbook を素直に実行すると ulimit -n 4096 しろと怒られるので設定した
- riak と riak-cs の起動順序がおかしいのを回避
- Riak を設定するときに Riak CS が入っている必要があるのに、Riak CS は Riak が起動していないと落ちる問題が…
Attributes の設定をする
id:kuenishi のブログでは /etc/riak/app.config を書き換えていますが、
riak cookbook や riak-cs cookbook では Attributes を使って設定を追加することができます。
手元では以下のように solo.json を設定しました。
{ "riak" : { "config" : { "riak_core" : { "default_bucket_props" : { "allow_mult": true } }, "riak_kv" : { "storage_backend" : "riak_cs_kv_multi_backend" } } }, "riak_cs" : { "config" : { "riak_cs" : { "anonymous_user_creation" : true } }, "limits" : { "config_limits" : true } }, "stanchion" : { "limits" : { "config_limits" : true } }, "run_list" : [ "recipe[yum::epel]", "recipe[s3cmd]", "recipe[riak-cs-prepare]", "recipe[riak]", "recipe[riak-cs]", "recipe[riak-cs::stanchion]" ] }
なお、riak-cs-prepare と riak、riak-cs の順序はこの通りに並べる必要があります。
入れ替えるとエラーが出て失敗するので注意してください。
riak と riak_cs のオプションは undocumented なので cookbook を読み解きつつ必要なオプションを見つけています。
よりよいやり方があればツッコミお願いします!
あとは設定ファイル(solo.rb)を書いておきます。今回は途中でファイルのダウンロードを含むので file_cache_path を指定しておきます。
cookbook_path "/home/vagrant/cookbooks" file_cache_path "/home/vagrant/cache"
実行する
いつもどおり chef-solo を実行します。
$ librarian-chef install $ mkdir cache $ sudo chef-solo -j solo.json -c $HOME/solo.rb
追記(3/13 7:10): librarian の実行とか solo.rb の追加とかの手順を念のため追加
これで riak と riak-cs がインストールされます*1。
あとは 「最初のユーザをつくる」を実行すれば ok です。
$curl -H 'Content-Type: application/json' \ -X POST http://10.0.2.15:8080/riak-cs/user \ --data '{"email":"admin@admin.com", "name":"admin"}'
riak-cs-prepare では何を行なっているのか
riak-cs-prepare では、先程も書いたとおり
- riak cookbook を素直に実行すると ulimit -n 4096 しろと怒られるので設定した
- riak と riak-cs の起動順序がおかしいのを回避
- Riak を設定するときに Riak CS が入っている必要があるのに、Riak CS は Riak が起動していないと落ちる問題が…
という対応をしています。
では、ちょっと recipe/default.rb を覗いてみましょう。
まず、先頭の方に次のような記述があります。
file_ulimit "riak" do user "riak" soft_limit 4096 hard_limit 4096 end
ここでは riak 用の ulimit を定義しています。この file_ulimit リソースは riak-cs cookbook の中で定義されているものです。
そして、もうひとつ、最後のところで次のような記述をしています。
service "riak" do subscribes :restart, resources("package[#{package_name}]"), :immediately end
subscribes という通知設定を使って、riak-cs パッケージをインストールした直後に riak の再起動を行なっています。
これにより、「Riak CS をインストールした直後」かつ「サービスを起動する前」のタイミングで
riak を起動することができます*2。
まとめ
ちょっと手間がかかる Riak CS のセットアップを chef を使って行なってみました。
提供されている chef cookbook が完璧ではないため、調整用の cookbook を使う必要がありますが、
お手軽に Riak CS を使いはじめることができました。