01

背景

tidb集群收到告警,TIKV 节点磁盘使用率85%以上,联系业务无法快速删除数据,于是想到扩容TIKV 节点,原先TIKV 节点机器都是6TB的硬盘,目前只有3TB的机器可扩,也担心region 均衡后会不会打满3TB的盘,PD 调度策略来看应该是会根据不同存储机器的资源配置和使用情况进行打分,region balance 优先根据leader score 和region score 往分低的机器均衡数据来让不同节点机器的数据处于一种均衡状态,但是PD 有时候也不是智能的,会出现偏差,导致某个节点磁盘打满也未可知,这时候就需要人为干预了,我就遇到了在不同存储节点扩容tikv导致小存储容量节点磁盘差点打满的情况,所以一般建议优先相同存储容量的盘进行扩容。

02

集群环境

Tidb:5节点

PD:3节点

TIKV:10节点 6TB 硬盘

集群总量:45TB ,每个TIKV 4.5TB

03

实施分析过程

由于业务不断增长,整个集群使用率接近80%,业务无法删除数据,于是决定扩容tikv节点,没有6TB的大盘机器,所以扩容了1个3TB的TIKV节点,可以考虑调整 PD 调度参数 region-schedule-limit 以及 leader-schedule-limit 来控制调度速度,调大可加快均衡速度,但是对业务会产生一定影响,过小速度会慢点,不着急的话默认值就行。

扩容TIKV

tiup cluster scale-out <cluster-name> scale-out.yaml

扩容完成后,经过一天一夜,收到告警,新扩容的机器磁盘已经90%,并基本维持在这个量级,比较纳闷,难道是错怪PD了,可能PD有参数限制智能使用磁盘的90%就不往该节点均衡数据了。

查阅官方文档发现下面参数low-space-ratio,确实是可以设置每个节点tikv的磁盘最大使用率。

确实是错怪PD了,以为它调度策略出现了偏差,回过头来看这个参数不能针对某个节点进行设置,生效的是所有节点,因为该集群6TB盘使用率在80%左右,所以也不好设置低于80%的参数,对我来说意义不大了,那就得需要寻找其它策略去均衡迁移数据了。

查看PD 监控

Store Region score 差不多是6TB 盘的一半左右,那三个163w的是相隔1天扩容的3个节点,看的出score 更低。

这里leader size 显示大小和原先6TB 盘接近,显示超过本身3TB 盘大小。

Store leader count 显示大小和原先存在的6TB TIKV 节点一样大。

显示Store Region size 是6.89TB ,实际硬盘使用在2.7TB 左右,为啥差距这么大呢?

监控指标store region zize 和 leader region size 大小取值的计算方式,由于多版本和 TiKV会压缩数据导致实际落盘存储大小和监控显示指标差距比较大,当超过500GB 数据采用zstd高压缩方式,压缩比大约3倍。

摘录 tidb-in-action的一段 :

至此就明白了上面监控数值显示大小和实际硬盘存储大小区别了,数据写入首先写入到rocksdb,然后由rocksdb进行落盘操作的。

Store leader score 分数已和原先的Tikv 节点近似,说明store leader 已均衡,但是region score 还偏低,还会持续有其它节点数据balance 过来,于是开始调整PD region_weight,leader_weight 参数来控制每个tikv 节点的分数,比如分别调整为0.5。

pd-ctl -i-u http://ip:2379

》store

》store weight 42607484 0.5 0.5

官方文档也给出说明了,因为新扩容磁盘容量大约为旧TIKV 节点的一半,所以我暂时通过调整权重来让新扩容的节点来存储旧集群数据量的一半。

调整后过12小时后再看,发现磁盘使用率已经降低到70%左右,说明参数起作用了,再逐步把region 转移到其它机器上。

04

总结

日常运维中还需要加强对Tidb 各个组件内部调度原理的学习,仔细研读官方文档,不然出事难免慌张,不知所措,感谢PingCap提供asktug 这个平台让我们可以搜索到很多实践运维案例,少走很多弯路。

文章知识点与官方知识档案匹配,可进一步学习相关知识
Java技能树首页概览128199 人正在系统学习中

