読者です 読者をやめる 読者になる 読者になる

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

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

うわさの 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クラスタに入れて試験などするのもそれほど苦にならないでしょう。

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