facebook twitter hatena line email

「Linux/KyotoTycoonインストール」の版間の差分

提供: 初心者エンジニアの簡易メモ
移動: 案内検索
(起動エラー修正)
(centos7でgetpidエラーが出た場合)
 
(同じ利用者による、間の23版が非表示)
行4: 行4:
 
  yum install lzo-devel.x86_64 lzma-devel.x86_64 xz-devel.x86_64
 
  yum install lzo-devel.x86_64 lzma-devel.x86_64 xz-devel.x86_64
 
  cd /usr/local/src
 
  cd /usr/local/src
  wget http://fallabs.com/kyotocabinet/pkg/kyotocabinet-1.2.76.tar.gz
+
  wget http://fallabs.com/kyotocabinet/pkg/kyotocabinet-1.2.78.tar.gz
  tar zxfv kyotocabinet-1.2.76.tar.gz
+
  tar zxfv kyotocabinet-1.2.78.tar.gz
  cd kyotocabinet-1.2.76
+
  cd kyotocabinet-1.2.78
 
  ./configure
 
  ./configure
 
  make
 
  make
行20: 行20:
 
  make
 
  make
 
  make install
 
  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にコピー==
 
==起動・停止スクリプトを/usr/local/sbinと/etc/init.dにコピー==
行57: 行65:
 
  /usr/local/bin/ktremotemgr get k1
 
  /usr/local/bin/ktremotemgr get k1
 
  >v1
 
  >v1
 +
/usr/local/bin/kttimedmgr list -pv /var/ktserver/casket.kch
 +
>k1 v1
  
 
==起動確認エラー(part1==
 
==起動確認エラー(part1==
 
  ktserver: error while loading shared libraries: libkyototycoon.so.2: cannot open shared object file: No such file or directory
 
  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/kyoto.conf
+
  # vi /etc/ld.so.conf.d/ktserver.conf
 
  /usr/local/lib #追加
 
  /usr/local/lib #追加
 
  # ldconfig #conf反映
 
  # ldconfig #conf反映
 
  
 
==起動確認エラー(part2==
 
==起動確認エラー(part2==
 
  /usr/local/bin/ktremotemgr: DB::open failed: : 6: network error: connection failed
 
  /usr/local/bin/ktremotemgr: DB::open failed: : 6: network error: connection failed
 
KyotoCabinet-1.2.75から1.2.76、
 
kyototycoon-0.9.55から0.9.56に変更(2014/7時点で最新に)したらなおった。
 
  
 
適切にktserverがstartしているか確認
 
適切にktserverがstartしているか確認
 +
 +
memcache互換で使用している場合は、plex port=が設定されているか。
 +
 +
DBが壊れている可能性があるので一旦退避してみる(退避の間はそのアクセスできません)
 +
mv /var/ktserver/casket.kch /var/ktserver/casket_bk.kch
 +
 +
手動で動かしたものと、portがかぶってる可能性がある。
 +
 +
一度、serverを再起動してみる
  
 
==デフォルトポート==
 
==デフォルトポート==
行100: 行115:
 
  msiz=12g  DBファイルの先頭2GB分をmmapでマップしてIOを効率化することを意味する(搭載メモリが16Gぐらいだと12Gで設定
 
  msiz=12g  DBファイルの先頭2GB分をmmapでマップしてIOを効率化することを意味する(搭載メモリが16Gぐらいだと12Gで設定
 
  dfunit 8個のフラグメンテーションを検出した際に解消
 
  dfunit 8個のフラグメンテーションを検出した際に解消
  kcapsiz=10g 最大メモリ使用量。
+
  ktcapsiz=10g 最大メモリ使用量。(LRU)
  
 
参考:http://blog.kazupon.jp/post/20476065695/kt-msgpack-fork
 
参考:http://blog.kazupon.jp/post/20476065695/kt-msgpack-fork
  
 
参考:http://seesaawiki.jp/w/kurt0027/d/kyototycoon
 
参考:http://seesaawiki.jp/w/kurt0027/d/kyototycoon
 +
 +
参考:http://www.slideshare.net/estraier/kyoto-tycoon-guide-in-japanese
  
 
==オプション設定例==
 
==オプション設定例==
行117: 行134:
  
 
==メモリ最適化==
 
==メモリ最適化==
 +
デフォでは使えないので必ずメモリ数は変更する
 
  $ vi /etc/rc.d/init.d/ktserver
 
  $ vi /etc/rc.d/init.d/ktserver
 
 
  26 dbname="$basedir/casket.kch#bnum=2000000#msiz=12g#dfunit=8"
 
  26 dbname="$basedir/casket.kch#bnum=2000000#msiz=12g#dfunit=8"
  
 
サーバが16GB搭載してれば12GBぐらいとする(msiz=12g
 
サーバが16GB搭載してれば12GBぐらいとする(msiz=12g
  
==ログ==
+
サーバが6GB搭載してれば4GBぐらいとする(msiz=4g
 +
 
 +
サーバが1GB搭載してれば600MBぐらいとする(msiz=600m
 +
 
 +
==ログの場所==
 
  tail -f /var/ktserver/log
 
  tail -f /var/ktserver/log
 +
 +
==ファイルハッシュデータベースの場所==
 +
ls -ltA /var/ktserver/casket.kch
  
 
==起動バッチにmemcache互換を入れる==
 
==起動バッチにmemcache互換を入れる==
 
デフォルトでは互換ではない
 
デフォルトでは互換ではない
  
  $ vi /etc/rc.d/init.d/ktserverに以下を入れる
+
  $ vi /etc/rc.d/init.d/ktserver
 
+
上記に以下を入れる
 
  67    fi
 
  67    fi
 
  68  + cmd="$cmd -plsv /usr/local/src/kyototycoon-0.9.56/ktplugservmemc.so"
 
  68  + cmd="$cmd -plsv /usr/local/src/kyototycoon-0.9.56/ktplugservmemc.so"
行141: 行165:
 
memcacheプロトコルがまんま使えるのでmemcache接続コードのportを変更するだけ
 
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://cloud-berry.jp/wordpress/?p=161
 +
 +
バックアップなど
 +
http://d.hatena.ne.jp/fat47/?of=43
 +
 +
バックアップなど
 +
http://seesaawiki.jp/w/kurt0027/d/kyototycoon

2022年9月15日 (木) 02:35時点における最新版

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