分享好友 最新动态首页 最新动态分类 切换频道
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:

最新文章
王家河多金属选厂技改扩建及配套尾矿库建设工程环境影响评价公众参与第一次公示
卢氏中科矿业有限公司王家河多金属选厂技改扩建及配套尾矿库建设工程环境影响评价公众参与第一次公示根据《中华人民共和国环境影响评价法》《建设项目环境保护管理条例》(国务院令第682号文)有关规定和中华人民共和国生态环境部《环境影
用AI技术一键生成超逼真美女写真,全攻略来袭!
Midjourney:这是一个基于Discord的AI绘图工具,用户只需输入简短命令,即可生成高质量的艺术作品。Midjourney以其极高的细节和艺术效果而闻名,能够生成栩栩如生的美女画像,同时操作的学习曲线较为陡峭,适合对绘画有一定基础的用户。DAL
【孔子箴言故事】修德正身
《论语·宪问》中孔子说“骥不称其力,称其德也。”是说同样的马,为什么称千里马为骥呢?不只是因为牠有力气,人们主要肯定牠的品质啊!这里说一个伯乐相马的故事。“伯乐”两个字本来是指天上一个星的名字。此星掌管天上的天马。春秋时期
中小学老师必备的十个备课、教学工具!
在这个信息化教育的时代,孩子们早已是互联网的原著民。老师们都不想变成学生眼里的老古董,年轻老师眼里的老学究吧?下面特意为老师们整理了一些必备的教学工具,功能强大,简单好用,大大节省了老师的时间。多个学科都有哦。一、几何画板
天天酷跑11月8日每日一题深度解析与全面答案攻略
《天天酷跑》作为一款备受欢迎的跑酷类手机游戏,以其丰富的游戏内容、多样的角色和道具搭配,以及紧张刺激的游戏体验,吸引了大量玩家的关注和参与,而每日一题作为游戏中的一个特色环节,更是让玩家们在享受游戏乐趣的同时,增加了对游戏
保定百度爱采购运营-标题撰写技巧
百度爱采购该怎么做?百度爱采购的好处?网络推广重在推广,主要目的是利用各种网络推广渠道和推广方式,让尽可能多的人知道,让更多的人知道;网络营销的目的在于营销,即通过促销可以获得什么样的经济效益。下面给大家介绍关于百度爱采购
英雄联盟雷霆英雄全面战略指南
英雄联盟是全球最受欢迎的多人在线战术竞技游戏之一。其中,雷霆作为一个极具挑战性的英雄阵营,一直受到广大玩家的热烈关注。本文将为大家全面解析雷霆英雄的特点及应对策略,为您的英雄联盟之旅提供专业的战略指导。雷霆英雄包括拉克丝、凯
无锡爱采购代运营的选择
企业将首先考虑进入任何平台的成本和收益,尤其是对中小型企业而言。没有足够的资金和时间来一个平台是否有效。百度爱采购在这方面有什么具体优势?让我们互相了解一下。1.独家名片。在百度,的搜索结果中,会显示特殊的卡片来为企业创建品
分步拆解,使用Qwen大模型创建多语言聊天和翻译应用
随着全球化进程的加速,跨语言跨文化的交流和沟通越来越重要。如今,借助先进的AI技术,像Qwen 2 LLM这样的大语言模型,可以帮助快速开发出支持多语言的应用。 使用Qwen 2 LLM构建一个支持英语、中文、日语等多种
网站SEO排名优化的原理是什么
一、网站优化排名的对象是什么1、一个网站是由众多的网页组成的,网站是一个或者多个网页组成的。2、的对象是网页而不是网站,就像奥运会上的运动员得奖一样,针对的对象是运动员,而不是运动员所在的国家。关于网站优化排名的误区就是,一
相关文章
推荐文章
发表评论
0评