张冬生的网络日志

记录,转载,分享
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

ttserver 的几种部署方式

Posted on 2011-07-24 18:23  张冬生  阅读(423)  评论(0编辑  收藏  举报
COPY 自: http://hi.baidu.com/ah__fu/blog/item/7b961ddc4c8cddabcc116627.html

    可以把 ttserver 理解成一种 key-value 形式的数据库,在运营中就像管理数据库一样去管理 ttserver,使得性能和数据安全都能得到较好的保障。


部署ttserver的方式,可以根据访问量和数据规模循序渐进地这样部署:

1、单机:数据量不大,访问量不大


 

ttserver -host 192.168.0.100 -port 20001 -thnum 128 -dmn -ulim 1024m -ulog 
/home/ahfu/temp/test_data/test_ulog_01 -log 
/home/ahfu/temp/test_data/log/test_data_01.log -pid 
/home/ahfu/temp/test_data/log/test_data_01.pid -sid 1 
/home/ahfu/temp/test_data/test_data_01.tch#bnum=10000000#rcnum=100000#xmsiz=256m<BR>

如果希望提高查询的性能,可以把hash的桶设置得再大些,然后缓存的记录多一些。
同时,设置-uas参数异步写入日志,可提高写入的性能。不过这样可能导致日志丢失,降低了数据安全性。


 

2、一主一备:数据量不大,访问量不大,且对数据安全性有要求


主服务器:(与上面一致)

ttserver -host 192.168.0.100 -port 20001 -thnum 128 -dmn -ulim 1024m -ulog 
/home/ahfu/temp/test_data/test_ulog_01 -log 
/home/ahfu/temp/test_data/log/test_data_01.log -pid 
/home/ahfu/temp/test_data/log/test_data_01.pid -sid 1 
/home/ahfu/temp/test_data/test_data_01.tch#bnum=10000000#rcnum=100000#xmsiz=256m<BR>

备份服务器:在另一个机器上启动,不需要缓存

ttserver -host 192.168.0.101 -port 20002 -mhost 192.168.0.100 -mport 20001 -rcc 
-rts /home/ahfu/temp/test_data/test_data_01.rts -thnum 5 -dmn -ulim 1024m -ulog 
/home/ahfu/temp/test_data/test_ulog_02 -log 
/home/ahfu/temp/test_data/log/test_data_02.log -pid 
/home/ahfu/temp/test_data/log/test_data_02.pid -sid 2 
/home/ahfu/temp/test_data/test_data_02.tch#bnum=10000000#rcnum=0#xmsiz=0m<BR>

备份服务器可以找性能不高的旧服务器,这种设置也只是为了保障数据安全而做的设置。


 

3、互为主备:数据量增大,访问量也增大,对数据安全有要求,且希望避免单点故障


第一个服务器:

ttserver -host 192.168.0.100 -port 20001 -mhost 192.168.0.101 -mport 20002 -rcc 
-rts /home/ahfu/temp/test_data/test_data_01.rts -thnum 128 -dmn -ulim 1024m 
-ulog /home/ahfu/temp/test_data/test_ulog_01 -log 
/home/ahfu/temp/test_data/log/test_data_01.log -pid 
/home/ahfu/temp/test_data/log/test_data_01.pid -sid 1 
/home/ahfu/temp/test_data/test_data_01.tch#bnum=10000000#rcnum=100000#xmsiz=256m<BR>

第二个服务器:

ttserver -host 192.168.0.101 -port 20002 -mhost 192.168.0.100 -mport 20001 -rcc 
-rts /home/ahfu/temp/test_data/test_data_02.rts -thnum 128 -dmn -ulim 1024m 
-ulog /home/ahfu/temp/test_data/test_ulog_02 -log 
/home/ahfu/temp/test_data/log/test_data_02.log -pid 
/home/ahfu/temp/test_data/log/test_data_02.pid -sid 2 
/home/ahfu/temp/test_data/test_data_02.tch#bnum=10000000#rcnum=100000#xmsiz=256m<BR>

应用程序可以访问任意一个服务器进行读写,且应用程序发现某服务器不能访问后,可立即转到另一台服务器


 

4、读写分离:写量猛增,读量猛增


TokyoCabinet支持六种数据引擎,其中on-memory hash database和on-memory b+ database两种是将数据存放在内存中的,不对数据做持久化
因此,可以使用on-memory hash database引擎的ttserver作为写服务器,然后采用复制的方式将on-memory hash database上的数据复制到hash database的多个ttserver上去,然后将多个hash database ttserver作为读服务器。这实际上是通过降低一致性来提高性能。
on-memory hash database的配置: 缓存的记录数和内存都配置得很小

ttserver -host 192.168.0.99 -port 20000 -thnum 128 -dmn -ulim 1024m -ulog 
/data/home/game/temp/test_data/test_ulog_01 -log 
/data/home/game/temp/test_data/log/test_data_01.log -pid 
/data/home/game/temp/test_data/log/test_data_01.pid -sid 0 
"*#bnum=10000000#capnum=100#capsiz=10m"<BR>

hash database ttserver 1 的配置: 从on-memory hash database复制数据

ttserver -host 192.168.0.100 -port 20001 -mhost 192.168.0.99 -mport 20000 -rcc 
-rts /home/ahfu/temp/test_data/test_data_01.rts -thnum 128 -dmn -ulim 1024m 
-ulog /home/ahfu/temp/test_data/test_ulog_01 -log 
/home/ahfu/temp/test_data/log/test_data_01.log -pid 
/home/ahfu/temp/test_data/log/test_data_01.pid -sid 1 
"/home/ahfu/temp/test_data/log/test_data_01.tch#bnum=10000000#rcnum=100000#xmsiz=256m"<BR>

hash database ttserver 2 的配置: 从on-memory hash database复制数据

ttserver -host 192.168.0.101 -port 20002 -mhost 192.168.0.99 -mport 20000 -rcc 
-rts /home/ahfu/temp/test_data/test_data_02.rts -thnum 128 -dmn -ulim 1024m 
-ulog /home/ahfu/temp/test_data/test_ulog_02 -log 
/home/ahfu/temp/test_data/log/test_data_02.log -pid 
/home/ahfu/temp/test_data/log/test_data_02.pid -sid 2 
"/home/ahfu/temp/test_data/log/test_data_02.tch#bnum=10000000#rcnum=100000#xmsiz=256m"<BR>

配置为读写分离后,客户端写入的时候连接on-memory hash database,读取的时候连接其他的ttserver。


 

5、客户端实现分布,分库:海量数据


数据量再大,靠几台服务器已经无法支撑的时候,分库仍然是无奈的选择。将数据按照业务划分,或者按照某一数值划分,存在在多个ttserver群集中去。
客户端程序在写入或者读取的时候,自动根据业务规则去访问对应的群集即可。