facebook twitter hatena line email

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

提供: 初心者エンジニアの簡易メモ
移動: 案内検索
(ページの作成:「==KyotoCabinetの準備== 開発ツールを入れる <pre> dnf groupinstall "Development Tools" -y dnf install -y \ zlib-devel \ lzo-devel \ xz-devel \ lua-devel </pre>...」)
 
(dir設定)
 
(同じ利用者による、間の10版が非表示)
行72: 行72:
 
  ldconfig -p | grep kyoto
 
  ldconfig -p | grep kyoto
  
==起動・停止==
+
==dir設定==
 
<pre>
 
<pre>
mkdir /var/db/kt
+
#dir生成
/usr/local/bin/ktserver /var/db/kt/test.kch
+
sudo mkdir -p /var/ktserver
 +
sudo mkdir -p /var/ktserver/log
 +
sudo mkdir -p /var/ktserver/ulog
 +
sudo mkdir -p /var/ktserver/snapshot
 +
#権限変更
 +
sudo chown -R rocky:rocky /var/ktserver
 +
sudo chmod -R 755 /var/ktserver
 +
#logファイル設置
 +
sudo touch /var/ktserver/log/ktserver.log
 +
sudo chown rocky:rocky /var/ktserver/log/ktserver.log
 +
sudo chmod 644 /var/ktserver/log/ktserver.log
 
</pre>
 
</pre>
  
[ctrl+c]で停止
+
==起動・停止のテスト確認==
 
+
==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
+
 
+
==起動確認==
+
 
<pre>
 
<pre>
$ /usr/local/bin/ktremotemgr set -host localhost -port 1978 foo bar
+
/usr/local/bin/ktserver /var/ktserver/test_casket.kch
$ /usr/local/bin/ktremotemgr get -host localhost -port 1978 foo
+
bar
+
 
</pre>
 
