2013年12月アーカイブ

ちょっとずつ試してる。環境は以下。

  • MacOS X 10.8
  • VirtualBox 4.3.2
  • Vagrant 1.3.5
  • Packer v0.4.0

packer でCentOS6.5のイメージを作る

まず、packerを使ってCentOS 6.5のイメージを作るところから。テンプレートはgithubにあげてます。

$ git clone https://github.com/kazeburo/my_packer.git
$ cd my_packer
$ packer build centos6.5.json

テンプレートは https://github.com/hnakamur/my-packer-template-files を参考にさせて頂きました。
このあとの作業が楽になるようにCentOS 6.5をインストールしたあとに、yum groupinstall "Development Tools" し、不必要そうなサービスを止めています。

ビルドが完了すると、「packer_virtualbox_virtualbox.box」ができるので、vagrantに登録

$ vagrant box add centos6.5dev packer_virtualbox_virtualbox.box

ここでは「centos6.5dev」という名前にしています。

vagrant plugin の導入

vagrant-vbguest

VirtualBox Guest Additions を自動でアップデートしてくれるpluginを導入します。あると便利

$ vagrant plugin install vagrant-vbguest

vagrant-reload

provisionの中でゲストマシンの再起動できます。kernelのアップデートがある時には必須

$ vagrant plugin install vagrant-reload

Vagrantを使って起動する

つくったCentOSのイメージを起動する

$ mkdir learning_docker
$ cd learning_docker
$ vagrant init centos6.5dev

そしてdockerをすぐに使えるようにprovisionerを使っていくつか設定します

$ cat Vagrantfile
VAGRANTFILE_API_VERSION = "2"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vm.box = "centos6.5dev"
  config.vm.network "forwarded_port", guest: 5125, host: 15125
  config.vm.provision :shell, :inline => <<-EOT
curl -fsSkL -o /etc/yum.repos.d/hop5.repo http://www.hop5.in/yum/el6/hop5.repo
yum remove -y kernel-headers
yum install -y kernel-ml-aufs kernel-ml-aufs-devel kernel-ml-aufs-headers
yum groupinstall -y 'Development Tools'
sed -i "s/default=1/default=0/" /boot/grub/grub.conf
yum install -y docker-io
gpasswd -a vagrant docker
chkconfig docker on
service docker start
EOT
  config.vm.provision :reload
end

動作に必ず要るわけではないですが、aufs-backed docker host on centos6 | blog.hansode.org を参考にaufs対応カーネルをいれています。また、仮想マシンの中で起動したgrowthforecastにアクセスするためのport forwardの設定や、vagrantユーザでdockerを使えるようにグループの設定もしています。

これで仮想マシンを起動します。初回起動時にprovisionerが動いて、kernelを入れ替えて一度再起動します。

$ vagrant up

上がってくると vagrant-vbguest がVirtualBox Guest Additionsのアップデートを行い、正常に起動するはず。

$ vagrant ssh

これで dockerを使う準備ができました。

$ docker info
Containers: 0
Images: 0
Driver: aufs
 Root Dir: /var/lib/docker/aufs
 Dirs: 0
WARNING: No swap limit support

DockerでGrowthForecastを起動する

上の準備でvagrantユーザでdockerが使えるようになっているので、適当なディレクトリを作り、Dockerfileを作ります。

$ mkdir growthforecast
$ cd growthforeacst
$ cat Dockerfile
FROM centos
RUN yum -y groupinstall "Development Tools"
RUN yum -y install pkgconfig glib2-devel gettext libxml2-devel pango-devel cairo-devel git ipa-gothic-fonts
RUN git clone https://github.com/tagomoris/xbuild.git
RUN xbuild/perl-install 5.18.1 /opt/perl-5.18
RUN echo 'export $PATH=/opt/perl-5.18/bin:$PATH' > /etc/profile.d/xbuild-perl.sh
RUN /opt/perl-5.18/bin/cpanm -n GrowthForecast
RUN mkdir -p /var/lib/growthforecast
EXPOSE 5125
CMD ["/opt/perl-5.18/bin/growthforecast.pl","--data-dir","/var/lib/growthforecast"]

