分享好友 最新动态首页 最新动态分类 切换频道
Tair的桶分布策略介绍及新的机器级位置安全优先策略实现
2024-12-28 22:46

  Tair在其intro wiki 上介绍了其现有的桶分布策略:

  程序提供了两种生成分配表的策略, 一种叫做负载均衡优先, 一种叫做位置安全优先。

  负载均衡优先

  当采用负载优先策略的时候, config server会尽量的把桶均匀的分布到各个data server上. 所谓尽量是指在不违背下面的原则的条件下尽量负载均衡. 1 每个桶必须有COPY_COUNT份数据 2 一个桶的各份数据不能在同一台主机上;

  位置安全优先

  位置安全优先原则是说, 在不违背上面两个原则的条件下, 还要满足位置安全条件, 然后再考虑负载均衡. 位置信息的获取是通过 _pos_mask(参见安装部署文档中关于配置项的解释) 计算得到. 一般我们通过控制 _pos_mask 来使得不同的机房具有不同的位置信息. 那么在位置安全优先的时候, 必须被满足的条件要增加一条, 一个桶的各份数据不能都位于相同的一个位置(不在同一个机房).

  wiki上还针对位置安全优先策略进行了进一步的补充:

  “这里有一个问题, 假如只有两个机房, 机房1中有100台data server, 机房2中只有1台data server. 这个时候, 机房2中data server的压力必然会非常大. 于是这里产生了一个控制参数 _build_diff_ratio(参见安装部署文档). 当机房差异比率大于这个配置值时, config server也不再build新表. 机房差异比率是如何计出来的呢? 首先找到机器最多的机房, 不妨设使RA, data server数量是SA. 那么其余的data server的数量记做SB. 则机房差异比率=|SA – SB|/SA. 因为一般我们线上系统配置的COPY_COUNT是3. 在这个情况下, 不妨设只有两个机房RA和RB, 那么两个机房什么样的data server数量是均衡的范围呢? 当差异比率小于 0.5的时候是可以做到各台data server负载都完全均衡的.这里有一点要注意, 假设RA机房有机器6台,RB有机器3台. 那么差异比率 = 6 – 3 / 6 = 0.5. 这个时候如果进行扩容, 在机房A增加一台data server, 扩容后的差异比率 = 7 – 3 / 7 = 0.57. 也就是说, 只在机器数多的机房增加data server会扩大差异比率. 如果我们的_build_diff_ratio配置值是0.5. 那么进行这种扩容后, config server会拒绝再继续build新表.”

 

  我们在生产环境中使用时,起初使用的是负载均衡优先,对应的配置文件group.conf中的_build_stategy=1。但是在线上环境中,为了充分利用磁盘IO,经常会在同一台服务器上跑多个dataserver(一个磁盘对应一个dataserver),而通过cst_monitor查看桶分布表,发现wiki中提到的必须遵守的原则“2 一个桶的各份数据不能在同一台主机上”并没有得到满足,只是保证了同一个桶的各份数据不落在同一个dataserver上。这样有一个很严重的问题,如果某台服务器宕机了,就非常有可能导致一个桶的主备bucket都无法对外服务,导致config server拒绝build新的桶分布表(内存级的可能就丢数据了,磁盘级的会造成落在该台服务器上的所有的桶都会写失败)。

     

      这是个很严重的问题,我们首先想到的是复用默认的“位置安全优先策略”,将group.conf中的_pos_mask设成4294967295(0xFFFFFFFF),这样每一台机器都会被认为是不同的位置。但是在使用中发现,程序并没有按照我们预想的那样在多个机器之间分散主备bucket,而是拒绝建表。查看了建表策略的代码table_builder2.cpp 发现这个策略只适合于两个位置,即适用于集群在两个机房间的负载均衡,并不适合更多位置(>=3)的位置安全,我们简单的针对机器ip做mask是无效的。

     

      接下来,我们考虑自己实现一个新的位置安全策略,但仔细看了负载均衡优先策略的代码table_builder1.cpp 后,发现可以通过修改table_builder1的代码,实现我们想要的机器级位置安全策略。

      默认的负载均衡优先策略代码,在不同的consider级别下考虑了如下条件(is_this_node_ok()):

      1.主bucket在各实例上分布均匀;

      2.当前主备bucket在实例上分布均匀;

      3.在建表主备bucket在备实例上分布均匀;

      4.主备不在同一个实例上;

      5.主备不在同一个position上(port:ip&mask);

      负载均衡优先策略共有四个consider级别(CONSIDER_ALLCONSIDER_POSCONSIDER_BASECONSIDER_FORCE),以此考虑4个级别,满足的条件逐渐放松,直到可以成功建表。四个不同的CONSIDER级别分别满足的条件如下:

      CONSIDER_ALL: 1, 2, 4, 5

      CONSIDER_POS: 1, 3, 4, 5

      CONSIDER_BASE: 1, 3, 4

      CONSIDER_FORCE: 1, 4

      可见,默认的策略优先满足的是3(均衡),而非5(postion安全)。这样问题就很简单了,只需要把CONSIDER_BASE满足的条件由1、3、4改成1、4、5,就可以实现我们需要的机器级的位置安全优先策略,同时兼顾机器级别的负载均衡(需要自行保证不同机器的dataserver数尽量均衡,同时group.conf的_pos_mask设成4294967295)。

      给出如下patch:

最新文章
济南能投集团:逆雪而行,“汇心”守护
12月13日,济南迎来了今冬初雪,济南能投集团紧绷稳定供热“责任弦”,充分发挥智慧供热系统的特色和优势,通过运用客服热线系统、生产运营管理系统、安全大数据系统等信息化平台,各部门精准联动,各单位积极响应,凝心聚力,进入全时守候
百度快照优化-百度快照优化公司分享:如何在百度发布短视频
 相信很多站长都遭遇过自己网站百度快照迅速回档的尴尬事情,今天云无限百度快照优化主要谈谈网站快照回档的原因,以及出现百度快照回档以后如何解决,让百度快照优化恢复正常。出现百度快照优化的回档一般有四个方面的原因,百度自身问题
聚焦创新应用,AI引领赋能 | 2024 AI+数字笔迹创新应用发展论坛在渝举行
央广网北京12月11日消息12月6日,以“聚焦创新应用,AI引领赋能”为主题的2024AI+数字笔迹创新应用发展论坛在重庆两江新区成功举办。本届论坛由重庆市大数据应用发展管理局和重庆两江新区管理委员会联合指导,重庆亲笔签数字科技有限公司主
热门的手游戏大全排行榜 有趣的手机游戏前五名2023
现代有不少年轻人离不开手机游戏,休闲时间总喜欢进入游戏的世界中消磨时光,手机端也有不少堪称艺术品的游戏值得一玩,那么有趣的手机游戏都有哪些呢?下文就是热门的手游戏大全排行榜了,文章中记载的这些手游热度极高而且玩起来非常有趣
我刷的短视频通古代,祖龙人麻了
【飞卢小说网独家签约小说:我刷的短视频通古代,祖龙人麻了】江林下载神奇APP,手机刷视频同步直播古代。刷鬼畜视频【东汉变种人!】张飞:大哥,你这激光眼真厉害,俺这就去把华佗老儿捆来。刷历史视频【10分钟看完,华夏五千年时刻表!
网络营销推广方案案例(网络营销推广方案案例分享)
在当今数字化时代,网络营销推广已成为企业和个人推广品牌、产品或服务的重要手段,一个成功的网络营销推广方案能够帮助企业快速提升知名度、增加销售额,并与目标客户建立良好的互动关系,本文将通过一个具体的网络营销推广方案案例,详细
如何快速优化提升百度SEO关键词排名?
数字化时代,越来越多的企业都希望通过搜索引擎SEO优化来提升网站排名,尤其是在中国市场,百度作为主要搜索引擎,其SEO策略尤为关键。本文七月笙笙July Brand将详细探讨如何快速优化提升百度SEO关键词排名?稳定提升网站在搜索引擎的可见
学Python你不得不会的快捷键大全!
快捷键说明Ctrl+Enter在下方新建行但不移动光标Ctrl+Alt+I自动缩进行Ctrl+Alt+L格式化代码(与QQ锁定热键冲突,关闭QQ的热键)Ctrl+/注释(取消注释)选择的行Ctrl + Shift + +展开所有的代码块Ctrl
抖音集团CEO辞职!小红书新增“附近”一级入口丨电商大事
【亿邦原创】抖音集团CEO辞职!小红书新增“附近”一级入口;出海业务大涨44%,阿里公布财报;TikTok Shop将新增八大站点。大公司·大事件字节跳动抖音内部信称张楠不再担任CEO 将专注负责剪映业务2月7日,字节跳动CEO梁汝波发布内部信,宣
相关文章
推荐文章
发表评论
0评