TiDB 落地SAS机器实践

网友投稿 563 2023-11-29

背景

目前大环境下,需有效利用现有机器资源来支撑业务应用的数据读写存储;多点现有TiDB集群大都是NVME ***高配机器,TiDB库场景多,其中就有QPS低但消耗空间大(逻辑数据量17T,6 tikv机器共22T磁盘,业务应用对查询延迟不敏感)的某TiDB集群(冷热分离类场景,MySQL热数据->TiDB冷数据),准备把该集群迁移至IDC 4台48C 万兆网卡共180T RAID10 SAS机器(每台机器250G内存,3*15T data盘,每data12块盘,每块盘8T)

TiDB 落地SAS机器实践

机器性能测试表现

IDC RAID0、RAID10 SAS机器IO吞吐性能表现:随机读写吞吐差,顺序读写吞吐和nvme机器差不多

使用fio进行测试,RAID10(镜像+分片)机器是现有SAS机器测试,RAID0(分片)找运维支持单独格式化了台机器

nvme ssd机器

(现TiDB集群)

RAID0 idc sas机器

RAID10 idc sas机器

随机读

1284MB/s

11.2MB/s

18.0MB/s

随机写

1281MB/s

11.3MB/s

18.9MB/s

顺序写

381MB/s

343MB/s

352MB/s

顺序读

928MB/s

1316MB/s

1062MB/s

部署方案

每台机器250G内存按使用率70%,可使用内存175G;每台机器磁盘共45T按使用率70%,可使用磁盘31T

内部评估讨论下来使用方案三:3 TiDB集群 1TiKV节点/15T data盘,部署维护相对简单,不用配置Placement Rules

TiKV内存block_cache_size需要比理论70%内存水位消耗的block_cache_size小,TiKV节点非block_cache部分会消耗一定内存(如理论1TiKV block_cache_size 50GB,实践配置1TiKV block_cache_size 40GB)

方案一:1 TiDB大集群 2TiKV节点/ 15T data盘

每机器部署8个组件(6 tikv+1 tidb+1pd),tikv三副本,内存限制25G(block_cache_size=25G),tikv 25G*6 + tidb 25G=175G(70%内存水位),pd基本不消耗内存

1个TiDB大集群,每15T data盘放2 TiKV节点

优点

1个tidb大集群多库部署简单,运维管理方便

1套大集群能使用空间180T*70%=126T

同台机器3块RAID10 data盘最多允许宕3块不同盘

限制

单tikv空间最大可到10T(最大70%利用率),单tikv region多导致tikv<->pd、tikv region<->tikv region之前网络心跳压力大,需调大单region size,限制region最大key数量,开启region静默减少网络压力

需开启Placement Rules保证tikv相同副本在不同机器上

1集群多库存在某库大查询影响其它库

方案二:3 TiDB集群 1TiKV节点/ 8T data盘

每机器6个tikv资源池(每个tikv资源池8T),初始每机器3 tikv+1 tidb+1pd,tikv三副本,内存限制20G(block_cache_size=20G),tikv 20G*6 + tidb 25G=145G < 175G(70%内存水位)

需要运维把每台机器3块15T RAID10盘拆分为6块8T RAID1盘(镜像)

暂部署3套集群后续磁盘利用高可扩容资源池中另外12个tikv

优点

不同集群放不同data盘,可实现IO资源隔离

另外12个buffer tikv资源池可动态扩容进初始3套集群中

限制

需开启Placement Rules保证tikv相同副本在不同机器上

单tikv空间最大可到5T(最大70%利用率),单tikv region多导致tikv<->pd、tikv region<->tikv region之前网络心跳压力大,需调大单region size,限制region最大key数量,开启region静默减少网络压力

4台机器支撑2套TiDB集群计算节点(每套部署2计算节点),第3套TiDB集群计算节点部署在另外的2台MySQL SAS上

RAID1 IO性能有一定下降,同台机器最多允许宕6块盘

方案三:3 TiDB集群 1TiKV节点/15T data盘(使用)

