一、安装配置:
1.下载源码包:
wget http://fallabs.com/tokyocabinet/tokyocabinet-1.4.46.tar.gz
wget http://jaist.dl.sourceforge.net/project/tokyocabinet/tokyotyrant/1.1.33/tokyotyrant-1.1.33.tar.gz
2.编译安装tokyocabinet数据库:
yum install bzip2-devel -y
tar zxvf tokyocabinet-1.4.46.tar.gz
cd tokyocabinet-1.4.46
./configure
make
make install
3.编译安装tokyotyrant:
tar zxvf tokyotyrant-1.1.33.tar.gz
cd tokyotyrant-1.1.33
./configure
make
make install
4.创建tokyotyrant数据文件存放目录以及日志文件,同步日志文件:
mkdir -p /ttserver/data #数据文件
mkdir -p /ttserver/ulog #同步日志
mkdir -p /ttserver/log #日志文件
二、启动参数说明 :
ttserver -host -port -thnum -tout [-dmn] -pid -log [-ld|-le] -mul -ulog -ulim [-uas] -sid -mhost -mport -rts [dbname]
-host name : 指定需要绑定的服务器域名或IP地址。默认绑定这台服务器上的所有IP地址。
-port num : 指定需要绑定的端口号。默认端口号为1978
-thnum num : 指定线程数。默认为8个线程.
-tout num : 指定每个会话的超时时间(单位为秒)。默认永不超时。
-dmn : 以守护进程方式运行。
-pid path : 输出进程ID到指定文件(这里指定文件名)。
-log path : 输出日志信息到指定文件(这里指定文件名)。
-ld : 在日志文件中还记录DEBUG调试信息。
-le : 在日志文件中仅记录错误信息。
-ulog path : 指定同步日志文件存放路径(这里指定目录名)。
-ulim num : 指定每个同步日志文件的大小(例如128m)。
-uas : 使用异步IO记录更新日志(使用此项会减少磁盘IO消耗,但是数据会先放在内存中,不会立即写入磁盘,如果重启服务器或ttserver进程被kill掉,将导致部分数据丢失。一般情况下不建议使用)。
-sid num : 指定服务器ID号(当使用主辅模式时,每台ttserver需要不同的ID号)
-mhost name : 指定主辅同步模式下,主服务器的域名或IP地址。
-mport num : 指定主辅同步模式下,主服务器的端口号。
-rts path : 指定用来存放同步时间戳的文件名。
#bnum=xxx”来提高性能。它可以指定bucket存储桶的数量。例如指定“#bnum=1000000”,就可以将最新最热的100万条记录缓存在内存中
xmsiz=xxx指使用内存大小
lcnum=xxx
•-host name : 指定主机名称或服务器的地址。
•-port num : 指定端口号,.默认情况下是1978。
•-thnum num : 指定的工作线程数。.默认情况是8。
•-tout num : specify the timeout of each session in seconds.
•-tout num :以秒为单位指定每个会话超时。默认情况下,没有超时指定。
•-dmn : 工作作为一个守护进程。
•-pid path :设置文件路径存储进程ID。
•-kl :如果检测到纪录进程ID文件,杀死该ID的进程。
•-log path :输出日志消息到文件。
•-ld : 日志也记录调试信息。
•-le : 日志只记录错误信息。
•-ulog path : 指定更新日志目录。
•-ulim num : 指定每个更新日志文件的大小限制。
•-uas :使用异步I/O更新日志。
•-sid num : 指定服务器的ID。
•-mhost name : 指定复制主服务器的主机名。
•-mport num : 指定复制主服务器的端口号。
•-rts path : 指定复制时间戳文件。
•-rcc : 复制的一致性检查。
•-skel name : 指定骨骼数据库库的名称,什么意思不太明白?
•-mul num : 指定多个数据库机制的分区数目。
•-ext path : 指定脚本语言的扩展文件路径。
•-extpc name period : 指定函数的名称和周期命令的调用周期。
•-mask expr : 指定禁止执行的命令
•-unmask expr : 指定允许的命令的名称。
Tokyo Cabinet 单个数据库文件记录数超过1亿,性能会急剧下降。Tokyo Tyrant 的新版本支持了数据库文件拆分,例如 ttserver -mul 256 database.tcb 启动TT时,将会自动拆分成256个文件,存取时,根据key哈希到不同的文件
三、启动或停止ttserver:
1.编辑/usr/local/sbin/ttservctl,设置相关参数:
cat /usr/local/sbin/ttservctl
#! /bin/sh
#----------------------------------------------------------------
# Startup script for the server of Tokyo Tyrant
#----------------------------------------------------------------
# configuration variables
prog="ttservctl"
cmd="ttserver"
basedir="/ttserver/" #数据库目录
port="1978" #ttserver端口
pidfile="$basedir/pid" #输出进程ID到/ttserver/pid文件
logfile="$basedir/log/ttserver.log" #输出日志信息到/ttserver/log/ttserver.log文件
ulogdir="$basedir/ulog/" #指定同步日志文件存放路径
ulimsiz="256m" #对单个ulog文件限制,超过将新建一个文件
sid=1 #server id同mysql,不能有重复的
mhost="192.168.100.204" #master的地址(单机或主服务器可以是本机ip也可以是127.0.0.1)
mport="1978" #ttserver端口
rtsfile="$basedir/rts" #replication的时间记录文件
dbname="$basedir/casket.tch#bnum=1000000" #xmsiz=最大使用内存”
maxcon="65535"
retval=0
2.启动ttserver服务器:
ttservctl start
3.关闭ttserver服务器:
ttservctl stop
提示:可以放入rc.local中, ttserver启动脚本如果错误会有提示,也可以检查端口是否启用来确定ttserver的启动是否成功
四、优化性能:
1.如果使用hash数据库我们可以指定#bnum=xxx来提高性能。xxx大于或等于我们的记录总数。
2.如果使用B+ tree数据库我们可以通过指定"#lcnum=xxx#bnum=yyy" 来提高性能.
第一个参数指定被缓存的最大叶子节点数,受内存容量限制,
第二个参数指定桶的数量,它应该大于总记录数的1/128.
3.增加文件描述符。如果有大量的客户端连接,确保我们的文件描述符够用。系统默认是1024,我们可以用使用“ulimit”来重新设定 ulimit -SHn 51200
比如下面的单机实例启动脚本:
#!/bin/sh
ulimit -SHn 51200
ttserver -host 127.0.0.1 -port 11212 -thnum 8 -dmn -pid /ttserver//pid -log /ttserver//log/ttserver.log -le -ulog /ttserver//ulog/ -ulim 256m -sid 1 -rts /ttserver//rts /ttserver//database.tch#bnum=10000000#xmsiz=434217728#rcnum=20000
#使用hash数据库,最大会缓存20000个记录,最大使用内存434217728bytes(414M),bucket存储桶的数量10000000。
4.定期优化,整理数据文件碎片,优化命令:
tcrmgr optimize -port port host
提示:整理时会锁库,读写都锁定
五、调用:
1、任何Memcached客户端均可直接调用tokyotyrant。
2、还可以通过HTTP方式调用,下面以Linux的curl命令为例,介绍如何操作tokyotyrant:
(1)、写数据,将数据“value”写入到“key”中:curl -X PUT http://127.0.0.1:1978/key -d "value"
(2)、读数据,读取“key”中数据:curl http://127.0.0.1:1978/key
(3)、删数据,删除“key”:curl -X DELETE http://127.0.0.1:1978/key
3. PHP 的 API 接口程序以及 DEMO 详见:http://openpear.org/repository/Net_TokyoTyrant/
注:在32位操作系统下,作为 Tokyo Tyrant 后端存储的 Tokyo Cabinet 数据库单个文件不能超过2G,而64位操作系统则不受这一限制。所以,如果使用 Tokyo Tyrant,推荐在64位CPU、操作系统上安装运行。在编译Tokyo cabinet的时候,使用如下编译选项就可以突破2G限制:--enable-off64
项目中运用的实例:统计论坛中帖子的点击数量
<?php
define('TT_PATH', substr(dirname(__FILE__), 0, -7));
require_once(TT_PATH.'/bbs/TokyoTyrant.php');
$ttObject = new Net_TokyoTyrant();
$memObject = new Memcache();
//连接TT
$memObject->connect('192.168.100.202',1978);
//写入点击数 以 fid_$fid 为 Key 保存对应的域名值
function hitsSet($fid, $num)
{
global $memObject;
$hitskey = "fid_".$fid; //key
$res = $memObject->get($hitskey );
if(empty($res)) {
$memObject->set($hitskey ,$num); //设置 fid_id=>num
} else {
$memObject->replace($hitskey , $num); //重置替换
}
$memObject->close(); //一定要记得关闭,否则 TIME_OUT 进程会越来越多
}
//获取点击数
function hitsGet($fid)
{
global $memObject;
$groupkey = "fid_".$fid; //key
$res = $memObject->get($fid); //获取value
$num = empty($res) ? '0' : $res;
return $num;
$memObject->close();
}
?>
六、TTserver的监控、备份与恢复
1.TTserver的监控:
监控命令:
tcrmgr inform -st -port 服务器使用的端口 监控服务地址
监控程序提供数据项包括:内存使用,数据文件大小,读写次数,未命中key数量等,由cacti定时读取实现监控
示例地址:http://…/cacti/graph.php?action=view&rra_id=all&local_graph_id=1050
增加磁盘io监控,iotop (iotop要求linux内核2.6.20以上)
提示:具体阀值可以设定iotop占总量的80%
2.TTserver的备份:
(1).全量热备份
备份命令为:
tcrmgr copy -port 1978 localhost dpath.tch.xxxxx (其中xxxxx为备份时间)
根据业务需求及数据库运行状态决定备份的频度,全量热备时数据库库会写锁定,读不受影响。全量备份需记录备份时间点以提供replication恢复时所用,时间记录点精确的微妙,可记录到备份文件名中,如backup.tch.1259474040630024。
示例备份脚本:
[ -n "$1" ] || { echo “input port number”; exit; }
[ -n "$2" ] || { echo “input backup dir”; exit; }
backup_date=`date +%s%N`
backup_date=`expr $backup_date / 1000`
tcrmgr copy -port ${1} localhost ${2}/backup_${1}.tch.${backup_date}
echo “back up finish! ${2}/backup_${1}.tch.${backup_date}”
(2).增量备份ulog
ttserver产生的ulog在”$basedir/ulog”目录,设置了ulimsiz后会按文件尺寸进行切割并按数据升序命名,可以根据备份的频度,按ulog文件最后修改时间,备份到ulog最大命名数字的前一个文件,同时也需记录备份时间,可将时间记录在打包备份的文件名中,如backup_ulog.1259474040630024.tar.gz, 和全量备份一样,精确到微妙。
提示:全量备份速度和服务器情况有关,基本接近直接copy速度
3.TTserver的恢复:
(1).使用replication恢复
根据备份方案中数据库全量备份方法得到的备份库,如backup.tch.xxxxxx ,
echo xxxxxx > “$basedir/rts”
写入备份时间点,即恢复时间点
cp backup.tch.xxxxx database_name.tch
启动:
./ttservctl start
恢复的库会根据时间点去master库同步数据,实现恢复
(2).使用日志增量恢复
先使用前一个全量备份的数据库文件作为基数据库,下线要整理的ttserver。
清空原来的日志,然后解压,再cp 备份的ulog文件 $basedir/ulog/ ,
echo xxxxxx > “$basedir/rts”
写入备份时间点(压缩文件名中包含),即恢复时间点
单独启动ttserver :
ttserver database_name.tch
从日志恢复:
tcrmgr restore -port port -rcc localhost ulog
ctrl+c停掉ttserver,然后使用 ./ttservctl start 启动,master结构重新建立
提示:日志增量恢复环节应避免受其他ttserver的服务器影响,如可以使用一个不使用的端口进行恢复,这样数据也不会影响到其他服务器,恢复后再用原来的启动脚本启动,形成原来的dual master结构。
转自:http://wenku.baidu.com/view/5e5be4174431b90d6c85c74d.html