作者:Dan 本文转载自公众号「白噪声OG」。

经历了上礼拜漫长的上线周期,终于有时间总结一下期间发生的故事。TiDB 是一款非常优秀的国产分布式 NewSQL 数据库,因其支持水平扩展性、强一致性、高可用性,从 18 年 3 月起已在国内银行的账务、支付类核心系统得到应用。

临近年中,银行重要系统的建设进入投产冲刺阶段,本次上线又有多个系统对接 TiDB,为了优化集群资源分配,引发了这次分享的主题——线上系统 TiKV 的缩容、region 的迁移,本文主要针对本次 TiKV 的缩容、迁移过程进行梳理总结。

TiDB 数据库的扩容已在官方文档进行了详细的说明(pingcap.com/docs-cn/op-…)并被各路大咖广泛提及,但缩容迁移并在银行交易系统上的实践却少有分享,这也是本文的目的之一。

进入主题,先交代下环境,服务器集群采用 NVMe+SSD 的存储方案构建了 16 个 TiKV 实例,作为重要的核心支付类系统,两地三中心五副本不可少,每个 TiKV 上 8K+ 个 region。整个迁移过程历时 5 个小时,过程中没有停止系统对外服务,很是顺滑平稳。

接下来还是看一下迁移的过程:

(一) TiKV 采用 Raft 一致性算法保证副本强一致性,迁移过程本质上是扩容的逆过程,确定下线的 TiKV 打上 label 后,将 region 搬移到最终保留下来的 TiKV 上。

(二) 接下来聚焦 region 1 的 Raft Group,对其副本进行搬移,实际上所有 region 的数据是一样的,只是在保留的 TiKV 内进行 region 数据的复制,新产生的副本由于数据不完整,作为 Raft Group 中的 learner。

(三) Learner 创建后,PD 会在这样的一个 Raft Group(5 个全副本 region + 2 个 learner)中发起选举:

  • 选举会增加 label 限制,确保 leader 最终在保留的 TiKV 中产生;

  • 由于 learner 没有投票权,选举实际还是个 5 副本选主,多数派 (N+1)/2 仍为 3。

(四) 这样新的 leader 选出来了,当两个新副本数据追平后,将删除下线 TiKV 中的 region。

(五) 这样一个新的 5 副本 Raft Group 我们就获得了。

这里再说几点:

1. 磁盘 IO 对迁移的效率影响还是很大的,测试环境使用普通的 SAS 盘,在更高并发的条件下,耗时长了很多。

2.(二)、(三)、(四)的过程并非原子化操作,当然 learner 的数据本身也不具备一致性,但对 raft 的改造最终要保证一致性,与 PingCAP 的开发同学确认后,这些会在之后加入。

3. 我认为最有意思,也最有意义的一点,learner 的引入是本次迁移过程中非常巧妙的设计,解决了数据不一致副本在选举过程中的尴尬地位,而 learner 也是 Multi-Raft 协议中的重要角色,HTAP 引擎 TiFlash&TiSpark 也以此引入列存副本,非常期待 TiDB 3.0。

PS:本次上线的重头戏 Cloud TiDB 在平稳运行后,希望有机会进行总结分享。TiDB 自上线后实现了多次重要变更操作,均未暂停系统对外服务,从一只开发狗的角度看 TiDB 在金融级 NewSQL 数据库的方向上的确投入了很多。

最后,感谢 PingCAP Gin 同学和研发大神们的支持,感谢运维爸爸们直到凌晨 4 点的奋斗。

转载于:https://juejin.im/post/5cdccdd5f265da037b61366f

