facebook twitter hatena line email

Linux/KyotoTycoonインストール

提供: 初心者エンジニアの簡易メモ
2022年9月15日 (木) 02:35時点におけるAdmin (トーク | 投稿記録)による版 (centos7でgetpidエラーが出た場合)

(差分) ←前の版 | 最新版 (差分) | 次の版→ (差分)
移動: 案内検索

KyotoCabinetが必要なのでインストール

yum install gcc-c++
yum install zlib-devel
yum install lzo-devel.x86_64 lzma-devel.x86_64 xz-devel.x86_64
cd /usr/local/src
wget http://fallabs.com/kyotocabinet/pkg/kyotocabinet-1.2.78.tar.gz
tar zxfv kyotocabinet-1.2.78.tar.gz
cd kyotocabinet-1.2.78
./configure
make
make install

KyotoTycoonインストール(64bit

yum install lua-devel.x86_64
cd /usr/local/src
wget http://fallabs.com/kyototycoon/pkg/kyototycoon-0.9.56.tar.gz
tar zxfv kyototycoon-0.9.56.tar.gz
cd kyototycoon-0.9.56
./configure
make
make install

centos7でgetpidエラーが出た場合

エラーメッセージ

ktdbext.h:274:29: エラー: ‘getpid’ was not declared in this scope

修正方法として、以下を#includeの並びの下に追加

$ vi ktdbext.h
#include <unistd.h>

参考:https://qiita.com/zaneli@github/items/42a07bbed59efdebf779

起動・停止スクリプトを/usr/local/sbinと/etc/init.dにコピー

cp /usr/local/src/kyototycoon-0.9.56/lab/ktservctl /usr/local/sbin/
cp /usr/local/src/kyototycoon-0.9.56/lab/ktservctl /etc/rc.d/init.d/ktserver

KyotoTycoon起動

/etc/rc.d/init.d/ktserver start
>Executing: ktserver -port 1978 -tout 30 -th 8 -dmn -pid /var/ktserver/pid -log /var/ktserver/log -ls /var/ktserver/casket.kch#bnum=2000000#msiz=128m#dfunit=8
Done

起動エラー修正

/etc/rc.d/init.d/ktserver: line 68: ktserver: command not found
$ vi /etc/rc.d/init.d/ktserver
- cmd="ktserver"
+ cmd="/usr/local/bin/ktserver"

もしくはシンボリックを追加

ln -s /usr/local/bin/ktremotemgr /usr/bin/ktremotemgr

KyotoTycoon停止

/etc/rc.d/init.d/ktserver stop

KyotoTycoon自動起動設定

以下コードを/etc/rc.d/init.d/ktserverの4行目に追加する
4 # Startup script for the server of Kyoto Tycoon
5 + # chkconfig:   - 80 20
6 + # description: Kyoto Tycoon - KVS Database
/sbin/chkconfig --add ktserver
/sbin/chkconfig ktserver on
/sbin/chkconfig --list | grep ktserver
> ktserver         0:off  1:off  2:on  3:on  4:on  5:on  6:off

起動確認

/usr/local/bin/ktremotemgr set k1 v1
/usr/local/bin/ktremotemgr get k1
>v1
/usr/local/bin/kttimedmgr list -pv /var/ktserver/casket.kch
>k1	v1

起動確認エラー(part1

ktserver: error while loading shared libraries: libkyototycoon.so.2: cannot open shared object file: No such file or directory
# vi /etc/ld.so.conf.d/ktserver.conf
/usr/local/lib #追加
# ldconfig #conf反映

起動確認エラー(part2

/usr/local/bin/ktremotemgr: DB::open failed: : 6: network error: connection failed

適切にktserverがstartしているか確認

memcache互換で使用している場合は、plex port=が設定されているか。

DBが壊れている可能性があるので一旦退避してみる(退避の間はそのアクセスできません)

mv /var/ktserver/casket.kch /var/ktserver/casket_bk.kch

手動で動かしたものと、portがかぶってる可能性がある。

一度、serverを再起動してみる

デフォルトポート

1978
TokyoTyrantと同じなので注意

手動で起動(一時確認に使用)

/usr/local/bin/ktserver \
-port 1978 \
-tout 10 \
-th 16 \
-log /var/ktserver/log -ls \
-ulog /var/ktserver/ulog -ulim 256m \
-sid 1 \
-bgs /var/ktserver/snapshot -bgsi 180 -bgsc lzo \
-pid /var/ktserver/kt.pid \
-plsv /usr/local/kyototycoon/libexec/ktplugservmemc.so \
-plex "port=11401#opts=f#tout=10" \
"/var/ktserver/db_casket.kch#opts=l#bnum=20000000#msiz=12g#dfunit=8"

memcachedプロトコルを使う場合のポートは11401とした

起動オプション

th=8 処理スレッド数
bnum=2000000 バケット数は100万レコードの2倍値
opts=ls データベースオプションは、4バイトアドレッシング、線形リスト
ktopts=p データは永続化
msiz=12g   DBファイルの先頭2GB分をmmapでマップしてIOを効率化することを意味する(搭載メモリが16Gぐらいだと12Gで設定
dfunit 8個のフラグメンテーションを検出した際に解消
ktcapsiz=10g 最大メモリ使用量。(LRU)

参考:http://blog.kazupon.jp/post/20476065695/kt-msgpack-fork

参考:http://seesaawiki.jp/w/kurt0027/d/kyototycoon

参考:http://www.slideshare.net/estraier/kyoto-tycoon-guide-in-japanese

オプション設定例

普通のキャッシュサーバ

#bnum=20000000#ktcapsiz=10g

永続的キャッシュサーバ

ktserver ... casket.kch#opts=l#bnum=2000000#msiz=1g#dfunit=8

参考:http://www.slideshare.net/estraier/kyoto-tycoon-guide-in-japanese

参考:http://fallabs.com/blog-ja/promenade.cgi?id=98

メモリ最適化

デフォでは使えないので必ずメモリ数は変更する

$ vi /etc/rc.d/init.d/ktserver
26 dbname="$basedir/casket.kch#bnum=2000000#msiz=12g#dfunit=8"

サーバが16GB搭載してれば12GBぐらいとする(msiz=12g

サーバが6GB搭載してれば4GBぐらいとする(msiz=4g

サーバが1GB搭載してれば600MBぐらいとする(msiz=600m

ログの場所

tail -f /var/ktserver/log

ファイルハッシュデータベースの場所

ls -ltA /var/ktserver/casket.kch

起動バッチにmemcache互換を入れる

デフォルトでは互換ではない

$ vi /etc/rc.d/init.d/ktserver

上記に以下を入れる

67     fi
68   + cmd="$cmd -plsv /usr/local/src/kyototycoon-0.9.56/ktplugservmemc.so"
69   + cmd="$cmd -plex port=11401#opts=f#tout=10"
70     cmd="$cmd $dbname"

/usr/local/src/kyototycoon-0.9.56/ktplugservmemc.soは適宜locateで確認して存在するktplugservmemc.soを入れる

php連携

memcacheプロトコルがまんま使えるのでmemcache接続コードのportを変更するだけ

telnetで動作確認

$ telnet 127.0.0.1 11401
set key1 0 3600 6
value1
get key1
VALUE key1 0 6
value1
END

終了はctrl+]

参考

http://cloud-berry.jp/wordpress/?p=161

バックアップなど http://d.hatena.ne.jp/fat47/?of=43

バックアップなど http://seesaawiki.jp/w/kurt0027/d/kyototycoon