そして、docker buildでイメージを作ります

$ docker build -t user/growthforecast .

perlのビルドも行うのですごく、、時間かかります。

これができたら、コンテナの起動です。

$ docker run -p 5125:5125 kazeburo/growthforecast

5125は、vagrantでport forwardの設定がしてあるはずなので、Mac上のブラウザから、「http://localhost:1525/」 にアクセスできるはずです。

gf-docker.png

停止は、Ctrl-C です。これだとコンテナの起動のたびにデータが消えてしまうので、適当なディレクトリをマウントします。

$ mkdir -p /home/vagrant/growthforecast/data
$ docker run -p 5125:5125 -v /home/vagrant/growthforecast/data:/var/lib/growthforecast kazeburo/growthforecast

これで再起動してもデータが初期化されることが無くなりました。

まだまだやってみたレベル。。

GrowthForecastのバージョン0.80をリリースしました。

gf_0_80.png

インストールはCPANもしくはgithubから

主な変更点

変更点は以下の通りです。

  • bootstrap 3 にアップグレーとして見た目が変わった (kazeburo)
  • グラフリストの折り畳み (kazeburo, dalyfolowerさん)
  • mysqlを使った場合のdefault valueの扱い (oranieさん,sonotsさん)
  • exportへのstepとcf (統合巻数) オプションの追加 (anoworlさん)
    参考 -> http://qiita.com/anoworl/items/63a2d8d33cab077e729b
  • unix domain socket対応 (kazeburo)
  • faviconつけた (kazeburo)

みなさんありがとうございます!

ドキュメントページの英語化

あと、hkmurakamiさんに翻訳をして頂き、http://kazeburo.github.io/GrowthForecast/ のページが英語になりました。こちらもありがとうございます!

gf-site.png

ちなみに、日本語のページは右上のメニューで表示できます。

12/21 発売の WEB+DB PRESS Vol.78 のPerlリレー連載にて「PSGI/Plack実践入門」という記事を書きました。

内容はYAPC::Asiaで発表した内容 + plackconで藤原さんが発表したことが中心で、てんこ盛りとなっております。

  • PSGIの仕様の復習
  • PSGIサーバの役割
  • よく使われるPSGIサーバとその特徴的な機能の紹介(Starlet,Starman,Twiggyなど)
  • PSGIサーバの選び方
  • Plack::Middleware
  • Server::Starterを使ったホットデプロイ

PerlでWebアプリケーションを作り、動かすのであれば必ず押さえておくべき事柄をまとめてあるのでぜひ読んで頂けたらと思います。

WEB+DB PRESS Vol.78
WEB+DB PRESS Vol.78
posted with amazlet at 13.12.18
WEB+DB PRESS編集部 編 栗林 健太郎 安詮院 康広 山口 良平 尾上 忠輔 大川 高志 坂本 寛樹 青木 峰郎 増井 雄一郎 中島 聡 江島 健太郎 中島 拓 柴田 博志 伊藤 直也 登尾 徳誠 片桐 崇 後藤 秀宣 佐藤 鉄平 近藤 宇智朗 長野 雅広 奥野 幹也 渡邊 恵太 A-Listers 家永 英治 はまちや2 川添 貴生 原田 勝信 和島 史典 城倉 和孝 安達 俊雄 Akira 川嶋 賢一
技術評論社
売り上げランキング: 852

DMMの特集で冒頭にモリスさんの名前があるのがポイントです。

ここを書き直して転載

memcachedに関する記事は「第1回 memcachedの基本:memcachedを知り尽くす|gihyo.jp … 技術評論社」など何回か書いていますが、最近のmemcachedでの起動オプションのおすすめをまとめてみようと思います。なおこの記事はMemcached Advent Calendarではありません。

まとめるとこんな感じです。

$ memcached -v -p 11211 -U 0 -u memcached -m 1024 \
                       -c 100000  -t 4 -C -B ascii

ひとつずつ簡単に紹介します。

-v ログ出力

ログを verbose モードで起動します。エラーや警告が表示されます。弊社ではmemachedをdaemontools経由で起動し、ログを記録しています。

