一、前言
关于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)的更多相关文章
-
一文读懂非关系型数据库(NoSQL)
为了更好的理解非关系型数据库,我又深入的度娘了下 原文地址:https://baijiahao.baidu.com/po/feed/share?wfr=spider&for=pc&co ...
-
非关系型数据库(NoSql)
最近了解了一点非关系型数据库,刚刚接触,觉得这是一个很好的方向,对于大数据 方面的处理,非关系型数据库能起到至关重要的地位.这里我主要是整理了一些前辈的经验,仅供参考. 关系型数据库的特点 1.关系型 ...
-
关系型数据库管理系统(RDBMS)与非关系型数据库(NoSQL)之间的区别
简介 关系型数据库管理系统(RDBMS)是建立在关系模型基础上的数据库,主要代表有:Microsoft SQL Server,Oracle,MySQL(开源). 非关系型数据库(NoSQL),主要代表 ...
-
初识关系型数据库(SQL)与非关系型数据库(NOSQL)
一.关系型数据库(SQL): Mysql,oracle 特点:数据和数据之间,表和字段之间,表和表之间是存在关系的 例如:部门表 001部分, 员工表 001 用户表,用户名.密码 分类表 和 商 ...
-
非关系型数据库(NOSQL)和关系型数据库(SQL)区别详解
前言: 在我们的日常开发中,关系型数据库和非关系型数据库的使用已经是一个成熟的软件产品开发过程中必不可却的存储数据的工具了.那么用了这么久的关系数据库和非关系型数据库你们都知道他们之间的区别了吗?下面 ...
-
redis学习1(nosql)
一. 互联网时代背景下大机遇,为什么用nosql 1.单机MySQL的美好年代 在90年代,一个网站的访问量一般都不大,用单个数据库完全可以轻松应付.在那个时候,更多的都是静态网页,动态交互类型的网站 ...
-
5.非关系数据库(Nosql)它mongodb:创建一个集合,导出和导入备份, 数据恢复,进出口
1 固定集合 固定集合值得是事先创建并且大小固定的集合 2 固定集合的特征:固定集合非常像环形队列.假设空间不足,最早文档就会被删除,为新的文档腾出空间.一般来说.固定集合适用于不论什么想要自己 ...
-
6.非关系型数据库(Nosql)之mongodb:集群(主从复制)
1.主从复制是MongoDB最经常使用的复制方式.这样的方式很灵活,可用于备份.故障恢复.读扩展等 2最主要的设置方式就是建立一个主节点和一个或多个从节点,每一个从节点要知道主节点的地址. 执行 ...
-
非关系型数据库(nosql)介绍
非关系型数据库也叫Nosql数据库,全称是not noly sql. 2009年初,Johan Oskarsson举办了一场关于开源分布式数据库的讨论,Eric Evans在这次讨论中提出了NoSQL ...
随机推荐
-
【完全开源】知乎日报UWP版(上篇):界面设计、官方API分析
目录 说明 使用Fiddler分析android版API 部分效果图 关于源码 说明 在做博客园UWP版的时候其实就有做知乎日报的打算了,前段时间一直出差,在酒店里用Fiddler简单的分析了一下An ...
-
XML文档
XML(Extensible Markuo Language)可标记扩展语言.它是一种以简单文本格式存储数据的方式,可以被任何计算机读取. XML文档里包含的元素都是可以自定义的. 1.XML文档声明 ...
-
MUI - 将tap模拟成原生click体验
mui提供了tap事件替换了html5的click事件,解决了300ms延时的问题.不过相比原生app的click体验还是有些许差距的.关于300ms延时的问题,这篇帖子分析的比较完善,其中提到了穿透 ...
-
struts2视频学习笔记 28(OGNL表达式)
课时28 OGNL表达式 OGNL是Object Graphic Navigation Language(对象图导航语言)的缩写,它是一个开源项目. Struts 2框架使用OGNL作为默认的表达式语 ...
-
iOS_第3方类库_BlurAlertView_GPUImage
最终效果图: 先加入GPUImage.framework 导入BlurAlertView的类声明和类实现 // // BlurAlertView.h // 特效弹出框 // // Created by ...
-
ng表单验证
<angular>中form表单的验: 1.在form中加上 novalidate 2.利用ng-pattern验证 (*如果不匹配的话 ng-model是绑定不上数据的) 常用的表单验证 ...
-
CentOS Linux下VNC Server远程桌面配置详解
http://www.ha97.com/4634.html PS:偶以前基本不用Linux的远程图形桌面,前几天有开发的同事配置CentOS的vnc有问题,找我解决,就顺便记录总结一下,这个总结是比较 ...
-
20172302 《Java软件结构与数据结构》实验三:查找与排序实验报告
课程:<Java软件结构与数据结构> 班级: 1723 姓名: 侯泽洋 学号:20172302 实验教师:王志强老师 实验日期:2018年11月19日 必修/选修: 必修 实验内容 (1) ...
-
用Django实现Video页面分类查询
Model表创建,Url映射,Views函数处理,Html生成 根据上图,视频方向与视频分类是多对多的关系,视频分类与视频信息是一对多的关系,难度级别是单一的查询条件(与之前俩者并无关系) Model ...
-
CentOS中自动加载802.1q模块
要想在CentOS中自动加载内核模块,需要在/etc/sysconfig/modules/目录中增加一个脚本,在此脚本中加载所需的模块. 下面是我所用的一个名为8021q.modules的脚本,用来在 ...