银行交易系统 TiDB 在线缩容迁移相关推荐

  1. 贝壳金服 TiDB 在线跨机房迁移实践

    2019独角兽企业重金招聘Python工程师标准>>> 作者介绍 : 李振环,贝壳金服数据基础架构负责人,目前负责数据平台和企业级数据仓库开发. 公司介绍 贝壳金服是专注居住场景的金 ...

  2. TiDB+TiSpark部署--安装,扩缩容及升级操作

    作者: tracy0984 原文来源: https://tidb.net/blog/9dc6c38e 背景 随着业务的变更,可能经常会遇到TiDB数据库的TiKV或TIDB Server节点扩缩容的需 ...

  3. 拆解交易系统--性能优化,安全加固与弹性扩缩容

    点击上方蓝色字体,选择"设为星标" 优质文章,及时送达 前几篇文章我们拆解了交易系统架构层次的设计方案,对于代码细节我们讨论很很少,今天基于几个方面简短的介绍一下,未来有时间可以针 ...

  4. Fluid 0.5 版本发布:开启数据集缓存在线弹性扩缩容之路

    作者 | 顾荣  南京大学PASALab, Fluid项目co-founder 来源 | 阿里巴巴云原生公众号 导读:为了解决大数据.AI 等数据密集型应用在云原生场景下,面临的异构数据源访问复杂.存 ...

  5. Fluid 0.5 版本:开启数据集缓存在线弹性扩缩容之路

    简介:为了解决大数据.AI 等数据密集型应用在云原生场景下,面临的异构数据源访问复杂.存算分离 I/O 速度慢.场景感知弱调度低效等痛点问题,南京大学PASALab.阿里巴巴.Alluxio 在 20 ...

  6. TiDB亿级数据亚秒响应查询扩缩容

    目录 1 查看数据分布 2 当前集群部署拓扑 3 扩容TiKV节点 3.1 编写扩容脚本 3.2 执行扩容命令 3.2.1 命令格式 3.2.2 执行命令 3.3 验证扩容信息 3.3.1 查看节点信 ...

  7. 【kafka运维】分区副本重分配、数据迁移、副本扩缩容 (附教学视频)

    日常运维.问题排查=> 滴滴开源LogiKM一站式Kafka监控与管控平台 (后续的视频会在 公众号[首发].CSDN.B站等各平台同名号[石臻臻的杂货铺]上上传 ) 分区副本重分配+注意事项+ ...

  8. 【ES实战】ES集群节点迁移与缩容补充说明

    [ES实战]ES集群节点迁移与缩容补充说明 [ES实战]ES集群节点迁移与缩容 文章目录 [ES实战]ES集群节点迁移与缩容补充说明 1.集群的现状分析和集群的规划 2.集群健康关注点,变化关注点 3 ...

  9. Kafka生产环境缩容遇到的一个坑

    1.背景 最近在折腾Kafka日志集群,由于公司部署的应用不断增加,日志采集程序将采集到的日志发送到Kafka集群时出现了较大延迟,总的TPS始终上不去,为了不影响业务团队通过日志排查问题,采取了先解 ...

最新文章

  1. redis之 centos 6.7 下安装 redis-3.2.5
  2. 如何在10分钟内进行可用性测试
  3. oracle之控制文件恢复
  4. 有关转换流中涉及的【乱码问题】
  5. ***linux下mysql的root密码忘记解决方法
  6. ionic xcode 上传appstroe 创建Distribution证书报错 you already have a current iOS Distribution certificate
  7. android 蓝牙通信编程
  8. 【读书笔记】—— 《从 0 到 1》
  9. iPhone is busy: Preparing debugger support for iPhone的解决办法
  10. codepush 微软服务器,ionic3 code-push 搭建自己服务器的问题
  11. pythonmt4通讯swot矩阵_基于SWOT与安索夫矩阵的市场战略分析.doc
  12. 层次分析法(AHP)原理以及应用
  13. 【图论·习题】同余最短路:跳楼机
  14. c语言编程线性规划,使用C语言实现单纯形法求解线性规划问题.doc
  15. PostScript文件
  16. 彪悍的人生不需要解释,需要解释的人生是软弱的
  17. css3 匀速运动的圆
  18. 使用EditPlus技巧
  19. 淘宝放大镜插件(vue-piczoom)
  20. GeoHash算法与用法

热门文章

  1. csrf-token
  2. jmeter5.0汉化
  3. selective gaussian blur /adaptive-blur
  4. 使用WEB应用时后台发生的事
  5. Lucene6去掉了Filter但是可以用BooleanQuery实现Filter查询
  6. Jquerymobile 简单安装
  7. JQuery中的类选择器
  8. java实现多级菜单(java递归)方法二
  9. echarts图表大小随着外部div大小变化
  10. 解决上传apk文件后为vnd.android.package-archive格式的问题