`
wbj0110
  • 浏览: 1603472 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

利用Tokyo Tyrant构建兼容Memcached协议、支持故障转移、高并发的分布式key-value持久存储系统

阅读更多

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

  点击在新窗口中浏览此图片



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

  Tokyo Tyrant 加上 Tokyo Cabinet,构成了一款支持高并发的分布式持久存储系统,对任何原有Memcached客户端来讲,可以将Tokyo Tyrant看成是一个Memcached,但是,它的数据是可以持久存储的。这一点,跟新浪的Memcachedb性质一样。

  相比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. 

http://cn.php.net/manual/zh/function.Memcache-addServer.php 
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 http://www.1978th.net/tokyocabinet/tokyocabinet-1.4.45.tar.gz
tar zxvf tokyocabinet-1.4.45.tar.gz
cd tokyocabinet-1.4.45/
./configure
#注:在32位Linux操作系统上编译Tokyo cabinet,请使用./configure --enable-off64代替./configure,可以使数据库文件突破2GB的限制。
#./configure --enable-off64
make
make install
cd ../



  2、然后编译安装tokyotyrant

wget http://www.1978th.net/tokyotyrant/tokyotyrant-1.1.40.tar.gz
tar zxvf tokyotyrant-1.1.40.tar.gz
cd tokyotyrant-1.1.40/
./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.tcb#lmemb=1024#nmemb=2048#bnum=10000000



  (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.tcb#lmemb=1024#nmemb=2048#bnum=10000000



  服务器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.tcb#lmemb=1024#nmemb=2048#bnum=10000000



  (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 http://127.0.0.1:11211/key -d "value"



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



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

 

转自:http://blog.s135.com/post/362/

分享到:
评论

相关推荐

    C#版Tokyo Tyrant客户端

    Tokyo Tyrant是一款轻量级、高性能的键值存储系统,由日本的RDB Project开发。它是基于Tokyo Cabinet的数据库管理系统,适用于日志记录、缓存服务、元数据存储等多种场景。Tokyo Tyrant提供了多种语言的客户端,包括...

    Tokyo Cabinet Key:Value数据库及其扩展应用

    Tokyo Tyrant是Tokyo Cabinet的一个网络接口,它支持自定义协议和Memcached兼容协议,还可以通过HTTP协议进行数据交换。与Memcached和MySQL相比,Tokyo Tyrant在处理高并发写入时展现出更高的性能。在10000线程的...

    memcached,mongdb,redis,Tokyo Tyrant的安装和使用

    标题中的“memcached, mongdb, redis, Tokyo Tyrant”都是知名的NoSQL数据库系统,它们在现代互联网应用中被广泛使用。这篇博文很可能是关于如何在操作系统环境下安装和使用这四种数据库的教程。 1. **Memcached**...

    memcached全面剖析.docx

    Tokyo Cabinet 和 Tokyo Tyrant 是与 memcached 相关的数据库解决方案,它们提供了更丰富的数据结构和更强大的持久化能力,适合那些需要复杂数据管理和高可用性的场景。 总结起来,memcached 是一个强大的工具,...

    tokyo cabinet tyrant研究资料

    Tokyo Cabinet 和 Tokyo Tyrant 是一组开源的数据库管理系统,由日本公司 Resin Software 开发,主要用于数据存储和检索。这两个工具在IT领域中被广泛应用于日志管理、缓存服务、键值对存储等场景,尤其在需要快速...

    基于Tokyo Tyrant的智能电网数据处理与应用研究.pdf

    为了有效地采集和管理海量的电力用户数据,需要一个高并发的分布式持久存储系统。本研究采用Java技术以及数据库技术构建了这样的系统,这确保了系统的高性能和良好的扩展性。 Tokyo Tyrant是一款高速缓存数据库,它...

    memcached全面剖析.pdf

    memcached是一款高性能、分布式内存对象缓存系统,最初由Danga Interactive开发,用于减少数据库负载,通过缓存数据和对象来加速Web应用程序。它以key-value的形式存储数据,支持多种编程语言,如Perl、PHP、Python...

    tokyotytrant

    1. **键值存储**:Tokyo Tyrant采用键值对(Key-Value)存储模型,其中键是唯一的标识符,值可以是任意类型的数据。这种设计简化了数据结构,使得读写操作极其快速。 2. **高性能**:Tokyo Tyrant的性能得益于其...

    常见数据库场景分析

    - 高性能、高并发的Key-Value存储需求。 ###### 2.2 满足海量存储需求和访问的面向文档的数据库 - **MongoDB** - **特点**: - 面向文档的存储方式,支持灵活的数据模式。 - 内置复制和分片功能,易于扩展。 ...

    TTserver1.1.4

    8. **分布式扩展**:虽然Tokyo Tyrant本身不直接支持分布式,但可以通过诸如Riak这样的分布式数据库系统,利用Tokyo Tyrant作为底层存储实现扩展。 9. **应用场景**:Tokyo Tyrant常用于缓存系统、日志分析、搜索...

    memcached全面剖析(入门到精通)

    memcached是一个高性能的分布式内存对象缓存系统,它被用来减少数据库负载,通过缓存数据和对象在内存中来帮助Web应用加快响应速度。它是基于libevent的事件处理机制,拥有简单的协议、内存存储方式,并且其分布式...

    no关系型数据库,nosql

    NoSQL,全称为“Not Only SQL”,是一种非关系型数据库技术,主要针对大规模数据分布式存储、高并发读写、实时性需求以及对海量数据高效存储和访问的需求。NoSQL数据库的特点在于它们通常不遵循传统的ACID(原子性、...

    nosql研发之路

    INetDB不仅兼容Memcached协议,支持主从复制和ttserver复制协议,还具备更高的性能和可靠性,在大数据量下表现尤为出色。INetDB支持内部数据压缩(gzip, lzf),数据遍历功能,以及无需保存类似ttserver的bin-log,...

    深入学习MongoDB

    * Key-Value 存储,例如 Tokyo Cabinet/Tyrant, Redis, Voldemort, Oracle BDB。 * 列式数据库,例如 Cassandra, HBase, Riak。 * 文档型数据库,例如 CouchDB, MongoDB。 * 图结构数据库,例如 Neo4J, InfoGrid, ...

    Redis安装与配置文档

    Redis是一个完全开源免费的、高性能(NOSQL)key-value数据库,遵守BSD协议。它是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。 Redis的作者是...

    NoSQL数据库笔谈

    - **Tokyo Cabinet/Tyrant**: 高性能的键值存储系统。 - **CT.M**: 基于C++的键值存储系统。 - **Scalien**: 分布式的键值存储系统。 - **BerkeleyDB**: 长期以来被广泛使用的键值存储系统。 - **MemcacheDB**: 高...

    NoSQL数据库学习教程.pdf

    Tokyo cabinet / Tyrant是指使用Tokyo cabinet / Tyrant来实现键值存储。 CT.M是指使用CT.M来实现键值存储。 Scalien是指使用Scalien来实现键值存储。 Berkley DB是指使用Berkley DB来实现键值存储。 MemcacheDB...

    NoSQL数据库详细介绍入门经典

    - **Tokyo Cabinet/Tyrant**:一种轻量级的键值存储系统。 - **CT.M**:一种分布式键值存储系统。 - **Scalien**:一种分布式的键值存储系统。 - **BerkeleyDB**:一款嵌入式的数据库引擎。 - **MemcacheDB**:...

Global site tag (gtag.js) - Google Analytics