对守护主备集群进行压测
2026/7/31 5:05:58 网站建设 项目流程

目录

一、什么叫压测?

二、集群规划

三、搭建守护主备集群

四、TPCC测试准备

1、上传安装包

2、修改配置

五、TPCC测试

1、创建表空间/测试用户

2、建立测试表

3、装载数据

4、TPCC正常测试

5、TPCC摸高测试

6、TPCC故障转移测试(主机宕机)

7、TPCC故障转移测试(备机宕机)

六、总结


一、什么叫压测?

定义:压测,全称压力测试,是指通过模拟大量并发用户或高频率请求,对数据库系统施加超出日常业务水平的负载,以此评估系统在极限负载条件下的性能表现。

本次实战采用TPC-C基准测试规范开展压测,验证达梦守护主备集群的高可用能力,重点观测集群在故障转移过程中的业务抖动是否在可接受范围内。

二、集群规划

本次实战采用经典的两节点守护主备集群,提前规划好IP、端口及实例名。

机器1机器2
业务IP192.168.159.156192.168.159.157
心跳IP192.168.159.156192.168.159.157
实例名GRP1_RT_01GRP1_RT_02
实例端口52365236
MAL端口53365336
MAL守护进程端口54365436
守护进程端口55365536
OGUID4533145331
守护组GRP1GRP1
安装目录/home/dmdba/dmdbms/home/dmdba/dmdbms
实例目录/dmdata/data/dmdata/data

三、搭建守护主备集群

搭建守护主备集群并非本文重点,在此仅做概括性说明。详细步骤可参考达梦在线服务平台文档中的运维指南或搜索《守护主备集群搭建》相关博文进行搭建。

四、TPCC测试准备

1、上传安装包

将宿主机上的JDK压缩包、BenchmarkSQL源码包与Apache-Ant构建工具上传至Linux虚拟机。

JDK安装:将压缩包放置在/home目录下进行解压,随后在bash_profile文件中配置java环境变量,确保系统能够识别javajavac命令。

tar -zxvf jdk-8u202-linux-x64.tar.gz

vi .bash_profile

export JAVA_HOME=/home/jdk1.8.0_202

export PATH=$JAVA_HOME/bin:$PATH

source .bash_profile

BenchmarkSQL安装:将压缩包放置在/home目录下进行解压。

unzip benchmarksql-5.0.zip

Apache-Ant安装:将压缩包放置在/home目录下进行解压。Ant是一个Java构建工具,用于将 BenchmarkSQL的源码编译为可执行的字节码文件。

gzip -dc apache-ant-1.9.16-bin.tar.gz |tar xvf -

达梦数据库的JDBC驱动位于数据库安装目录的/drivers/jdbc下,将其拷贝到BenchmarkSQL 的/lib/dameng目录中,使BenchmarkSQL在编译和运行时能够识别达梦数据库。

mkdir -p /lib/dameng

cp /home/dmdba/dmdbms/drivers/jdbc/DmJdbDriver8.jar benchmarksql-5.0/lib/dameng

所有安装包统一放置在/home目录下,目录结构如下:

2、修改配置

BenchmarkSQL默认并未内置达梦数据库的支持,因此需要修改其源码中数据库类型识别模块,新增达梦数据库类型,确保编译和运行时能够正确加载达梦JDBC驱动。即:

vim /home/benchmarksql-5.0/src/client/jTPCC.java

进入BenchmarkSQL根目录,执行ant命令进行编译。

[root@dmtest01 benchmarksql-5.0] /home/apache-ant-1.9.16/bin/ant

Ant会将源码编译为字节码文件,并生成可执行的JAR包存放在benchmarksql/dist目录下。编译成功后,BenchmarkSQL即可与达梦数据库正常建立连接并执行测试。

接下来编写BenchmarkSQL的核心配置文件props.dm,该文件定义了压测的全部运行参数:

vi /home/BenchmarkSQL/run/props.dm

  • 仓库数(warehouses)设为10,受限于测试环境的磁盘空间,;

  • 终端数(terminals)设为12,模拟12个并发数据库连接;

  • 测试时长(runMins)设为5分钟,每次压测持续运行5分钟;

  • 事务权重按照TPCC标准配比:新订单(NEW_ORDER)占比45%,支付(PAYMENT)占比43%,订单查询(ORDER_STATUS)占比4%,发货(DELIVERY)占比4%,库存水平(STOCK_LEVEL)占比4%;

客户端还需配置dm_svc.conf文件,定义服务名DMDW对应主备节点的IP与端口。其中LOGIN_MODE=(0)表示客户端优先连接主库,若主库不可用,客户端会依次尝试连接服务名中定义的备库;同时设置尝试次数300次与重试间隔1秒,并开启自动重连机制,确保集群故障切换期间应用能自动恢复连接。

