数据库|三地五中心,TiDB POC最佳实践探索!

目录

一、POC测试背景

//测试环境信息

二、流量单元化控制

//需求

//解决方案

三、跨城获取TSO的影响与探索

//问题描述与初步分析

//优化方案

四、灾难恢复与流量切流

//需求

//pd leader 切换

//region leader t切换

五、写在最后


一、POC测试背景

在某地震多发省,为了避免地震造成的机房级灾难,或者城市级灾难,导致整个系统不可用,拟建设一套三地五中心五副本分布式高可用数据库系统,保证高可用需求。

在该系统中需要接入不同地区的应用流量,做流量单元化处理,且前期应用开发已经采用了百库百表的水平分库表策略。为尽可能减少应用和数据库延迟、数据库计算层向存储层跨机房跨城取数延迟,需要做到业务流量与对于数据分片leader在同一个机房。

//测试环境信息

机器软件环境配置

共12台阿里私有云托管物理机,其中10台用作部署集群,2台用作部署同测试HTAP能力和扩容实践。

单台配置如下:

机器与空间信息

共有三个城市:cd、ya、lz

五个机房:cd有两个机房AZ1、AZ2;ya有两个机房AZ3、AZ4;lz有一个机房AZ5

延迟:同城两机房延时小于1ms;cd与ya两地延时3ms;cd与lz两地延时7ms;ya与lz两地延时9ms

机器放置拓扑:每个机房两台机器

二、流量单元化控制

//需求