-v

-vオプションは -vv-vvv と v の数を増やす事で様々なメッセージを出力させることができますが、プロダクション環境では -v だけで十分でしょう。

-p TCPポート

ListenするTCPポートです。デフォルトは11211ですね

-U UDPポート

memcachedはUDP経由でも使えます。使わない場合は

-U 0

としてUDPをListenしないようにできます。

-u ユーザ名

memcachedをrootユーザで動作させることはできません。-u オプションの指定が必要となります。

-u memcached

memcachedをsetuidgid等を用いてrootユーザ以外で起動することもできますが、その際は後述する -c オプションで大きな数値を指定できなくなります。rootで起動して-uにてユーザを指定するのがシンプルです。

-m メモリ容量

最大のメモリーサイズ。デフォルトは64MBですね。単位はメガバイトなので、1GB使いたい場合は

-m 1024

と指定します。

memcachedは起動時に指定したメモリを確保しません。-k オプションを追加すると起動時にメモリを確保しますが、あまり使いません

-c 同時接続数

memcachedが扱える最大同時接続数です。デフォルトは1024。

実際には1プロセスで開く事ができるファイルディスクリプタ数の設定(rlimit)に使われるだけなので、かなり大きな数字にしても余計なリソースを使うなどの心配はありません。

-c 100000

などと大きな数字にしてしまいましょう。

-t スレッド数

memcachedはマルチスレッドで動作します。-t オプションでそのスレッド数を指定します。デフォルトは 4 です。

-t 4

変更しても目に見える差は出てきません

-C CASを無効化

CASを使うと値が変化していない時だけsetを行うというトランザクションのような操作ができるようになります。しかし、1キャッシュアイテムにつき8Byteの容量が必要になるので、全く使わない場合にはそれなり大きな無駄になります。

-C

-C オプションを使うとCASが無効になり、メモリの節約もできます。エコ!

-B プロトコル

memcachedにはおなじみのASCIIプロトコルとBINARYプロトコルがあり、バイナリの方が少し速いみたいです。memcachedはコマンドがサーバに届いた時に最初のデータをみてASCIIかBINARYかを判断しますが、どちらかしか使わない場合、-B オプションで指定してその処理を飛ばすことができます。

-B ascii|binary

デフォルトはautoで、自動的に判断します。

その他のオプション

-d デーモン化

memcachedをデーモンとして起動する場合に指定します。前述の通り弊社ではdaemontools経由での起動なので使っていません

-I 最大のキャッシュアイテムサイズ

デフォルトのmemcachedは1MB以上の大きさのキャッシュを保存することができませんが、-I オプションで変更ができます。

-I 3m

これで3MBとなります

-A shutdownコマンド

12/9にリリースされたばかりのmemcached-1.4.16で追加されたオプションです。shutdownコマンドが有効になります。(すでにflush_allがあるけど) injectionあったらコワイですね

このエントリーはMySQL Casual Advent Calendar 2013 11日目の記事です。2011年のAdvent CalendarはQ4Mの導入方法を書いたので、今回はmroongaを書きます。

DSC01197.jpg

lestrratさんのエントリにもありますが、某サービスの検索システムをmroongaに置き換えるってのを準備しています。今のところメモリ64GB/ioDriveなマシンに、本番で想定している倍の量の9000万件/台の記事データをストレージモードで突っ込んでいますが、遅くても0.5秒ぐらいで検索結果が得られるのでなかなか上々です。

mroongaを導入している環境は、CentOS6系でMySQLは5.6系を使っています。MySQLはOracle公式rpmです。mroongaの公式サイトで配布しているrpmはOS付属のMySQLのバージョンに合わせたrpmなので、Oracle公式rpmを使いたい場合、別途ビルドが必要になります。rpmは以下の素晴らしい記事を参考に作りました。

第8回 CentOS6でのRPMパッケージを用いた MySQL 5.6 & mroonga & PHP 5.4 環境の作り方:隔週連載groonga|gihyo.jp … 技術評論社

Vagrant provisionerによるrpmの作成手順の自動化