五、TPCC测试

环境准备就绪后,正式进入TPCC压测阶段。

1、创建表空间/测试用户

SQL> create tablespace "BENCHMARKSQL1" datafile 'tpcc.dbf' size 2048 CACHE = "NORMAL";

SQL > CREATE USER "BENCHMARKSQL" IDENTIFIED BY "******" DEFAULT TABLESPACE "BENCHMARKSQL1";

SQL> GRANT DBA TO BENCHMARKSQL;

2、建立测试表

BenchmarkSQL按照TPCC规范创建10张标准业务表,表结构涵盖订单处理全链路。

create

table BENCHMARKSQL.bmsql_config

(

cfg_name varchar(30) cluster primary key,

cfg_value varchar(50)

);

create

table BENCHMARKSQL.bmsql_warehouse

(

w_id integer not null,

w_ytd decimal(22, 2) ,

w_tax float ,

w_name varchar(10) ,

w_street_1 varchar(20) ,

w_street_2 varchar(20) ,

w_city varchar(20) ,

w_state char(2) ,

w_zip char(9) ,

cluster primary key(w_id)

)

STORAGE

(

FILLFACTOR 1

);

create

table BENCHMARKSQL.bmsql_district

(

d_w_id integer not null,

d_id integer not null,

d_ytd decimal(22, 2) ,

d_tax float ,

d_next_o_id integer ,

d_name varchar(10),

d_street_1 varchar(20),

d_street_2 varchar(20),

d_city varchar(20),

d_state char(2) ,

d_zip char(9) ,

cluster primary key(d_w_id, d_id)

)

STORAGE

(

FILLFACTOR 1

);

create

table BENCHMARKSQL.bmsql_customer

(

c_w_id integer not null ,

c_d_id integer not null ,

c_id integer not null ,

c_discount float ,

c_credit char(2) ,

c_last varchar(16) ,

c_first varchar(16) ,

c_credit_lim float ,

c_balance float ,

c_ytd_payment float ,

c_payment_cnt integer ,

c_delivery_cnt integer ,

c_street_1 varchar(20),

c_street_2 varchar(20),

c_city varchar(20),

c_state char(2) ,

c_zip char(9) ,

c_phone char(16) ,

c_since timestamp ,

c_middle char(2) ,

c_data varchar(500) ,

cluster primary key(c_w_id, c_d_id, c_id)

);

create

table BENCHMARKSQL.bmsql_history

(

hist_id integer,

h_c_id integer,

h_c_d_id integer,

h_c_w_id integer,

h_d_id integer,

h_w_id integer,

h_date timestamp,

h_amount float ,

h_data varchar(24)

)

storage

(

branch(32, 32),

without counter

);

create

table BENCHMARKSQL.bmsql_oorder

(

o_w_id integer not null,

o_d_id integer not null,

o_id integer not null,

o_c_id integer ,

o_carrier_id integer ,

o_ol_cnt float ,

o_all_local float ,

o_entry_d timestamp ,

cluster primary key(o_w_id, o_d_id, o_id)

)

storage

(

without counter

);

create

table BENCHMARKSQL.bmsql_new_order

(

no_w_id integer not null,

no_d_id integer not null,

no_o_id integer not null,

cluster primary key(no_w_id, no_d_id, no_o_id)

)

storage

(

without counter

);

create

table BENCHMARKSQL.bmsql_order_line

(

ol_w_id integer not null,

ol_d_id integer not null,

ol_o_id integer not null,

ol_number integer not null,

ol_i_id integer not null,

ol_delivery_d timestamp ,

ol_amount float ,

ol_supply_w_id integer ,

ol_quantity float ,

ol_dist_info char(24) ,

cluster primary key(ol_w_id, ol_d_id, ol_o_id, ol_number)

)

storage

(

without counter

);

create

table BENCHMARKSQL.bmsql_stock

(

s_w_id integer not null,

s_i_id integer not null,

s_quantity float ,

s_ytd float ,

s_order_cnt integer ,

s_remote_cnt integer ,

s_data varchar(50),

s_dist_01 char(24) ,

s_dist_02 char(24) ,

s_dist_03 char(24) ,

s_dist_04 char(24) ,

s_dist_05 char(24) ,

s_dist_06 char(24) ,

s_dist_07 char(24) ,

s_dist_08 char(24) ,

s_dist_09 char(24) ,

s_dist_10 char(24) ,

cluster primary key(s_w_id, s_i_id)

);

create

table BENCHMARKSQL.bmsql_item

(

i_id integer not null,

i_name varchar(24) ,

i_price float ,

i_data varchar(50) ,

i_im_id integer ,

cluster primary key(i_id)
);

