Fork Me
TTserver教程
11 Feb 2015 - by @ssdr

[TOC]

#介绍 Tokyo Tyrant是Tokyo Cabinet DBM的网络接口。TT用于解决并发远程连接TC带了的问题。包括管理数据库的服务进程和客户端访问库。

TT支持所有兼容Memcached和HTTP的协议,因此几乎所有的平台和编程语言都可以使用TT。

由于服务端使用TC的抽象接口,客户端可以通过通用接口使用六类接口:内存hash数据库,内存tree数据库,hash,B+ tree数据库,定长数据库,表数据库。

#服务端程序

##ttserver

ttserver [-host name] [-port num] [-thnum num] [-tout num] [-dmn] [-pid path] [-kl] [-log path] [-ld|-le] [-ulog path] [-ulim num] [-uas] [-sid num] [-mhost name] [-mport num] [-rts path] [-rcc] [-skel name] [-mul num] [-ext path] [-extpc name period] [-mask expr] [-unmask expr] [dbname]

发送SIGINT和SIGTERM信号(ctrl-c),正常停止程序;
发送SIGHUP信号,重启服务;
如果端口号小于等于0,使用unix domain socket;
命令成功返回0,失败返回非0。

##ttservctl 服务启动脚本

##ttulmgr 导入导出更新日志的工具

#客户端程序

##tcrtest 功能和性能测试工具

##tcrmttest 多线程下的功能测试工具

##tcrmgr 远程数据库API及其应用的测试和调试工具

#Tutorial

##基本用法

ttserver

默认用法,端口1978,内存hash数据库,用于保存cache数据。

tcrmgr put localhost one first

测试保存数据

tcrmgr get localhost one

测试获取数据

tcrmgr mget localhost one two three

测试一次获取多条数据

ttserver casket.tch

通过指定.tch后缀文件名,启动hash数据库库(非内存)
保存数据,关闭数据库,在重新打开,可以获取上次存的数据(此处略)

##daemon

ttserver -dmn -pid /tmp/ttserver.pid /tmp/casket.tch

注意,指定pid文件目录,并且使用绝对路径

 kill -TERM `cat /tmp/ttserver.pid`

关闭后端进程,发送TERM信号

##备份和恢复 以下是一个备份恢复的例程。

1,启动服务

ttserver casket.tch

2,保存数据

tcrmgr put localhost one first
tcrmgr put localhost two second
tcrmgr put localhost three third

3,使用tcrmgr copy命令备份数据库文件,注意,文件在服务端的文件系统中创建

tcrmgr copy localhost backup.tch

4,通过ctrl-c终止服务,并删除数据库文件

rm casket.tch

5,从备份文件恢复数据库,并重启服务

 cp backup.tch casket.tch
 ttserver casket.tch

6,检查数据一致性,成功~

tcrmgr mget localhost one two three

##更新日志 以下是一个通过更新日志恢复的例程。

1,启动服务,开启ulog

ttserver -ulog /path/to/ulog casket.tch

2,保存数据

tcrmgr put localhost one first
tcrmgr put localhost two second
tcrmgr put localhost three third

3,通过ctrl-c终止服务,并删除数据库文件

rm casket.tch

4,重启服务

mv ulog ulog-back
mkdir ulog
ttserver -ulog ulog casket.tch

5,在客户端,通过tcrmgr restore命令恢复数据库

tcrmgr restore localhost ulog-back

6,检查数据一致性,成功~

tcrmgr mget localhost one two three

##复制 复制是一种用于多个数据库服务器的数据同步机制。源服务器为master,目标服务器为slave。复制机制的先决条件:

  • mater必须开启ulog
  • master必须指定唯一ID
  • 每个slave必须开启ulog,因为他们可能成为master(fail over时)
  • 每个slave必须指定唯一ID,原因同上
  • 每个slave必须指定master的地址和端口号
  • 每个slave必须指定复制时间戳文件

