关于Tair的相关介绍请参照wiki(http://code.taobao.org/p/tair/wiki/index/)或者以前的博文,再也不重复描述。区别于其它主流NoSql数据库,Tair支持多机架多机房管理,提供了一套完整的集群解决方案和安全机制,本文主要介绍了Tair相关的扩展性和可靠性。html
桶是Tair最基本的数据存储单位,能够经过配置指定Cluster中总共桶的数量(桶的个数必须大于等于Data Server的数量),每一个DS上至少须要分配一个桶,默认配置为1023个桶,若是部署2台Data Server那么两台DS上分别为512,511个桶,若是3台Data Server则每台DS上为341个桶,当PUT数据的时候,Config Server会对Key计算Hash并按必定的算法将Data分配到具体某个桶,从而实现数据在桶上的分布平衡,这也是Tair数据桶的默认分布策略:负载平衡优先,同时Tair还提供了另一种更为高级的位置安全优先策略,保证数据在同一个桶的多个duplication分布在不一样的机架、机房。web
如下是实验环境4台Data Server、默认1023个桶的Bucket分配表:算法
控制节点Config Server管理Data Server节点、维护Data Server的状态信息,采用一主一备(Master/Slave)的方式保证可靠性,主Config Server下配置文件的修改,会自动同步更新到Slave节点,当主节点不可用时,Slave节点会自动接管成主节点。Client首次链接到Config Server,CS会返回一个带version的路由表信息给Client,以后集群中DS的增减都会修改CS上的路由表version,Client再次链接到CS的时候先比较version,若是不一致则先更新路由表,理论上即便2个Config Server都down掉后,Client依然能够经过缓存的路由表信息直接访问到Data Server。数据库
Area相似于Namespace,用来将Tair集群中的数据进行区域划分逻辑分区,能够经过在Config Server的group.conf文件中指定多个Area,每一个Area设置固定的Quota Size,但全部Area的Quota合计不能超过全部Data Server分配的内存大小总和。每一个Area做为独立的管理单元,不一样的Area能够包含重名的Key。经过Tair Client向Tair插入的数据超过默认阀值(8192字节)会自动将kv压缩后再存储到DS,当累计put的kv字节超过配额大小的时候,Tair会启用LRU策略(Least Recently Used,每次淘汰最久没有使用的元素),自动移除过时kv。若是put指定的Area在Config中不存在,Tair能够自动生成一个临时Area,当全部数据移除后临时Area会被自动删除。缓存
1 #quota info (1024000=1M) 2 _areaCapacity_list=0,2048000; 3 _areaCapacity_list=1,1024000; 4 _areaCapacity_list=2,1024000;
Tair能够指定CopyCount实现数据进行屡次备份,理论上备份越多、Data Server数量越多则数据安全越可靠,备份数据一样会按照必定算法分布到不一样的DataS erver的桶上,假设CopyCount=3,Data Server个数为3 ,那么数据分布状况以下图。增长或者减小Data Server,因为存在Heartbeat,Config Server会当即监视到DS的变化,会从新计算一张数据桶的分布表,而后开始进行数据迁移,将到故障Data Server的访问转到别的Data Server上,Migrate的时间和Bucket数量、KV数量有关,迁移过程当中能够经过Health命令监视到每台DS的剩余迁移桶数量,当迁移结束后全部DS从新达到数据分布平衡。在迁移过程当中,Config Server会保证数据分布表的正确性,使得客户端可以获得数据。安全
关于“增长或者减小data server的时候会发生什么”,wiki中提供了更为原子的细节说明,请先阅读“http://code.taobao.org/p/tair/wiki/intro/”。app
按下图示意,每台DS上都有3份不一样的数据容许的宕机数量为2,只要有1台DS能正常工做,那么就能保证数据的完整性。webapp
Tair提供相关监控的工具用于监视当前集群中全部Data Server、Area的数据分布状况及查询功能。
开源svn地址:http://code.taobao.org/p/tair-monitor/src/trunk/tair_2_3_mon/
项目基于servlet,部署后须要修改MonitorArgs文件(Tomcat/webapps/tair_2_3_mon/WEB-INF/classes/com/tair_2_3/statmonitor目录),指定ConfigServer的地址和端口。svn
configserverA=10.129.221.70:5198 groupname=group_1 interval=10 is_rdb=false need_support_cplusplus=true is_test_cluster=false