一、前言

  关于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. django-cms 代码研究(一)djangocms是什么

    首先用djangocms生成了一个站点(具体参考这里:http://www.cnblogs.com/Tommy-Yu/p/3878488.html),其文件结构如下: 本来以为会很有逼格,结果一看傻眼 ...

  2. MySQL Profiling 的使用

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

  3. mybatis3 :insert返回插入的主键(selectKey)

    Mysql: 主键自增长. 加上:keyProperty="id"就可以获得了. <insert id="insert" parameterType=&q ...

  4. centos下编译安装mysql5.5/5.6

    2013年11月16日 19:39:13 centos 6 mysql 5.5.28 我只说些我出错的地方: cmake后删除的方法是 xargs rm < install_manifest.t ...

  5. codeforces A. The Wall 解题报告

    题目链接:http://codeforces.com/problemset/problem/340/A 这道题目理解不难,就是在[a, b]区间内,找出同时能够被x和y整除的个数.第一次想当然的开了两 ...

  6. Android主题换肤实现

    本系列文章主要是对一个Material Design的APP的深度解析,主要包括以下内容 基于Material Design Support Library作为项目整体框架.对应博文:Android ...

  7. php 增删改查练习

    添加界面 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3 ...

  8. centos7下yum安装mysql

    CentOS 7的yum源中貌似没有正常安装mysql时的mysql-sever文件,需要去官网上下载   # wget http://dev.mysql.com/get/mysql-communit ...

  9. 【ACM】HDU1008 Elevator 新手题前后不同的代码版本

    [前言] 很久没有纯粹的写写小代码,偶然想起要回炉再来,就去HDU随便选了个最基础的题,也不记得曾经AC过:最后吃惊的发现,思路完全不一样了,代码风格啥的也有不小的变化.希望是成长了一点点吧.后面定期 ...

  10. Visual Studio 2015 RC中的ASP.NET新特性和问题修正

    (此文章同时发表在本人微信公众号"dotNET每日精华文章") 微软在Build大会上发布了Visual Studio 2015 RC,这也预示着Visual Studio 201 ...