mroonga+MySQL5.6系の運用を考えた時に、ソフトウェアのアップデート方法をあらかじめ考えておくのが大事かなど考えています。MySQL5.6系はまだエキサイティングな変更履歴が並びますし、groongaは毎月アップデートされるので、アップグレードを今までのMySQLの運用と比べて頻繁に行う必要が出てくるかもしれません。うちでは今のところMHAと組み合わせて運用するつもり。

mroongaのrpm作成は、上記の丁寧な説明を見ながらやれば出来ると思いますが、ビルドに使う環境の準備やSpecファイルの編集など若干の慣れが必要であることも否めません。そこでディスポーザブルな環境の構築とビルドの自動化をVagrantとVagrantのprovionerを使ってやってみました。

Vagrantfileとprovisionに使うシェルはこちら

https://github.com/kazeburo/buildmysqlmroonga_rpm

Vagrant 1.3系 + Virtualbox で検証してます。

使い方

vagrant upするだけで、必要なrpm/srpmを落として来てビルドします。完了すると、rpms-日付というディレクトリができ、中にインストールに使うrpm一式が入っています。

$ git clone https://github.com/kazeburo/build_mysql_mroonga_rpm.git
$ vagrant up
$ ls -l rpms-xxxxxxxxxxxx
MySQL-client-5.6.15-1.el6.x86_64.rpm
MySQL-devel-5.6.15-1.el6.x86_64.rpm
MySQL-server-5.6.15-1.el6.x86_64.rpm
MySQL-shared-5.6.15-1.el6.x86_64.rpm
MySQL-shared-compat-5.6.15-1.el6.x86_64.rpm
groonga-devel-3.1.0-1.el6.x86_64.rpm
groonga-libs-3.1.0-1.el6.x86_64.rpm
groonga-normalizer-mysql-1.0.5-1.el6.x86_64.rpm
groonga-normalizer-mysql-devel-1.0.5-1.el6.x86_64.rpm
groonga-tokenizer-mecab-3.1.0-1.el6.x86_64.rpm
mecab-0.996-1.el6.x86_64.rpm
mecab-devel-0.996-1.el6.x86_64.rpm
mecab-ipadic-2.7.0.20070801-7.el6.1.x86_64.rpm
mysql56-mroonga-3.10-1.el6.x86_64.rpm
mysql56-mroonga-doc-3.10-1.el6.x86_64.rpm
$ vagrant destroy

使った仮想マシンは捨ててしまってもOKです。ディスポーザブル!

バージョンが上がった場合は、provision.shを編集してください。

あとは、出来たrpmをサーバに転送してインストールします。

$ rpm -Uvh MySQL-shared-compat*.rpm
$ rpm -Uvh MySQL-client-5*.rpm MySQL-devel-5*.rpm \
   MySQL-server-5*.rpm MySQL-shared-5*.rpm
# パスワードの設定とmysqlの起動
$ rpm -Uvh groonga*.rpm mecab*.rpm mysql56-mroonga*.rpm

mysqlにパスワードがかかっていたり、インストール時にmysqlが起動していない場合は、利用開始前に

DELETE IGNORE FROM mysql.plugin WHERE name = 'mroonga';
INSTALL PLUGIN mroonga SONAME 'ha_mroonga.so';
CREATE FUNCTION last_insert_grn_id RETURNS INTEGER SONAME 'ha_mroonga.so';
CREATE FUNCTION mroonga_snippet RETURNS STRING SONAME 'ha_mroonga.so';
CREATE FUNCTION mroonga_command RETURNS STRING SONAME 'ha_mroonga.so';

このクエリを実行してください。

githubのrepositoryにmy.cnfも同梱してますので参考にどうぞ。

おまけですが、メモリの容量を超えるインデックスを作る場合、sysctl.confに以下を追加すると良いでしょう

vm.overcommit_memory = 1
vm.max_map_count = 1000000

まとめ的な

某サービスの検索システムの入れ替えが出来たら、はまったところとかデータの持ち方などを詳しく書きたいなと思ってます。あと、Vagrant/dockerを使ったdisposableな汎用的rpmbuild環境についてはもうちょっと考えて行きたい所存です

