まいんだーのはてなブログ

はてブなのはてブロなのどっちなの

うわさの yrmcds を CentOS6.4 で動かしたメモ

@ymmt2005 さんの開発した yrmcds の開発シナリオ(何が欲しいのか)を読んで、これは適用出来るシーンがあるんではなかろうかと思い、早速手元で動かして確認してみようとしたので記録。

gcc-4.8.1のインストール

最新のgccが必要なのでまずはそちらからインストールする必要があります。
kawa0810さんのエントリを参考にして、gcc-4.8.1をインストールしましょう。
prefix を /opt あたりに指定して閉じ込めておけば扱いも面倒がないので良いかと思います。

yrmcdsのビルド

ドキュメントの通りやれば良いです。
IPv6 が無効だとビルドは通るけど実行時にコケるので、ipv6.conf を変更して適用しておいたほうがいいです。

$ cat /etc/modprobe.d/ipv6.conf
alias net-pf-10 off
options ipv6 disabled=1 # この行

また、gcc を /opt とかに入れた場合 Makefile の指定を変えたりする必要があるので書き換えましょう。
その他で、nobody/nogroup指定になっていたりするところを直さないと「そんなグループないよ」と言われます。

diff --git a/Makefile b/Makefile
index 343437a..740da3c 100644
--- a/Makefile
+++ b/Makefile
@@ -10,7 +10,7 @@ CPPFLAGS = -I. -DCACHELINE_SIZE=$(shell getconf LEVEL1_DCACHE_LINESIZE)
 CPPFLAGS += -DDEFAULT_CONFIG=$(DEFAULT_CONFIG) -DUSE_TCMALLOC
 OPTFLAGS = -gdwarf-3 -O2 #-flto
 WARNFLAGS = -Wall -Wnon-virtual-dtor -Woverloaded-virtual
-CPUFLAGS = -march=core2 -mtune=corei7
+CPUFLAGS = -march=core2 -mtune=native
 CXXFLAGS = -std=gnu++11 $(OPTFLAGS) $(shell getconf LFS_CFLAGS) $(WARNFLAGS) $(CPUFLAGS)
 LDFLAGS = -L. $(shell getconf LFS_LDFLAGS)
 LIBTCMALLOC = -ltcmalloc_minimal
@@ -40,7 +40,7 @@ install: $(EXE)
        cp etc/logrotate /etc/logrotate.d/yrmcds
        cp etc/yrmcds.conf $(DEFAULT_CONFIG)
        cp $(EXE) $(PREFIX)/sbin/yrmcds
-       install -o nobody -g nogroup -m 644 /dev/null /var/log/yrmcds.log
+       install -o nobody -g nobody -m 644 /dev/null /var/log/yrmcds.log

 #lz4/lz4.c:
 #      svn checkout http://lz4.googlecode.com/svn/trunk/ lz4

yrmcdsの動作確認

/path/to/yrmcds を実行すれば起動するので、telnetとかで動作確認が取れます。

$ telnet localhost 11211
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
stats
STAT pid 56124
STAT time 1373377451
STAT version yrmcds version 0.9.0
STAT pointer_size 64
STAT rusage_user 0:75988
STAT rusage_system 0:120981
STAT curr_items 0
STAT total_items 0
STAT bytes 0
STAT limit_maxbytes 1073741824
STAT threads 10
STAT gc_count 1
STAT slaves 0
STAT last_expirations 0
STAT last_evictions 0
STAT evictions 0
STAT last_gc_elapsed 71548
STAT total_gc_elapsed 71548
END
get test
END
set test 0 0 4
hoge
STORED
get test
VALUE test 0 4
hoge
END
delete test
DELETED
get test
END
stats
STAT pid 56124
STAT time 1373377481
STAT version yrmcds version 0.9.0
STAT pointer_size 64
STAT rusage_user 0:205968
STAT rusage_system 0:180972
STAT curr_items 0
STAT total_items 1
STAT bytes 0
STAT limit_maxbytes 1073741824
STAT threads 10
STAT gc_count 4
STAT slaves 0
STAT last_expirations 0
STAT last_evictions 0
STAT evictions 0
STAT last_gc_elapsed 52120
STAT total_gc_elapsed 226951
END

おわりに

