一、前言

  关于Tair的相关介绍请参照wiki(http://code.taobao.org/p/tair/wiki/index/)或者之前的博文,不再重复描述。区别于其它主流NoSql数据库,Tair支持多机架多机房管理,提供了一套完整的集群解决方案和安全机制,本文主要介绍了Tair相关的扩展性和可靠性。

二、桶(Bucket)

  桶是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分布在不同的机架、机房。

  

  以下是实验环境4台Data Server、默认1023个桶的Bucket分配表:

   

三、控制节点(ConfigServer)

   控制节点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、配额(Quota)、LRU

  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;

五、容灾(CopyCount)和负载平衡(Migrate)

  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/”。

  

  按下图示意,每台DS上都有3份不同的数据允许的宕机数量为2,只要有1台DS能正常工作,那么就能保证数据的完整性。

  

六、监控(Monitor)

  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的地址和端口。

configserverA=10.129.221.70:5198
groupname=group_1
interval=10
is_rdb=false
need_support_cplusplus=true
is_test_cluster=false

七、感谢@Clear 张舒鳌童鞋 协助进行的大量验证工作

More about Tair (NoSql)的更多相关文章

  1. 一文读懂非关系型数据库(NoSQL)

    为了更好的理解非关系型数据库,我又深入的度娘了下 原文地址:https://baijiahao.baidu.com/po/feed/share?wfr=spider&for=pc&co ...

  2. 非关系型数据库(NoSql)

    最近了解了一点非关系型数据库,刚刚接触,觉得这是一个很好的方向,对于大数据 方面的处理,非关系型数据库能起到至关重要的地位.这里我主要是整理了一些前辈的经验,仅供参考. 关系型数据库的特点 1.关系型 ...

  3. 关系型数据库管理系统(RDBMS)与非关系型数据库(NoSQL)之间的区别

    简介 关系型数据库管理系统(RDBMS)是建立在关系模型基础上的数据库,主要代表有:Microsoft SQL Server,Oracle,MySQL(开源). 非关系型数据库(NoSQL),主要代表 ...

  4. 初识关系型数据库(SQL)与非关系型数据库(NOSQL)

    一.关系型数据库(SQL): Mysql,oracle 特点:数据和数据之间,表和字段之间,表和表之间是存在关系的 例如:部门表 001部分,   员工表 001 用户表,用户名.密码 分类表 和 商 ...

  5. 非关系型数据库(NOSQL)和关系型数据库(SQL)区别详解

    前言: 在我们的日常开发中,关系型数据库和非关系型数据库的使用已经是一个成熟的软件产品开发过程中必不可却的存储数据的工具了.那么用了这么久的关系数据库和非关系型数据库你们都知道他们之间的区别了吗?下面 ...

  6. redis学习1(nosql)

    一. 互联网时代背景下大机遇,为什么用nosql 1.单机MySQL的美好年代 在90年代,一个网站的访问量一般都不大,用单个数据库完全可以轻松应付.在那个时候,更多的都是静态网页,动态交互类型的网站 ...

  7. 5.非关系数据库(Nosql)它mongodb:创建一个集合,导出和导入备份, 数据恢复,进出口

     1 固定集合 固定集合值得是事先创建并且大小固定的集合 2 固定集合的特征:固定集合非常像环形队列.假设空间不足,最早文档就会被删除,为新的文档腾出空间.一般来说.固定集合适用于不论什么想要自己 ...

  8. 6.非关系型数据库(Nosql)之mongodb:集群(主从复制)

     1.主从复制是MongoDB最经常使用的复制方式.这样的方式很灵活,可用于备份.故障恢复.读扩展等 2最主要的设置方式就是建立一个主节点和一个或多个从节点,每一个从节点要知道主节点的地址. 执行 ...

  9. 非关系型数据库(nosql)介绍

    非关系型数据库也叫Nosql数据库,全称是not noly sql. 2009年初,Johan Oskarsson举办了一场关于开源分布式数据库的讨论,Eric Evans在这次讨论中提出了NoSQL ...

随机推荐

  1. [flag飞起]

    重度Flag: Rush 未来程序・改 (note: 由于代码存放地址原因(物理)无法本周完成) 轻度Flag: 未来程序・改写完后刷QTREE与主席树 严重Flag: 计算几何...

  2. jquery取checkbox选中的值

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/ ...

  3. div设置边框黑框显示

    style="width:756px; height:68px; border:1px solid #000000;"

  4. poj 1833

    http://poj.org/problem?id=1833 next_permutation这个函数是用来全排列的,按字典的序进行排列,当排列无后继的最大值时,会执行字典升序排列,相当于排序: 当排 ...

  5. js 去掉input标签中的百分号【%】

    parseInt("100%") --100 parseFloat("17%")     --17

  6. mybatisforeach循环,传入多个参数

    上代码: controller: @RequestMapping(value = "/findPage", method = RequestMethod.POST) @Respon ...

  7. [MAC] SVN lock的使用

    转载 : http://www.eefocus.com/czzheng/blog/12-03/245532_4ca94.html 如果压根没有锁lock,那么每个人都拥有一个本地copy,每个人都能自 ...

  8. MVC准备前基础知识

    一.自动属性C#自动属性可以避免原来这样我们手工声明一个私有成员变量以及编写get/set逻辑public class Product{ public int Id { get; set; } pub ...

  9. 学习RSA公开密钥算法

    图为 RSA公开密钥算法的发明人,从左到右Ron Rivest, Adi Shamir, Leonard Adleman. 照片摄于1978年 (和讯财经原创) RSA加密算法是最常用的非对称加密算法 ...

  10. 设计模式学习之抽象工厂(Abstract Factory,创建型模式)(3)

    假如我们的苹果和香蕉还分为北方的和南方的,那么苹果Apple和香蕉Banana就是抽象类了,所以采集的方法就应该抽象的 第一步: 我们会创建北方的苹果NorthApple类和SourthBanana类 ...