每机器部署3个组件(3 tikv+1 tidb+1pd),tikv三副本,内存限制50G(block_cache_size=50G),tikv 50G*3 + tidb 25G=175G(70%内存水位),pd基本不消耗内存

3个TiDB集群,每15T data盘放1 TiKV节点

优点

3个TiDB集群多库运维管理方便,不用配置Placement Rules

不同集群放不同data盘,可实现IO资源隔离

3套集群每套集群能使用空间45T*70%=31T

RAID10最多允许宕3块不同盘

限制

单tikv空间最大可到10T,单tikv region多导致tikv<->pd、tikv region<->tikv region之前网络心跳压力大,需调大单region size,限制region最大key数量,开启region静默减少网络压力

4台机器支撑2套TiDB集群计算节点(每套部署2计算节点),第3套TiDB集群计算节点部署在另外的2台MySQL SAS上

相同集群多库存在某库大查询影响其它库

方案四:1 TiDB大集群 1TiKV节点/ 4T data盘

每机器部署14个组件(12 tikv+1 tidb+1pd),tikv三副本(五副本的话还差一台SAS机器),内存限制10G(block_cache_size=10G),tikv 10G*12 + tidb 25G=145G(70%内存水位),pd基本不消耗内存

1个TiDB集群,每4T data盘放1 TiKV节点(需要运维把3个15T盘拆分为12个4T盘,12块8T盘组成大RAID10,再分12个4T区)

优点

1个TiDB集群多库部署方便,运维管理方便

1套大集群能使用空间180T*70%=126T

不需要调整region size,region最大key数量

限制

单tikv空间最大4T,单tikv region少,tikv<->pd、tikv region<->tikv region之前网络心跳压力小

需开启Placement Rules保证tikv相同副本在不同机器上

RAID10分12区不同盘性能可能有耦合风险

相同集群多库存在某库大查询影响其它库

SAS TiDB性能测试表现

根据原默认96MB region大小比例调整以下配置减小单tikv region数过多时造成的网络心跳压力

show config where name like %region%size%; show config where name like %region%key%; #修改Region 容量空间的最大值,分裂后新 Region 的大小 set config tikv `coprocessor.region-max-size`=384*1024*1024; set config tikv `coprocessor.region-split-size`=256*1024*1024; #修改Region 最多允许的 key 的个数,分裂后新 Region 的 key 的个数 set config tikv `coprocessor.region-max-keys`=3840000; set config tikv `coprocessor.region-split-keys`=2560000; set config pd `schedule.max-merge-region-keys`=533333; tiup edit config配置 tikv: coprocessor.region-max-keys: 3840000 coprocessor.region-max-size: 402653184 coprocessor.region-split-keys: 2560000 coprocessor.region-split-size: 268435456 readpool.unified.min-thread-count: 4 rocksdb.max-background-jobs: 20 storage.block-cache.capacity: 53687091200

sysbench通用测试

版本:v5.1.2

Region size 96MB和Region size 256MB

Sysbench 读写模式、只读模式、只写模式下, region size 256MB在分别5,10,20,30,40,80,120并发线程测试10分钟表现均符合预期

读写模式(region size)/线程数/QPS

5

10

20

30

40

80

120

read_write(96MB)

4108

7628

13634

20660

27515

46282

58736

read_write

( 256MB)

4175

7818

14239

21011

28759

48255

60651

read_only

(96MB)

5085

10130

24445

39619

47790

65741

71250

read_only

(256MB)

5167

10363

24165

40395

48737

66297

70906

write_only

(96MB)

4529

7891

13578

19374

24946

40995

51733

write_only

(256MB)

4621

8344

14618

20468

26560

44066

55339

96MB和256MB下表region 相关信息