</pre>
==起動確認エラー(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==
+
[ctrl+c]で停止
/usr/local/bin/ktremotemgr: DB::open failed: : 6: network error: connection failed
+
  
適切にktserverがstartしているか確認
+
==KyotoTycoonサービス設定==
 +
memcachedプロトコルを使う場合のポートは11401とした
  
memcache互換で使用している場合は、plex port=が設定されているか。
+
vi /etc/systemd/system/ktserver.service
 +
<pre>
 +
[Service]
 +
Type=simple
 +
ExecStart=/usr/local/bin/ktserver \
 +
-port 1978 \
 +
-tout 30 \
 +
-th 8 \
 +
-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/libexec/ktplugservmemc.so \
 +
-plex port=11401#opts=f#tout=30 \
 +
/var/ktserver/db_casket.kch#opts=l#bnum=2000000#msiz=1g#dfunit=8
  
DBが壊れている可能性があるので一旦退避してみる(退避の間はそのアクセスできません)
+
Restart=always
mv /var/ktserver/casket.kch /var/ktserver/casket_bk.kch
+
RestartSec=3
  
手動で動かしたものと、portがかぶってる可能性がある。
+
[Install]
 +
WantedBy=multi-user.target
 +
</pre>
  
一度、serverを再起動してみる
+
変更後に、以下、読み込みを必ず行う。
 +
sudo systemctl daemon-reload
  
==デフォルトポート==
+
起動
  1978
+
  sudo systemctl start ktserver
TokyoTyrantと同じなので注意
+
  
==手動で起動(一時確認に使用)==
+
自動起動
  /usr/local/bin/ktserver \
+
  sudo systemctl enable 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とした
+
状況確認
 +
systemctl status ktserver
  
 
==起動オプション==
 
==起動オプション==
行181: 行161:
 
==メモリ最適化==
 
==メモリ最適化==
 
デフォでは使えないので必ずメモリ数は変更する
 
デフォでは使えないので必ずメモリ数は変更する
$ vi /etc/rc.d/init.d/ktserver
+
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
行195: 行174:
 
==ファイルハッシュデータベースの場所==
 
==ファイルハッシュデータベースの場所==
 
  ls -ltA /var/ktserver/casket.kch
 
  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連携==
 
==php連携==
memcacheプロトコルがまんま使えるのでmemcache接続コードのportを変更するだけ
+
memcacheプロトコルが、まんま使えるのでmemcache接続コードのportを変更するだけ
  
 
==telnetで動作確認==
 
==telnetで動作確認==

2026年4月7日 (火) 18:20時点における最新版

KyotoCabinetの準備

開発ツールを入れる

dnf groupinstall "Development Tools" -y
dnf install -y \
zlib-devel \
lzo-devel \
xz-devel \
lua-devel

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

cd /usr/local/src
wget https://dbmx.net/kyotocabinet/pkg/kyotocabinet-1.2.80.tar.gz	
tar xvf kyotocabinet-1.2.80.tar.gz
cd kyotocabinet-1.2.80
./configure
make -j$(nproc)
make install

共有ライブラリ登録

echo "/usr/local/lib" > /etc/ld.so.conf.d/kyotocabinet.conf
ldconfig

確認

$ ldconfig -p | grep kyoto
	libkyotocabinet.so.16 (libc6,x86-64) => /usr/local/lib/libkyotocabinet.so.16
	libkyotocabinet.so (libc6,x86-64) => /usr/local/lib/libkyotocabinet.so
$ /usr/local/bin/kcutilmgr version
Kyoto Cabinet 1.2.80 (16.14:6) on Linux

KyotoTycoonの準備

dnf install -y gcc gcc-c++ make lua-devel
export CXXFLAGS="-std=gnu++11 -fpermissive"

KyotoTycoonインストール(64bit

cd /usr/local/src
wget https://dbmx.net/kyototycoon/pkg/kyototycoon-0.9.56.tar.gz
tar xvf kyototycoon-0.9.56.tar.gz
cd kyototycoon-0.9.56
export CPPFLAGS="-I/usr/local/include"
export LDFLAGS="-L/usr/local/lib"
./configure
make -j$(nproc)
make install

return 301なエラーが出る場合

エラー詳細

ktremotedb.h:301:16: エラー: cannot convert ‘bool’ to ‘char*’ in return 301 | return false;

ktremotedb.h の以下を修正して、再コンパイル

- return false;
+ return NULL;

KyotoTycoonライブラリ登録

echo "/usr/local/lib" > /etc/ld.so.conf.d/kyoto.conf
ldconfig

確認

ldconfig -p | grep kyoto

dir設定

#dir生成
sudo mkdir -p /var/ktserver
sudo mkdir -p /var/ktserver/log
sudo mkdir -p /var/ktserver/ulog
sudo mkdir -p /var/ktserver/snapshot
#権限変更
sudo chown -R rocky:rocky /var/ktserver
sudo chmod -R 755 /var/ktserver
#logファイル設置
sudo touch /var/ktserver/log/ktserver.log
sudo chown rocky:rocky /var/ktserver/log/ktserver.log
sudo chmod 644 /var/ktserver/log/ktserver.log

起動・停止のテスト確認

/usr/local/bin/ktserver /var/ktserver/test_casket.kch

[ctrl+c]で停止

KyotoTycoonサービス設定

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

vi /etc/systemd/system/ktserver.service

[Service]
Type=simple
ExecStart=/usr/local/bin/ktserver \
-port 1978 \
-tout 30 \
-th 8 \
-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/libexec/ktplugservmemc.so \
-plex port=11401#opts=f#tout=30 \
/var/ktserver/db_casket.kch#opts=l#bnum=2000000#msiz=1g#dfunit=8

Restart=always
RestartSec=3

[Install]
WantedBy=multi-user.target

変更後に、以下、読み込みを必ず行う。

sudo systemctl daemon-reload

起動

sudo systemctl start ktserver

自動起動

sudo systemctl enable ktserver

状況確認

systemctl status ktserver

起動オプション

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

メモリ最適化

デフォでは使えないので必ずメモリ数は変更する 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

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