MySQL Casual Advent Calendar 2013、明日は@mirakuiさんです

941さんが絵本名作100リストというエントリーをあげていたので便乗してうちにある本からオススメを紹介してみる。

うちには4歳の息子と0歳の娘がいますが、(息子から見た)おばあちゃんがらでぃっしゅぼーやの絵本くらぶというのに申し込んでくれていて、毎月絵本が1冊届きます。親と息子で本を選ぶと息子が好きな電車とか乗り物とか電車の本に偏ってしまうと思うので、毎月いろんな絵本が届くのはかなり良い。息子も新しい本が来るのを楽しみにしています。

それに加えて、毎週木曜日に保育園から本を借りてくるのと、近所の図書館で借りる本があるので、本棚はいつもいっぱいです。

ずいぶん前からひらがなカタカナが読めていた息子なので一人でも本を読むけど、毎日寝る前に2冊本を読んでいます。寝落ちそうになりながら読んでいる事もあるけど、息子・娘ともに本が好きになって、本をきっかけに世界を広げていって欲しいと思うところです。

ehon.jpg

ここにあげる絵本は、だいたい息子が今読んでる絵本になる。3歳から5歳ぐらいが対象となるんじゃないかなぁと思います

■いたずらきかんしゃちゅうちゅう

いたずらきかんしゃちゅうちゅう (世界傑作絵本シリーズ―アメリカの絵本)
バージニア・リー・バートン
福音館書店
売り上げランキング: 10,695

自分が子供の時に好きだった本。というか家にあるのは自分が30年前に読んでいた本そのもの。黒と白の絵なのになぜか子供が好きなかっこいい機関車の本。

■コんガらガっち どっちにすすむ?の本

コんガらガっち どっちにすすむ?の本 (創作絵本シリーズ)
ユーフラテス
小学館
売り上げランキング: 10,286

シリーズで何冊かあるらしいけど、これは近所の図書館で借りて来た本。ハンバーグハンバーグハンバーグ丼で息子大ウケ

■モチモチの木

モチモチの木 (創作絵本6)
斎藤 隆介
岩崎書店
売り上げランキング: 10,995

これも古い本。最初読むのがつらいんだけど、慣れるとリズムもって読める。絵柄怖いと思うんだけどお気に入り。最後に相変わらず「ジサマァ」となるのが良い。

■ゆうびんやさんおねがいね

ゆうびんやさんおねがいね
サンドラ ホーニング
徳間書店
売り上げランキング: 156,287

おばあちゃんに「ぎゅっ」を届けるために郵便局の人が頑張る本。読みながら子供と「ぎゅっ」が出来ます

■3びきのかわいいオオカミ

3びきのかわいいオオカミ
ユージーン トリビザス
冨山房
売り上げランキング: 3,393

3匹の子豚のパロディのような構成。作者の一人は犯罪学者のかただそうな。オオカミたちが若干理不尽すぎてかわいそうだと思う事もあるが、ハッピーな終わり方をする。1ページの中に「てつじょうもうや、てっこつや、てっぱんや、おもいてつのなんきんじょう」というフレーズが2回でてきて読むのつらい

■だるまさんシリーズ

だるまさんシリーズ「が・の・と」(3点セット)
かがくいひろし
ブロンズ新社
売り上げランキング: 509

かがくいひろしの絵本はどの本もシュールでおもしろい。この「が」「の」「と」3点セットは子供が生まれた時のプレゼントとしても最適です。息子が2歳ぐらいの時にひとりでこの本を読んでる動画があって大変かわゆい。

■まくらのせんにん

まくらのせんにん そこのあなたの巻 (クローバーえほんシリーズ)
かがくい ひろし
佼成出版社
売り上げランキング: 6,238

おなじくかがくいひろいの絵本。「穴」にはまった動物達を助ける方法がまた面白い。しかしなぜ「穴」にはまるのか。。

■ぎょうれつのできるケーキ屋さん

ぎょうれつのできるケーキやさん
ふくざわ ゆみこ
教育画劇
売り上げランキング: 57,846

