友善交流技术...

利用Tokyo Tyrant构建兼容Memcached协议、支持故障转(转发)

上一篇 / 下一篇  2011-06-21 14:11:14 / 个人分类:性能测试

   是日本人 平林幹雄 开拓的一款 DBM 数据库,该数据库读写非常快,哈希模式写入100万条数据只需0.643秒,读取100万条数据只需0.773秒,是 Berkeley DB 等 DBM 的几倍。


   是由同一作者开拓的 Tokyo Cabinet 数据库网络接口。它拥有Memcached兼容协议 ,也可以通过HTTP协议 举办数据交换。

  Tokyo Tyrant 加上 Tokyo Cabinet,构成 了一款支持 高并发的散播式恒久存储体系 ,对任何原有Memcached客户妒攀? 唇玻?可以将Tokyo Tyrant当作 是一个Memcached,但是,它的数据是可以恒久存储的。这一点,跟新浪的性子 一样。

  相比Memcachedb而言,Tokyo Tyrant具有以下上风 :

  1、妨碍 转移:Tokyo Tyrant支持 双机互为主辅模式,主辅库均可读写,而Memcachedb如今支持 类似MySQL主辅库同步的行动 实现读写星散,支持 “主理 事 器可读写、赞助 做事器只读”模式。

这里应用 $memcache->addServer 而不是 $memcache->connect 去毗连 Tokyo Tyrant 做事器,是由于 当 Memcache 客户端应用 addServer 做事器池时,是按照 “crc32(key) % current_server_num”哈希算法将 key 哈希到差别 的做事器的,PHP、C 和 python 的客户端都是云云 的算法。Memcache 客户端的 addserver 具有妨碍 转移机制,当 addserver 了2台 Memcached 做事器,而此中 1台宕机了,那么 current_server_num 会由原来 的2变成 1。

  引用 memcached 官方网站和 PHP 手册中的两段话:

引用 http://www.danga.com/memcached/
If a host goes down, the API re-maps that dead host's requests onto the servers that are available.


Failover may occur at any stage in any of the methods, as long as other servers are available the request the user won't notice. Any kind of socket or Memcached server level errors (except out-of-memory) may trigger the failover. Normal client errors such as adding an existing key will not trigger a failover.





  2、日记 文件体积小:Tokyo Tyrant用于主辅同步的日记 文件比拟 小,约莫 是数据库文件的1.3倍,而Memcachedb的同步日记 文件非常大,假如 不定期清理,很轻易 将磁盘写满。
3、超大数据量下示意杰出 :

但是,Tokyo Tyrant 也有错误:在32位操纵 体系 下,作为 Tokyo Tyrant 后端存储的 Tokyo Cabinet 数据库单个文件不能高出 2G,而64位操纵 体系 则不受这一限定 。以是 ,假如 应用 Tokyo Tyrant,推举在64位CPU、操纵 体系 上安装运行。
 一、安装
  1、起首 编译安装tokyocabinet数据库

wget
tar zxvf tokyocabinet-1.3.1.tar.gz
cd tokyocabinet-1.3.1/
./configure
make
make install
cd ../



  2、然后编译安装tokyotyrant

wget
tar zxvf tokyotyrant-1.0.0.tar.gz
cd tokyotyrant-1.0.0/
./configure
make
make install
cd ../





  二、设置
  1、创建 tokyotyrant数据文件寄放 目次

mkdir -p /ttserver/



  2、启动tokyotyrant的主进程 (ttserver)
  (1)、单机模式

ulimit -SHn 51200
ttserver -host 127.0.0.1 -port 11211 -thnum 8 -dmn -pid /ttserver/ttserver.pid -log /ttserver/ttserver.log -le -ulog /ttserver/ -ulim 128m -sid 1 -rts /ttserver/ttserver.rts /ttserver/database.tch



  (2)、双机互为主辅模式
  做事器192.168.1.91:

ulimit -SHn 51200
ttserver -host 192.168.1.91 -port 11211 -thnum 8 -dmn -pid /ttserver/ttserver.pid -log /ttserver/ttserver.log -le -ulog /ttserver/ -ulim 128m -sid 91 -mhost 192.168.1.92 -mport 11211 -rts /ttserver/ttserver.rts /ttserver/database.tch



  做事器192.168.1.92:

ulimit -SHn 51200
ttserver -host 192.168.1.92 -port 11211 -thnum 8 -dmn -pid /ttserver/ttserver.pid -log /ttserver/ttserver.log -le -ulog /ttserver/ -ulim 128m -sid 92 -mhost 192.168.1.91 -mport 11211 -rts /ttserver/ttserver.rts /ttserver/database.tch



  (3)、参数阐发
  ttserver [-host name] [-port num] [-thnum num] [-tout num] [-dmn] [-pid path] [-log path] [-ld|-le] [-ulog path] [-ulim num] [-uas] [-sid num] [-mhost name] [-mport num] [-rts path] [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万条记实 缓存在内存中:

ttserver -host 127.0.0.1 -port 11211 -thnum 8 -dmn -pid /ttserver/ttserver.pid -log /ttserver/ttserver.log -le -ulog /ttserver/ -ulim 128m -sid 1 -rts /ttserver/ttserver.rts /ttserver/database.tch#bnum=1000000



  假如 大宗的客户端拜访ttserver,请确保文件刻画 符够用。很多 做事器的默认文件刻画 符为1024,可以在启动ttserver前应用 ulimit下令 前进这项值。譬喻:

ulimit -SHn 51200



  3、收场tokyotyrant(ttserver)

ps -ef | grep ttserver


  找到ttserver的进程 号并kill,譬喻:

kill -TERM 2159





  三、调用
  1、任何Memcached客户端均可直接调用tokyotyrant。

  2、还可以通过HTTP行动 调用,下面以Linux的curl下令 为例,先容 怎样 操纵 tokyotyrant:
  (1)、写数据,将数据“value”写入到“key”中:

curl -X PUT -d "value"



  (2)、读数据,读取“key”中数据:

curl



  (3)、删数据,删除“key”:

curl -X DELETE

TAG:

 

评分:0

我来说两句

Open Toolbar