TTserver安装配置及优化

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

TTserver安装配置及优化
一、安装配置:
1.下载源码包:
wget
/doc/5417324300.html,/tokyocabinet/tok yocabinet-1.4.46.tar.gz
wget
/doc/5417324300.html,/project/tokyo cabinet/tokyotyrant/1.1.33/tokyotyrant-1.1.33.t ar.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#rc num=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 详见:/doc/5417324300.html,/repository/Net_To kyoTyrant/
注:在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/T okyoTyrant.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_i d=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/ ,
ech o xxxxxx > “$basedir/rts”
写入备份时间点(压缩文件名中包含),即恢复时间点
单独启动ttserver :
ttserver database_name.tch
从日志恢复:
tcrmgr restore -port port -rcc localhost ulog
ctrl+c停掉ttserver,然后使用 ./ttservctl start 启动,master结构重新建立
提示:日志增量恢复环节应避免受其他ttserver的服务器影响,如可以使用一个不使用的端口进行恢复,这样数据也不会影响到其他服务器,恢复后再用原来的启动脚本启动,形成原来的dual master 结构。

相关文档
最新文档