これ読んでミルフィーユを高島屋で探して買って帰りました。ロールケーキも食べたいです。

■まんげつのよるまでまちなさい

まんげつのよるまでまちなさい
マーガレット・ワイズ・ブラウン
ペンギン社
売り上げランキング: 353,458

夜を見てみたいあらいぐまの子供にお母さんが「満月のよるまで待ちなさい」と言い続ける本。子供は「待ちなさい」と言われながら大きくなる、そして待てなくなって足を踏み出したそのときが、願ったモノを得るのにふさわしい時だ、というあとがきが印象深い

■トトシュとマリーとたんすのおうち

トトシュとマリーとたんすのおうち
カタリーナ ヴァルクス
クレヨンハウス
売り上げランキング: 152,124

トトシュ(男の子)とマリー(女の子)が散歩のとちゅうでみつけたタンスを巡るとてもかわいいお話。トトシュが女の子に振り回されただけじゃないかと思ったりもする

■せんろはつづく どこまでつづく

せんろはつづく どこまでつづく
鈴木 まもる
金の星社
売り上げランキング: 55,761

■ピン・ポン・バス

ピン・ポン・バス
ピン・ポン・バス
posted with amazlet at 13.12.03
竹下 文子
偕成社
売り上げランキング: 14,325

■はしれ!たくはいびん

はしれ!たくはいびん
はしれ!たくはいびん
posted with amazlet at 13.12.03
竹下 文子
偕成社
売り上げランキング: 58,127

■みんなで! どうろこうじ

みんなで! どうろこうじ
みんなで! どうろこうじ
posted with amazlet at 13.12.04
竹下 文子
偕成社
売り上げランキング: 57,031

竹下文子さん、鈴木まもるさんは電車や車など乗り物の絵本数多く出している。図書館でこの3冊以外の本も何回か借りている。おすすめは「はしれ!たくはいびん」、田舎のおじいさんが送ったリンゴがどのようにして街の孫に届くのか、その過程を紹介している絵本。身近に宅急便の営業所があったり、行った事がある子供は興味もつはず。

竹下文子さん、鈴木まもるさんの乗り物の本はある本で出て来た乗り物が別の本に出ていたり、道を歩いている人が他の本にも出て来たりするので、探してみるのも面白い。

■ぼくのかえりみち

ぼくのかえりみち
ぼくのかえりみち
posted with amazlet at 13.12.03
ひがし ちから
BL出版
売り上げランキング: 109,759

学校のからの帰り道、男の子が白線の上だけをあるいて帰ってきますが、家の前で白線が途切れてしまって困っていると、ちょうど白い服を着たお母さんが通りかかり、、。

冒険とほのぼのとした最後の落ちが組み合わさってかわいいなぁと思うのですが、なぜか息子読まない。こわいのか恥ずかしいのか。。

■だいすきひゃっかい

だいすきひゃっかい (レインボーえほん)
村上 しいこ
岩崎書店
売り上げランキング: 417,882

妹ができたお姉ちゃんがお母さんにクイズをだしました。「はるなが寝る前に行くところはどこでしょう?」お母さんは悩みます。お姉ちゃんの行きたいところはトイレでも歯磨きでもお星様にお願いすることでもなく、、。素敵な答えが待っています。

■やきいもするぞ

やきいもするぞ
やきいもするぞ
posted with amazlet at 13.12.03
おくはら ゆめ
ゴブリン書房
売り上げランキング: 254,668

芋が取れる。落ち葉がいっぱいある。やきいもするぞ。やきいも食べるとオナラ出る。みんなでオナラ大会する。そこにお芋の神様が登場して素敵なオナラをして颯爽と去って行く本。この勢いが素晴らしい。子供は絶対気に入るし、自分も好きな本。

■しましまぐるぐる

いっしょにあそぼ しましまぐるぐる

学習研究社
売り上げランキング: 1,232

最初の写真の本。この絵本は0歳から読める。色がはっきりしているせいか、赤ちゃんでもジーとみている。娘も読んでるし、本が好きになってくれるとうれしいなー。