SELECT db_name,table_name,count(*) as table_region_num,sum(APPROXIMATE_SIZE)/count(*) as avg_region_size,sum(APPROXIMATE_KEYS)/count(*) as avg_keys FROM information_schema.tikv_region_status where db_name not in (mysql,PERFORMANCE_SCHEMA,METRICS_SCHEMA,INFORMATION_SCHEMA) group by db_name,table_name; +---------+------------+------------------+-----------------+-------------+ | db_name | table_name | table_region_num | avg_region_size | avg_keys | +---------+------------+------------------+-----------------+-------------+ | test_1 | sbtest1 | 7 | 89.2857 | 731070.7143 | | test_1 | sbtest19 | 7 | 87.0000 | 680148.1429 | | test_1 | sbtest9 | 7 | 84.8571 | 599431.1429 | | test_1 | sbtest16 | 7 | 86.2857 | 647396.8571 | | test_1 | sbtest2 | 7 | 86.4286 | 628656.5714 | | test_1 | sbtest12 | 8 | 78.7500 | 640271.1250 | | test_1 | sbtest17 | 7 | 89.7143 | 711358.2857 | | test_1 | sbtest20 | 7 | 91.0000 | 735381.0000 | | test_1 | sbtest5 | 7 | 93.4286 | 753170.1429 | | test_1 | sbtest11 | 7 | 87.2857 | 627783.2857 | | test_1 | sbtest18 | 7 | 90.1429 | 730895.2857 | | test_1 | sbtest10 | 7 | 91.5714 | 721825.0000 | | test_1 | sbtest3 | 7 | 91.7143 | 652131.2857 | | test_1 | sbtest4 | 7 | 84.8571 | 601430.5714 | | test_1 | sbtest15 | 7 | 83.8571 | 582848.1429 | | test_1 | sbtest7 | 7 | 91.1429 | 693512.8571 | | test_1 | sbtest6 | 7 | 88.1429 | 651794.1429 | | test_1 | sbtest14 | 7 | 74.4286 | 531716.5714 | | test_1 | sbtest13 | 8 | 78.5000 | 640412.0000 | | test_1 | sbtest8 | 7 | 86.0000 | 623834.4286 | +---------+------------+------------------+-----------------+-------------+ +---------+------------+------------------+-----------------+--------------+ | db_name | table_name | table_region_num | avg_region_size | avg_keys | +---------+------------+------------------+-----------------+--------------+ | test_1 | sbtest6 | 3 | 291.0000 | 2189007.3333 | | test_1 | sbtest3 | 3 | 212.3333 | 1812167.3333 | | test_1 | sbtest4 | 3 | 287.3333 | 2223480.0000 | | test_1 | sbtest15 | 3 | 281.3333 | 2144375.0000 | | test_1 | sbtest7 | 3 | 290.3333 | 2462079.0000 | | test_1 | sbtest5 | 3 | 288.3333 | 2139456.0000 | | test_1 | sbtest11 | 3 | 289.6667 | 2180768.3333 | | test_1 | sbtest20 | 3 | 270.0000 | 2054470.3333 | | test_1 | sbtest17 | 4 | 184.2500 | 1532379.5000 | | test_1 | sbtest10 | 3 | 284.3333 | 2169171.3333 | | test_1 | sbtest18 | 4 | 165.7500 | 1231921.0000 | | test_1 | sbtest12 | 3 | 283.6667 | 2148944.3333 | | test_1 | sbtest19 | 3 | 273.0000 | 2061119.0000 | | test_1 | sbtest9 | 3 | 288.6667 | 2451287.6667 | | test_1 | sbtest2 | 4 | 169.2500 | 1255160.2500 | | test_1 | sbtest1 | 3 | 282.0000 | 2166915.3333 | | test_1 | sbtest16 | 3 | 283.6667 | 2176474.3333 | | test_1 | sbtest14 | 3 | 310.0000 | 2602663.3333 | | test_1 | sbtest8 | 3 | 283.3333 | 2137327.6667 | | test_1 | sbtest13 | 3 | 274.3333 | 2112638.3333 | +---------+------------+------------------+-----------------+--------------+

*** TiDB&SAS TiDB业务应用SQL测试

SAS TiDB 4个业务应用库仅有部分历史数据,用来验证*** TiDB和SAS TiDB SQL查询延迟

库名

ware_xxx

dmall_xxx

dmall_xxx

dmall_xxx

当前*** TiDB 查询延迟

1.8S

60ms

80ms

60ms

