一、前言

  关于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. MySQL Profiling 的使用

    MySQL Profiling 的使用 在本章第一节中我们还提到过通过 Query Profiler 来定位一条 Query 的性能瓶颈,这里我们再详细介绍一下 Profiling 的用途及使用方法. ...

  2. 《ASP.NET MVC4 WEB编程》学习笔记------Web API

    本文截取自情缘 1. Web API简单说明 近来很多大型的平台都公开了Web API.比如百度地图 Web API,做过地图相关的人都熟悉.公开服务这种方式可以使它易于与各种各样的设备和客户端平台集 ...

  3. Burst Balloons

    Given n balloons, indexed from 0 to n-1. Each balloon is painted with a number on it represented by ...

  4. 30.赋值运算符重载函数[Assign copy constructor]

    [问题] 给出如下CMyString的声明,要求为该类型添加赋值运算符函数.  C++ Code  1234567891011   class CMyString { public:     CMyS ...

  5. 一些LUA函数(转载)

    转自http://hi.baidu.com/chevallet/item/9a3a6410c20d929198ce3363 一些LUA函数 1.assert (v [, message]) 功能:相当 ...

  6. Android Studio 和 Gradle

    由于以前没做过什么java项目,在使用Android Studio时遇到了Gradle,真是一头雾水,决定总结一下. 具体的使用方法请参看:http://www.cnblogs.com/youxilu ...

  7. [Android Pro] 监听Blutooth打开广播

    <uses-permission android:name="android.permission.BLUETOOTH"/> <uses-permission a ...

  8. javaweb数据库操作

    本文主要内容有C3P0数据库连接池,dbutils的使用,元数据的应用 在对数据库进行增删改查时,使用数据库连接池可以有效的提高效率,节省资源,C3P0是Apache组织提供的一个有效方式 C3P0的 ...

  9. Hadoop 中文编码相关问题 -- mapreduce程序处理GBK编码数据并输出GBK编码数据(转)

    hadoop的hdfs文件系统中,默认的是utf-8, 故你上传的文件是要设置成utf-8.当输入的是gbk,有该如何? 输入是GBK文件, 输出也是 GBK 文件的示例代码: Hadoop处理GBK ...

  10. svn update 每更新一项就输出一行信息,使用首字符来报告执行的动作 这些字符的含义是:

    A 已添加 D 已删除 U 已更新 C 合并冲突 G 合并成功 例子: [root@ok 资料库]# svn ci -m "" Sending 资料库/简历 Transmittin ...