3、装载数据

在BenchmarkSQL的run目录下执行runLoader.sh脚本,脚本会根据props.dm配置的仓库数量(10仓)随机生成测试数据并插入各张表中。

cd /home/benchmarksql-5.0/run/

./runLoader.sh props.dm

数据装载完成后,库内数据量达到一定规模,可有效模拟真实业务环境。

4、TPCC正常测试

在BenchmarkSQL的run目录下执行runBenchmark.sh脚本,执行标准TPCC压测任务。该脚本会按照props.dm配置文件设定的仓库数、并发终端数以及事务权重比例,持续对数据库施加5分钟的业务负载。

./runBenchmark.sh props.dm

压测期间,重点关注两项核心指标:

  • tpmC(每分钟处理的新订单事务数):这是TPCC标准中衡量数据库事务处理能力的核心指标,直接反映系统在处理复杂订单业务时的综合性能;

  • TPS(每秒事务数):即系统每秒完成的事务总量,涵盖新订单、支付、订单查询等全部五种事务类型,反映系统的整体吞吐能力。

本轮测试获取的性能数据作为基准基线,与后续摸高测试、故障转移测试中的结果进行横向对比,量化不同场景下的性能差异。

5、TPCC摸高测试

所谓摸高测试,是指在标准压测基础上不断加大负载压力,直至系统吞吐量触及上限。本次实战使用SQL脚本进行优化。

首先,将准备好的SQL脚本上传至/home/dmdba目录。该脚本包含两类优化措施:一是为TPCC业务表创建适配的索引,加速查询过滤与关联操作;二是调整SQL写法或执行计划,减少全表扫描或低效关联,从而降低高并发下的资源消耗。

SQL> start /home/dmdab/xxx.sql

SQL脚本执行成功后,dm.ini文件中的相关参数得到针对性优化,此时重新执行压仓操作,再次启动测试结果如下:

通过上述结果可以看出SQL脚本优化有效,tpmC与TPS都有一定程度地提高。

6、TPCC故障转移测试(主机宕机)

①测试步骤:

启动5分钟的压测任务。在压测进行约40秒时,手动停止机器1(主机)的数据库服务与守护进程,模拟主机突发故障:

systemctl stop DmServiceGRP_RT_01

systemctl stop DmWatcherServiceWatche

约60秒时,手动启动机器1的数据库服务与守护进程,模拟主机修复后重新加入集群:

systemctl start DmServiceGRP_RT_01

systemctl start DmWatcherServiceWatche

②现象与结果:

从40秒至60秒期间,TPS急剧下降至0,业务完全中断,对应集群检测故障、选举新主、完成主备切换的过程;

约60秒后,机器2(原备机)切换为新主库,业务恢复,TPS回升,此时集群处于单机模式,TPS较两节点更为平稳且略有提升;

机器1修复后重新加入集群,集群回归两节点模式,TPS出现小幅度波动,性能略有下降;

③结论:

单机模式的事务处理性能优于集群模式,但集群模式提供了高可用保障,故障转移控制在20秒内,对业务影响有限。主机宕机后,监视器自动完成切换,且客户端通过重连机制成功连接到新主库,验证了守护集群自动故障转移的有效性。

7、TPCC故障转移测试(备机宕机)

①测试步骤:

同样执行5分钟压测;在压测进行约25秒时,停止机器2(备机)的守护进程和数据库服务,模拟备机故障:

systemctl stop DmServiceGRP_RT_02

systemctl stop DmWatcherServiceWatcher

约70秒时,手动开启机器2的数据库服务与守护进程模拟备机修复后重新加入集群。

②现象与结果:

25秒至75秒,集群仅剩单主机运行,TPS曲线保持稳定,且未出现业务中断,数值明显高于双节点集群模式,印证了单机性能更优的结论;

约75秒后,备机恢复并重新加入集群,集群恢复两节点状态,TPS曲线出现短暂小幅波动。

③结论:

备机宕机不影响主机对外服务,业务连续性好;单机模式性能更优但失去冗余保护;集群模式在备机恢复后能快速完成数据同步并重新加入集群,具备良好的自愈能力。

六、总结

1、文章围绕达梦数据库守护主备集群,以TPCC标准压测为手段,系统地验证了集群在高负载下的性能表现与高可用能力;

2、无论是主机宕机还是备机宕机,集群能在十秒内完成故障检测与自动切换,业务中断时间可控;

3、单机模式性能优于集群模式,但集群模式提供了不可替代的冗余保护,生产环境需根据业务对RTO/RPO的要求综合选型;

4、更多细节及高级配置,请参阅达梦官方文档https://eco.dameng.com;

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询