statsが取れるので、既存のmemcachedの監視運用ノウハウがそのままつかえるので運用に投下するまでは簡単に出来そうです。
memcachedプロトコル(ほぼ)互換なので、既存のmemcachedクラスタに入れて試験などするのもそれほど苦にならないでしょう。

レプリカ周りはまた別途確認したいと思います。

UCD-DISKIO-MIB::diskIOTable とかを取りたいのに UCD-SNMP-MIB::ucdExperimental と出てしまい取れなくて生きるのがつらいとき

cloudforecast とかを使ってdiskIOを収集するにあたって diskIONWritten を指定して取るケースは多々あると思います。

しかしながら

$ snmpwalk -v 2c -c public installer1 1.3.6.1.4.1.2021.13.15.1.1.4
UCD-SNMP-MIB::ucdExperimental.15.1.1.4.1 = Counter32: 0
〜 中略 〜
UCD-SNMP-MIB::ucdExperimental.15.1.1.4.25 = Counter32: 4062435328
UCD-SNMP-MIB::ucdExperimental.15.1.1.4.26 = Counter32: 51200
UCD-SNMP-MIB::ucdExperimental.15.1.1.4.27 = Counter32: 4062384128
UCD-SNMP-MIB::ucdExperimental.15.1.1.4.28 = Counter32: 4062384128
UCD-SNMP-MIB::ucdExperimental.15.1.1.4.29 = Counter32: 0

とか出てしまって値が取れない事があるときは下記のように net-snmp をインストールすれば出るはず。

$ ./configure --with-perl-modules --with-mib-modules="ucd-snmp/diskio"
$ make
# make install

これで CloudForecast::Data::Diskio に "schema and result values is no match" とか怒られることもなくなり運用が捗ります。

MySQL5.6 だと ruby-mysql2 が入ったふりをする

Railsアプリをインストールする際にMySQL 5.6だと、mysql2のインストールが問題なく行ったかのように見えるが、実際にアプリを起動しようとすると