以下描述如何启动一主(端口1978)一从(端口1979)复制。

1,启动master

mkdir ulog-1
ttserver -port 1978 -ulog ulog-1 -sid 1 casket-1.tch

2,启动slave

mkdir ulog-2
ttserver -port 1979 -ulog ulog-2 -sid 2 
         -mhost localhost -mport 1978 -rts 2.rts casket-2.tch

3,向master存数据

tcrmgr put -port 1978 localhost one first
tcrmgr put -port 1978 localhost two second
tcrmgr put -port 1978 localhost three third

4,检查主从一致性

tcrmgr mget -port 1978 localhost one two three
tcrmgr mget -port 1979 localhost one two three  

5,假设主挂掉,ctrl-c,移除数据库文件

rm casket-1.tch

6,关闭从,ctrl-c,重启为新的主

ttserver -port 1979 -ulog ulog-2 -sid 2 casket-2.tch

7,添加新的从(端口1980)

mkdir ulog-3.tch
ttserver -port 1980 -ulog ulog-3 -sid 3
         -mhost localhost -mport 1979 -rts 3.rts casket-3.tch

8,检查新主新从的一致性

tcrmgr mget -port 1979 localhost one two three
tcrmgr mget -port 1980 localhost one two three

为了支持更高的可用性,TT支持dual master(两个服务互相复制,互相做主从)。注意,同时更新主可能出现不一致性。

##设置复制 不宕机设置数据库的复制,首先,准备下面的脚本用于备份操作,保存为”ttbackup.sh”,设置可执行权限。

#!/bin/sh
srcpath="$1"
destpath="$1.$2"
rm -f "$destpath"
cp -f "$srcpath" "$destpath"

然后,启动master,开启ulog

mkdir ulog-1
ttserver -port 1978 -ulog ulog-1 -sid 1 casket-1.tch

存储一些数据

tcrtest write -port 1978 localhost 10000

检查一致性

tcrmgr list -port 1978 -pv localhost

备份数据库库

tcrmgr copy -port 1978 localhost '@./ttbackup.sh'

确认备份文件保存为“casket-1.tch.xxxx”,(xxxx为backup文件的时间戳),然后启动slave

cp casket-1.tch.xxxxx casket-2.tch
echo xxxxx > 2.rts
mkdir ulog-2
ttserver -port 1979 -ulog ulog-2 -sid 2 -rts 2.rts casket-2.tch

注意以上操作没有指定master。我们模拟在设置replica的时候,master写入了一些数据

tcrmgr put -port 1978 localhost one first
tcrmgr put -port 1978 localhost two second
tcrmgr put -port 1978 localhost three third

检查主从差异

tcrmgr inform -port 1978 localhost
tcrmgr inform -port 1979 localhost

为slave指定master,此时开始主从复制,差异消失

tcrmgr setmst -port 1979 -mport 1978 localhost localhost

确认slave的master,差异消失

tcrmgr inform -port 1979 -st localhost

##调优

  1. 如果你使用hash数据库,设置”#bnum=xxx”以提高性能,此参数设置bucket数量,应该多于保存的数据条数;
  2. 如果你使用B+树数据库,设置”#lcnum=xxx#bnum=yyy”以提高性能,lcnum指定缓存的最大叶子节点数,如果内存允许,应该大一些,bnum指定bucket数量,应该多于保存的数据条数的1/128;
  3. 如果大量用户访问服务,确保将每个进程的文件描述符数量限制设为ulimit;
  4. 为了处理服务峰值访问时的高速查询,可以设置内存hash/tree数据库和文件hash/tree数据库联合复制。master处理内存数据库,用于高峰期间的查询,因为其不能保证数据的持久性,通过将数据存于文件数据库的slave复制弥补其不足。

##memcached客户端

##http客户端


详情请看:Fundamental Specifications of Tokyo Tyrant

另外,听说Kyoto Tycoon: a handy cache/storage server性能更好