SAS TiDB查询延迟

3.0S

100ms

120ms

110ms

只读查询SQL

select_ware_xxx.txt

SQL使用的联合索引不是最优

select_dmall_xxx.txt

select_dmall_xxx (2).txt

select_dmall_xxx (3).txt

单独备份部分表还原到SAS上验证SQL性能

create user dumpling@10.% identified by xxxxx; grant SELECT,RELOAD,LOCK TABLES,REPLICATION CLIENT on *.* to dumpling@10.% ; cd /root/tidb-toolkit-v5.2.0-linux-amd64/bin ./dumpling -u dumpling \ -P 4000 \ -h 10.xxxx \ -p xxxxxx \ -B xxxx\ --filetype sql \ --threads 15 \ -o /data2/xxxx \ -F 256 ./tidb-lightning -config=/root/tidb-lightning.toml --check-requirements=false

扩展区NVME *** TiDB迁移

TiDB相关组件迁移

4台SAS机器/data1盘扩容进现有集群,组成10个TiKV存储大集群

在其中3台SAS机器上扩容3个pd元数据节点,2台SAS机器上扩容2个tidb计算节点,1台SAS机器上扩容grafana&prometheus

再把***机器(pd节点、tidb节点、grafana&prometheus)缩容(pd-ct提前切换pd leader至SAS机器)只剩SAS机器实现扩展区*** TiDB库迁移至IDC SAS机器

因为不是单独新部署的一套TiDB集群,就没有调整SAS机器TiDB集群region size, region keys(参数扩容、缩容方式迁移和原有*** TiDB集群保持了默认一致)

TiDB DNS解析修改

修改tidb域名解析至SAS机器tidb计算节点

该步骤在SAS机器扩容进集群后

DRC同步修改

自研DRC同步工具修改mysql->tidb 目标tidb地址,因目标tidb地址是域名,重启DRC同步链路后重新解析tidb域名至SAS机器tidb计算节点

该步骤在SAS机器扩容进集群后

tiup中控配置迁移

#*** 机器中控机 cd /root/ tar czvf tiup.tar.gz .tiup 压缩tiup中控配置 #SAS 机器中控机 scp tiup.tar.gz迁移至idc sas 10.xxxxx /root机器并解压 ~/.bashrc 添加export PATH=/root/.tiup/bin:$PATH ,source ~/.bashrc idc sas机器都添加sshd_config allowusers sas中控机分别ssh-copy-id 新中控机10.xxxxx 公钥至目标机器 sas机器tiup display, restart grafana&prometheus验证功能是否正常

SAS 机器扩容进现有集群后,高峰期SAS机器磁盘性能利用率相比***机器大

SAS机器:

***机器:

后续表现

后期SAS机器TiDB性能表现,P999延迟有秒级别~几十秒,业务应用方也能接受查TiDB冷数据延迟时间

Raft store cpu使用率高峰期超过110%左右,raftstore.store-pool-size 参考值 官方参考值为raftstore.store-pool-size(默认2) * 85% = 45%左右,后续增大store_pool_size后再持续观察raft store cpu使用率

总结

NVME *** TiDB集群迁移至4台SAS机器后节省了6 tikv机器+3 ( tidb+pd )机器,单集群共42T(70%磁盘水位算)大容量SAS TiDB也对低QPS(业务查询延迟时间不敏感)数据需长期保存业务场景提供有力支撑保障

加强和业务应用方协作,不同业务场景TiDB适配不同存储(NVME ***机器 or SAS机器)

单机器多TiKV情况下block_cache_size内存、磁盘使用上和各组件端口占用方面需提前规划好

单TiKV大磁盘情况region size、region keys可根据实际测试效果适当增大

Placement Rules 使用文档

漫谈TiDB数据库部署

专栏 - TiDB 数据冷热存储分离测试

专栏 - 百TB级TiDB集群在线更换NVME磁盘优化实践 | TiDB 社区

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:金融数据治理会议,探索金融行业数字化转型的关键
下一篇:TiDB 使用国内公有云和私有部署的 S3 存储备份指南
相关文章