I, [2013-04-22T14:30:03.908634 #10246]  INFO -- : Refreshing Gem list                                                                                       
/home/nn/redmine/redmine-2.2.2/vendor/bundle/ruby/1.9.1/gems/activesupport-3.2.11/lib/active_support/dependencies.rb:251:in `require': Please install the mysql2 adapter: `gem install activerecord-mysql2-adapter` (/home/nn/redmine/redmine-2.2.2/vendor/bundle/ruby/1.9.1/gems/mysql2-0.3.11/lib/mysql2/mysql2.so: undefined symbol: __cxa_pure_virtual - /home/nn/redmine/redmine-2.2.2/vendor/bundle/ruby/1.9.1/gems/mysql2-0.3.11/lib/mysql2/mysql2.so) (LoadError)

とか言われて起動せず生きるのがつらい状況になっていた。

調べてみると @n0ts さんが



ということをおっしゃっており、実際その通りやってみたら解決して無事アプリが動き始めた。

mysql2の何が悪いのかはこれから調べる必要があるが、新規に Rails 開発するときに MySQL5.6 で始めると生きるのがつらいことになるかもしれないのでメモ。

MySQL Casualにおける 事前登録不要/先着順受付 という開催方式に関する報告

MySQL Casualという、気づくともう2,3年前くらいからやっているイベントがあります。
このほどそれの第四回を開催できる運びとなり、昨今言われている「ドタキャン/何も言わずに来ない」系のなんとやらをどうにかする施策を打ってみようと思ってやったことについてまとめみたいなのを書いておきます。

結論

参加者の方々を細かく追わなくて良いが、不特定多数を相手にする必要がある場合は今回MySQL Casualが取った「事前登録不要/先着順受付/指定時間で締め切り」という手法が有効です。
参加者の方々を細かく追う必要がある場合においても、受付でケア出来るのであれば有効です。

今後のMySQL Casualについては基本「事前登録不要/先着順受付/指定時間で締め切り」というやり方で行こうと思います。

なぜそうするのか

事前登録した瞬間は行きたいと思っていても、当日までに事情が変わるケースというのは往々にしてあるからです。
そういったことが「事前登録不要/先着順受付/指定時間で締め切り」にすることで考慮せずに済むように(参会者も開催者も)なるわけで、双方の負担が減ります。

問題はないのか

問題をどのように定義するかによりますが、今までは開催者が多くのリスクを背負い込む形になっていたのが、開催者と参加者が負うリスクがより平等になるという点で問題は(今までに比べて)格段に減るという印象です。

「当日本当に行ける/行きたい人」が参加できる枠組みに変えたほうがいいよねというのに反論がある人は居ないんじゃないかなと思います。

このやり方が合わないケース

事前にキャッシュアウトが発生するような、もう一段高い規模のイベントには合わないでしょう。
また、極めて限定された人を集めて、もっと絞り込んだ話(例えばRiakシリアスのような)をしたい場合には合いません。

前者は事前に集金してリスクを軽減するという手が取れるし、後者は紹介制にして人同士のつながりを担保にしているわけなので、これもひとつのやり方です。

まとめ

MySQL Casual vol.4 はとってもカジュアルだったと思うし、今回初参加が8割くらいの勢いでいらっしゃって、この形式にしてとっても良かったので参考にできるケースがあればどうぞ、という話です。
質問があれば @myfinder を捕まえて聞けば答えられることは答えます。

Riak Serious Talksで(フィクションだけど)ナマナマシイ話しをしてきた

SEE ALSO: Riak Serious Talksやった

(フィクションだけど)参加してきました。

Riak Serious Talks on Zusaar
Riak Serious Talk #1 #riak_serious - Togetter

内容は(フィクションだけど)アレなので置いておいて、勉強会の体裁としてちょっと新しいかなーと思うので、それについて。

招待制

今回は全力で(フィクションだけど)Riakを使い始めた現状について(フィクションだけど)トークして(フィクションだけど)フィードバックや意見をもらうことを考えており「(フィクションだけど)あ…ありのまま今起こっている事を話すぜ」ということで参加をしており、参加者の皆様もそれをよく(フィクションだけど)理解いただけて(フィクションだけど)話をできたと思っております。招待制とっても安心出来ますね。

また、受付をしておりましたが「誰の招待もない」選択のまま突撃してくる方がいらっしゃり、それはとても勇気のあることだと思いましたが、どんなに言っても聞かない人は聞かないというのもよくわかった次第です。

遅刻厳禁

いちいち拾いに行ってるとキリがないのでいいと思いました。
会場を貸していただける方の都合上受付をちゃんとする必要があるケースだとなおさらですね。

結論

MySQL Casual Talks vol.4 はシリアストークとは趣を変えて登録不要先着順受付という枠組みにしてみました。
ちなみに先着順という言葉が示す通り、席が埋まった時点で受付を終了します。
並んでいてもその時点で切ってお帰りいただくことになりますので、どうしても参加したいという方は適切な時間にお越しいただき、受付してください。

今後

Riak Serious Talks vol.2 があれば(フィクションだけど)その後の経過とか、(フィクションだけど)実際ガチで向き合っている話をしたいと思います。
少なくとも(フィクションだけど)「10年経ってないプロダクトは使えない」などと(フィクションだけど)言われないような状態になっていたいなぁ。

ついに顕在化した気軽な Perl コミュニティ

Perl 使っている人たちが気軽に情報共有出来て過去ログも見られる場所が Lingr に出来たようです。

http://lingr.com/room/perl_jp/

Lingr にはスマホアプリもあるので、いつでも気軽に参加出来るのがいいですね。
昨日はPrePANにupしていたモジュールにコメントが付いていることをこのチャンネル経由で教えてもらったりして、お気軽だけど捗っています。

SEE ALSO: http://blog.64p.org/entry/2013/03/13/195515
SEE ALSO: http://blog.livedoor.jp/xaicron/archives/54421824.html

Monitoring Casual #3 にいってきました

まずは会場提供のペパボさん、幹事の@ume3 さん @lamanotrama さん @tnmt さん調整ありがとうございました。
セルリアンタワー綺麗でGMOさんの会議室も設備良かったですね!

  • 自分の発表

前回の続きのとおり、監視の話はせず素直に今やっている事とぶち当たった問題などを話しました。
個別のWebサイトなどを開いて説明するなどしたので、スライドは用意しておりません。

f:id:myfinder:20130309171733p:plain

概ね上記のトピックについてひと通り駆け足で話をしました。
モニカジ #4 も引き続きこの流れで行こうかなと思っております。