[转帖]TIKV扩容之刨坑填坑​的更多相关文章

  1. Cloudera Manager 5.9 和 CDH 5.9 离线安装指南及个人采坑填坑记

    公司的CDH早就装好了,一直想自己装一个玩玩,最近组了台电脑,笔记本就淘汰下来了,加上之前的,一共3台,就在X宝上买了CPU和内存升级了下笔记本,就自己组了个集群. 话说,好想去捡垃圾,捡台8核16线 ...

  2. Phoenix踩坑填坑记录

    Phoenix踩坑填坑记录 Phoenix建表语句 如何添加二级索引 判断某表是否存在 判断索引是否存在 Date类型日期,条件判断 杂项 记录Phoenix开发过程中的填坑记录. 部分原文地址:ph ...

  3. Spark踩坑填坑-聚合函数-序列化异常

    Spark踩坑填坑-聚合函数-序列化异常 一.Spark聚合函数特殊场景 二.spark sql group by 三.Spark Caused by: java.io.NotSerializable ...

  4. Kafka踩坑填坑记录

    Kafka踩坑填坑记录 一.kafka通过Java客户端,消费者无法接收消息,生产者发送失败消息 二. 一.kafka通过Java客户端,消费者无法接收消息,生产者发送失败消息 在虚拟机上,搭建了3台 ...

  5. Linux踩坑填坑记录

    Linux踩坑填坑记录 yum安装失败[Errno 14] PYCURL ERROR 6 - "Couldn't resolve host 'mirrors.aliyun.com'" ...

  6. 自制Amiibo 踩坑/填坑 指南

    去年买了台老版NS,后来得知有Amiibo这种东西的存在,但是学校附近都买不到. 再后来网上看见有人在X宝卖自制卡片,就寻思着是否能自己 DIY一套,于是掉坑里. 要想使用自制Amiibo,一共要做两 ...

  7. FreeSWITCH 安装配置的 各种坑, 填坑

    个人安装环境: OS:CentOS6.7 64位 FreeSWITCH Ver:1.6.17 一. 编译出错 安装 之前, 最好 先安装 这几个东西(如果有, 请忽略): yasm (有nasm的话 ...

  8. IdentityServer4结合AspNetCore.Identity实现登录认证踩坑填坑记录

    也可以自定义实现,不使用IdentityServer4.AspNetIdentity这个包,当然还要实现其他接口IResourceOwnerPasswordValidator. IProfileSer ...

  9. React Native填坑之旅--与Native通信之iOS篇

    终于开始新一篇的填坑之旅了.RN厉害的一个地方就是RN可以和Native组件通信.这个Native组件包括native的库和自定义视图,我们今天主要设计的内容是native库方面的只是.自定义视图的使 ...

  10. https填坑之旅

    Boss说,我们买了个权威证书,不如做全站式的https吧,让用户打开主页就能看到受信任的绿标.于是我们就开始了填坑之旅. [只上主域好不好?] 不好...console会报出一大堆warning因为 ...

随机推荐

  1. JavaImprove--Lesson03--String的工具类,Math,Runtime,BigDecimal,Date

    一String的工具类 String的作为字符串对象,也是使用最多的数据类型对象 所以难免有很多操作,字符串的常见操作包括:字符串拼接,字符串反转,字符串长度,字符串转换等 直接使用String类型来 ...

  2. 云小课|细数那些VMware虚拟机的恢复招式

    阅识风云是华为云信息大咖,擅长将复杂信息多元化呈现,其出品的一张图(云图说).深入浅出的博文(云小课)或短视频(云视厅)总有一款能让您快速上手华为云.更多精彩内容请单击此处. 摘要:当遭遇误操作.病毒 ...

  3. 顶会VLDB'22论文解读:多元时序预测算法METRO

    摘要:本文提出了一个端到端的MTS预测框架METRO.METRO的核心思想是利用多尺度动态图建模变量之间的依赖关系,考虑单尺度内信息传递和尺度间信息融合. 本文分享自华为云社区<VLDB'22 ...

  4. 百度高德地图JS-API学习手记:地图基本设置与省市区数据加载

    无论是百度还是高德地图开发,还是高德地图开发.官方的给的案例启示很多,copy再修改下,就完成了 https://lbs.amap.com/api/javascript-api/summary  ht ...

  5. Walrus 入门教程:如何创建模板以沉淀可复用的团队最佳实践

    模板是 Walrus 的核心功能之一,模板创建完成后用户可以重复使用,并在使用过程中逐渐沉淀研发和运维团队的最佳实践,进一步简化服务及资源的部署.用户可以使用 HCL 语言自定义创建模板,也可以一键复 ...

  6. docker镜像列表存在但删除显示 No such image问题解决

    近期使用了docker,但删除镜像时候遇到了无法删除问题.提示:No such Image.原因有两个,解决方法如下: 原因1: 容器还存在是无法删除镜像的 解决步骤: 1.停掉容器(docker s ...

  7. 转换 nvarchar 值 '81000000825' 时溢出了整数列

    转换 nvarchar 值 '81000000825' 时溢出了整数列

  8. PPT 动画入门

    元素动画 进入动画 元素从无到有的过程 退出动画 元素从有到无的过程 退出动画和进入动画,一对一 强调动画 在元素上变化的过程(如放大) 动作路径 3D动画 三维动画 低版本不支持 组合动画 切换动画 ...

  9. sqlalchemy union 联合查询

    在最近的工作中遇到一个问题,要将两个字段相似的表里的数据统一起来展示在一个统计页面中.如果是单纯的展示数据那很简单,两个表查出来之后组合一下就完事了,但是有坑的地方就是分页和按照时间搜索,这两个功能决 ...

  10. Spring Cloud 和 Dubbo 哪个会被淘汰?

    今天在知乎上看到了这样一个问题:Spring Cloud 和 Dubbo哪个会被淘汰?看了几个回答,都觉得不在点子上,所以要么就干脆写篇小文瞎逼叨一下. 简单说说个人观点 我认为这两个框架大概率会长期 ...