3地数据中心架构有如下需求:

  • db_00-24 这 25 个库的 leader 在 AZ1,db_25-49 这 25 个库的 leader 在 AZ2,db_50-74 这 25 个库的 leader 在 AZ3,db_75-99 这 25 个库的 leader 在 AZ4
  • AZ5 不能有 Leader,即使前面 4 个 AZ 任意一个故障,AZ5 也不能 Leader
  • 5 副本(max

//解决方案

1、给机器打label标签

以az1的两台机器为例:
tikv_server:
-host1
config:
server.lables: {az: "az1",host : "host1"}
-host2
config:
server.lables: {az: "az1",host : "host2"}

2、给AZ5的机器打上reject-leader规则

label-property:
reject-leader:
- key: "dc"
value: "sha"

详细细节参考跨数据中心部署拓扑 | PingCAP 文档中心(https://docs.pingcap.com/zh/tidb/stable/geo-distributed-deployment-topology#pd-%E5%8F%82%E6%95%B0)

3、使用placement rule in sql 配置主副本leader放置规则

创建放置在az1数据的放置规则:
CREATEPLACEMENT POLICYp1 LEADER_CONSTRAINTS="+az=az1"FOLLOWER_CONSTRAINTS="{+az=az2: 1,+az=az3: 1,+az=az4: 1,+az=az5: 1}"在百库百表下每个az约有进250+库,2500+表生成更改表放置规则的sql语句,约2500+DDL
selectconcatenate('alter table',table_achema ,'.',table_name,'placement policy = p1'frominformation_schema.tables whereright(table_schema ,2) between'00'and'24'orderbytable_schema
备注:在库已有放置规则的情况下,库下新建无放置规则的表

详细细节参考Placement Rules in SQL | PingCAP 文档中心(https://docs.pingcap.com/zh/tidb/stable/placement-rules-in-sql#placement-rules-in-sql)

三、跨城获取TSO的影响与探索

//问题描述与初步分析

压力测试中,az1、az2、az3、az4各占25%流量,流量与数据主副本leader也保持一致,但是响应延时却并不一致,结合我们看到tso wait指标比较高,我们怀疑是跨城访问pd leader的延时导致

//实测确认跨城获取TSO影响

为了确认是否是跨城获取TSO影响导致,我们主动将pd leader transfer到各个机房去做测试

测试结果表明:pd leader 切换到哪个机房后,该机房的响应延时就降低了,这也说明即使tso有预分配机制,但是跨城延时仍然对tso的获取有很大影响。

//优化方案

拆分一套集群为4套集群,这样保证每份流量所属的tidb server 都能在本机房pd leader获取tso。

四、灾难恢复与流量切流

//需求

1、当发生机房级别灾难时,流量需要切换,为保证最佳性能,pd leader 也要region leader 也要尽可能的与流量进行契合

2、同城一机房挂机后,流量优先切换到同城另一个机房

3、当一个城市两机房全部挂机后,例如cd的az1和az2挂机,流量全部切换至az3和az4,不切换到az5

//pd leader 切换

给pd menber 打上权重,保证灾难时优先调度pd leader 到同城节点交互模式
tiup ctl:v<CLUSTER_VERSION>pd -i -uhttp://127.0.0.1:2379以az1流量为例,设置pd leader 调度策略
tiup ctl:v7.1.0pd member leader_priority pd-15
tiup ctl:v7.1.0pd member leader_priority pd-23
tiup ctl:v7.1.0pd member leader_priority pd-31
tiup ctl:v7.1.0pd member leader_priority pd-41
tiup ctl:v7.1.0pd member leader_priority pd-50手动pd leader 切换(为避免切换后不稳定,需要先调整调度权重)
tiup ctl:v7.1.0pd member leader transfer pd3

//region leader t切换

不合理的切换方式:

第一步:
假设原放置az1的region leader需要切换到az2,执行sql获得语句,约2500+DDL
selectconcatenate('alter table',table_achema ,'.',table_name,'placement policy = p2'frominformation_schema.tables whereright(table_schema ,2) between'00'and'24'orderbytable_schema
第二步:
执行获得的2500+个DDL问题:切换时间长
数据库层操作:altertablexx placement policyaz2; -- 之前是 az1最终耗时:28 分钟

优化后切换方式:

换一个思路不再更改表绑定更换规则,而是直接更改绑定的规则的内容
ALTERPLACEMENT POLICYp1 LEADER_CONSTRAINTS="+az=az2"FOLLOWER_CONSTRAINTS="{+az=az1: 1,+az=az3: 1,+az=az4: 1,+az=az5: 1}"切换时常约3分钟

五、写在最后

1、poc(概念验证)是一个非常好的检验数据库能力的方式,可以帮我们验证和了解各种功能

2、本次只摘取了整个测试实战过程中碰到的三个点来分享,希望能帮助到有类似需求的TiDB用户

作者:陈卓敏| 后端开发工程师

版权声明:本文由神州数码云基地团队整理撰写,若转载请注明出处。

公众号搜索神州数码云基地,后台回复数据库,加入数据库技术交流群。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/708537.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

sylar高性能服务器-日志(P43-P48)内容记录

文章目录 P43&#xff1a;Hook01一、HOOK定义接口函数指针获取接口原始地址 二、测试 P44-P48&#xff1a;Hook02-06一、hook实现基础二、class FdCtx成员变量构造函数initsetTimeoutgetTimeout 三、class FdManager成员变量构造函数get&#xff08;获取/创建文件句柄类&#x…

mongoDB 优化(1)索引

1、创建复合索引&#xff08;多字段&#xff09; db.collection_test1.createIndex({deletedVersion: 1,param: 1,qrYearMonth: 1},{name: "deletedVersion_1_param_1_qrYearMonth_1",background: true} ); 2、新增索引前&#xff1a; 执行查询&#xff1a; mb.r…

火灾安全护航:火灾监测报警摄像机助力建筑安全

火灾是建筑安全中最常见也最具破坏力的灾难之一&#xff0c;为了及时发现火灾、减少火灾造成的损失&#xff0c;火灾监测报警摄像机应运而生&#xff0c;成为建筑防火安全的重要技术装备。 火灾监测报警摄像机采用高清晰度摄像头和智能识别系统&#xff0c;能够全天候监测建筑内…

TDengine 研发分享:利用 Windbg 解决内存泄漏问题的实践和经验

内存泄漏是一种常见的问题&#xff0c;它会导致程序的内存占用逐渐增加&#xff0c;最终导致系统资源耗尽或程序崩溃。AddressSanitizer (ASan) 和 Valgrind 是很好的内存检测工具&#xff0c;TDengine 的 CI 过程就使用了 ASan 。不过这次内存泄漏问题发生在 Windows 下&#…

JVM的深入理解

1、JVM&#xff08;Java虚拟机&#xff09;&#xff1a;我们java编译时候&#xff0c;下通过把avac把.java文件转换成.class文件&#xff08;字节码文件&#xff09;&#xff0c;之后我们通过jvm把字节码文件转换成对应的cpu能识别的机器指令&#xff08;翻译官角色&#xff09…

【小沐学QT】QT学习之信号槽使用

文章目录 1、简介2、代码实现2.1 界面菜单“转到槽”方法2.2 界面信号槽编辑器方法2.3 QT4.0的绑定方法2.4 QT5.0之后的绑定方法2.5 C11的方法2.6 lamda表达式方法 结语 1、简介 在GUI编程中&#xff0c;当我们更改一个小部件时&#xff0c;我们通常希望通知另一个小程序。更普…

JavaScript的书写方式

JavaScript的书写方式 目前较为流行的是第二种和第三种&#xff0c;第一种很少见。在第二种和第三种推荐使用第三种&#xff0c;因为在日常开发/工作中&#xff0c;第三种是最为常见的 1.行内式 把JS代码嵌入到html元素内部 示例代码 运行效果 由于JS中字符串常量可以使用单引…

搜维尔科技:CATIA为建筑、基础设施和城市规划提供虚拟孪生力量

超越传统项目交付方法限制的协作 复杂建筑和基础设施项目开发的设计和工程流程需要多个利益相关者和所有项目阶段的密切合作。此外&#xff0c;日益复杂的施工项目要求所有团队都依赖 CATIA 和3D EXPERIENCE 虚拟孪生技术作为“通用语言”&#xff0c;以促进协作并减少阶段之间…

K8S(kubernetes) 部署运用方式汇总

k8s 部署运用这边汇总两类&#xff0c;第一种是命令版本。第二种是文本版本&#xff0c;通过创建yaml文件方式。 此次目标&#xff1a;通过k8s创建nginx,端口80并且可以被外网访问。 kubectl get namespaces 一、创建命名空间 首先创建一个命名空间&#xff0c;有了命名空间后…

paimon表读优化-Read-optimized Table

目录 概述实践文档测试 结束 概述 paimon 版本 : 0.7 测试目标: 类似 hudi ro 表 实践 文档 Read-optimized Table 测试 0: jdbc:hive2://10.32.36.142:10009/> select * from trace_log_refdes_hive_ro$ro limit 10;24/02/28 14:24:33 INFO ExecuteStatement: Execu…

获取tensorflow lite模型指定中间层的输出

以mobilenet v2为例子&#xff0c;我已经训练好了模型&#xff0c;有tflite格式和onnx格式两种模型的权重文件&#xff0c;我想获取tflite模型在推理阶段neck部分的输出。 查看onnx模型得到neck最后一层位置 使用netron查看onnx模型结构 从name中能知道Reshape是neck的最后一…

微信小程序固定头部-CSS实现

效果图 代码逻辑&#xff1a;设置头部的高度&#xff0c;浮动固定后&#xff0c;再加个这个高度的大小的外边距 .weui-navigation-bar {position: fixed;top: 0px;left: 0px;right: 0px;height:90px; } .weui-navigation-bar_bottom{height:90px; }

SpringCloud 基本概念

开篇 学习springcloud的前提我已经认为你已经具备&#xff1a; 微服务的基本概念具备springboot的基本用法 eurake server:注册中心,对标zookeeper eurake client:服务,对标dubbo ribbon:负载均衡,对标nginx feign:与ribbon类似,目前项目没有使用,暂时就不写 hystrix:断路…

双指令集成一体控制比例放大器

双指令独立输入比例放大器是一种能够接收两个独立指令输入来控制两个比例电磁铁的比例阀放大器。 该类放大器可以同时控制两个单电磁铁比例阀&#xff0c;每一组都可以根据不同的指令输入进行独立操作。 它通常兼容多种类型的指令输入&#xff0c;如0-10V、0-5V以及4-20mA等&…

docker版本 jenkins配置gitlab自动部署

前端项目 Build steps pwd npm config set registry https://registry.npm.taobao.org npm -v node -v #npm install npm run build:prod tar -czvf QASystem.tar.gz distpwd cd /data/zhouxy37/vue_deploy tar -zxvf QASystem.tar.gz sudo mv dist QASystem cp -r QASyste…

机器人内部传感器阅读梳理及心得-速度传感器-模拟式速度传感器

速度传感器是机器人内部传感器之一&#xff0c;是闭环控制系统中不可缺少的重要组成部分&#xff0c;它用来测量机器人关节的运动速度。可以进行速度测量的传感器很多&#xff0c;如进行位置测量的传感器大多可同时获得速度的信息。但是应用最广泛、能直接得到代表转速的电压且…

fastjson序列化MessageExt对象问题(1.2.78之前版本)

前言 无论是kafka&#xff0c;还是RocketMq&#xff0c;消费者方法参数中的MessageExt对象不能被 fastjson默认的方式序列化。 一、查看代码 Override public ConsumeConcurrentlyStatus consumeMessage(List<MessageExt> msgs,ConsumeConcurrentlyContext context) {t…

江科大stm32学习笔记——【4-1】OLED

一.原理 1.调试方式 串口调试&#xff1a;通过串口通信&#xff0c;将调试信息发送到电脑端&#xff0c;电脑使用串口助手显示调试信息。 显示屏调试&#xff1a;直接将显示屏连接到单片机&#xff0c;将调试信息打印在显示屏上。 Keil调试模式&#xff1a;借助Keil软件的调…

resilience4j 2.0.0版本使用要求最低JDK17(使用踩坑记录)

文章目录 &#x1f50a;博主介绍&#x1f964;本文内容&#x1f4e2;文章总结&#x1f4e5;博主目标 &#x1f50a;博主介绍 &#x1f31f;我是廖志伟&#xff0c;一名Java开发工程师、Java领域优质创作者、CSDN博客专家、51CTO专家博主、阿里云专家博主、清华大学出版社签约作…

六自由度Stewart平台的matlab模拟与仿真

目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 4.1运动学原理 4.2 Stewart平台运动学方程 5.完整工程文件 1.课题概述 六自由度Stewart平台的matlab模拟与仿真&#xff0c;模拟六自由度Stewart平台的动态变化情况以及伺服角度。 2.系统仿真结果 3.核…