数据库系列之GaussDB数据库高可用能力测试验证

news2024/11/27 12:28:20

数据库的高可用能力是数据库的基本能力,可靠性的设计和机制能够保证数据库节点异常时能够正常切换、减少业务的影响范围和时间,保证业务的可用性和连续性。本文主要介绍GaussDB数据库的高可用能力测试验证情况,通过模拟故障场景来验证GaussDB集中式数据库在异常情况下的高可用能力。如果对测试过程不感兴趣的,可以直接跳到最后测试总结部分。


1、测试环境准备
1.1 环境部署架构

测试环境采用生产同城同一个数据库集群3AZ三节点部署方式,每个节点一个数据库服务器,这里的AZ可以认为是不同的机房模块。如下图所示:

在这里插入图片描述

  • CM由CM Agent、CM Server和OM monitor构成:
    • CM Agent:管理服务组件,由OMM拉起(周期1秒),主要负责CMS、DN进程的保活及启停,仲裁指标采集、仲裁命令执行等。集群的每台主机上均有CM Agent进程。CMA故障可能会导致启停能力丢失、实例故障检测能力丢失。
    • CM Server:管理服务组件,由CMA拉起(周期1秒),根据CM Agent上报的实例状态判定当前状态是否正常,是否需要修复,并下发指令给CM Agent执行。CM Server会将集群的拓扑信息保存在ETCD。
    • OM Monitor:管理服务组件,由crontab定时任务控制拉起(周期1分钟),主要负责OMM、etcd、cm_agent进程的保活及启停
  • DN节点:数据服务组件,由CMA拉起(周期1秒),负责存储业务数据、执行数据查询任务以及返回应用结果。DN主备节点之间采用Quorum复制或Paxos协议复制。
  • ETCD节点:管理服务组件,由OMM自动拉起(周期1秒),主要协助CMS选主、持久化集群仲裁信息、保存集群的拓扑信息等。

其中DN主节点、ETCD主节点和CM Server主节点不一定在同一台主机上,实际会分布在不同的服务器上。

1.2 高可用测试脚本
1.2.1 Benchmark-TPCC测试

1)脚本配置

db=postgers
driver=com.huawei.gaussdb.jdbc.Driver
conn=jdbc:gaussdb://xx.xx.xx.xx:port, xx.xx.xx.xx:port/dbxx?currentSchema=xx&targetServerType=master&socketTimeout=60&connectionTimeout=2&LoginTimeout=6&ltRowFetchSize=1000

2)运行脚本

##准备数据
sh runDatabaseBuild.sh props.gs
##测试运行
sh runBenchmark.sh props.gs
##清理数据
sh runDatabaseDestroy.sh props.gs
1.2.2 Sysbench测试

1)下载并安装sysbench工具,配置时指定支持pgsql

yum install –y make automake libtool pkgconfig libaio-devel
yum install –y openssl-devel mysql-devel postgresql-devel
./autogen.sh
./configure -prefix=xx --with-pgsql
Make && make install

2)修改GaussDB参数并重启

##修改参数password_encryption_type
Gs_guc set -Z datanode -N all -c “password_encryption_type=1”
##修改gs_hba.conf配置文件,添加以下内容
Host all all 0.0.0.0/0 md5
##修改完成后生效
##重新配置用户密码,否则不生效
=> alter user xxxx identified by ‘xxxx’;
因为sysbench连接gaussdb使用md5加密算法,默认是不支持的

3)创建用户和库后,运行脚本测试

##prepare语句
#sysbench oltp_read_write.lua --db-driver=pgsql --pgsql-host=xx.xx.xx.xx --pgsql-port=xx --pgsql-user=xx --pgsql-password=xx --pgsql-db=xx --tables=10 --table-size=1000000 --threads=10 --time=300 --report-interval=1 prepare
##run语句
#sysbench oltp_read_write.lua --db-driver=pgsql --pgsql-host=xx.xx.xx.xx --pgsql-port=xx --pgsql-user=xx --pgsql-password=xx --pgsql-db=xx --tables=10 --table-size=1000000 --threads=10 --time=300 --report-interval=1 run
1.2.3 中断继续执行

由于TPCC和sysbench测试的时候出现错误会中断退出,为了验证中断能重连,准备监控脚本在中断时候能够重新拉起任务执行,以验证故障时候业务的恢复时间。

#!/bin/sh

#输入变量
log_output=$1

#定义要监控的进程名称
PROCESS_NAME="runBenchmark.sh"

#定义启动进程的命令
cd /tmp/benchmarksq5.0/run
START_COMMAND="/bin/sh /tmp/benchmarksq5.0/run/runBenchmark.sh props.gs >> $1"

#日志文件路径
LOG_FILE="/tmp/monitor_and_restart.log"

# 无限循环,持续监控进程  
while true; do  
    # 检查进程是否存在  
    if ! pgrep -x "$PROCESS_NAME" > /dev/null; then  
        echo "$(date): $PROCESS_NAME is not running. Restarting..." | tee -a "$LOG_FILE"  
        # 尝试启动进程  
        eval $START_COMMAND  
        if [ $? -eq 0 ]; then  
            echo "$(date): $PROCESS_NAME restarted successfully." | tee -a "$LOG_FILE"  
        else  
            echo "$(date): Failed to restart $PROCESS_NAME." | tee -a "$LOG_FILE"  
        fi  
    else  
        echo "$(date): $PROCESS_NAME is running." | tee -a "$LOG_FILE"  
    fi  
    # 等待1秒钟  
    sleep 1  
done
2、高可用测试场景
2.1 DN主节点故障有效性
2.1.1 测试目标

考察GaussDB数据库DN主节点异常的情况下,对业务处理的影响,DN节点能否正常切换、业务影响的时间是多少。

2.1.2 故障场景

1)DN主节点停进程

#查询节点信息
Cm_ctl query -Cv
#执行停止操作
Cm_ctl stop -n 1 -D /xx/dn_6001

TPS降为0,持续约16s,为DN节点主备切换时间。

2)DN主节点进程kill

ps –fu $USER|grep ‘bin/gaussdb’|grep –v ‘grep’ | awk ‘{print $2}’|xargs kill -9

TPS降为0,持续约10s,为DN节点主备切换时间

3)DN主节点进程挂起

ps –fu $USER|grep ‘bin/gaussdb’|grep –v ‘grep’ | awk ‘{print $2}’|xargs kill -19

TPS降为0,持续约102s,为检测DN主节点异常及主备切换时间。进程挂起状态下,触发DN节点僵死检测机制。

4)DN主节点服务器禁用网卡

##禁用网卡
ifdown eth0
##恢复网卡
ifup eth0

测试发现DN主节点很快发生切换,但是应用连接挂起无响应,旧的连接没有释放并且链路不通,应用侧需要有链路超时断开机制。新的连接请求会使用新的DN主节点建立链接。

5)DN主节点服务器重启

##重启服务器
reboot

TPS降为0,持续约14s,为DN节点主备切换时间。

2.1.3 DN僵死检测机制

当DN进程处于D、T、Z或者连接超时等僵死状态时,DN无法及时处理业务请求,导致业务中断,影响业务正常功能。CM支持根据配置值定时检测DN是否处于僵死状态,对连续处于僵死状态的DN,达到配置次数后做重启恢复操作。

在这里插入图片描述

如果开启了enable_e2e_rto开关,当检测到1次僵死后会立即将实例状态置为UNKNOWN,进而触发选主仲裁流程。默认是没开启这个参数,由控制参数agent_phony_dead_check_interval(默认值10s)、phony_dead_effective_time(默认值5次)控制检测的时长。

  • 连接类僵死默认(10 * 5)秒后标记为僵死,触发重启。
  • 由于实例正常运行也会出现D状态,执行gstack等定位动作会出现T状态,为避免这种场景导致的误判和core生成不完整,D/T状态僵死规格为持续3分钟状态未变化,则触发重启。
  • coredump时也会有D/T状态,检测到数据库core标记后,此时不会做重启动作,但是会将实例置为UNKNOWN,进而触发选主仲裁流程。
2.2 DN节点副本故障有效性
2.2.1 测试目标

考察单个DN备节点和所有DN备节点异常时对业务的影响。

2.2.2 故障场景

1)单个DN节点停进程

#查询节点信息
Cm_ctl query -Cv
#执行停止操作
Cm_ctl stop -n 1 -D /xx/dn_6001

对业务无影响,进程需要手动start

2)单个DN节点进程kill

ps –fu $USER|grep ‘bin/gaussdb’|grep –v ‘grep’ | awk ‘{print $2}’|xargs kill -9

对业务无影响,进程1s后由CMA自动拉起

3)单个DN节点进程挂起

ps –fu $USER|grep ‘bin/gaussdb’|grep –v ‘grep’ | awk ‘{print $2}’|xargs kill -19

对业务无影响,进程触发僵死检测,100s后kill并由CMA自动拉起

4)单个DN节点服务器禁用网卡

##禁用网卡
ifdown eth0
##恢复网卡
ifup eth0

对业务无影响,网络正常后恢复。

5)单个DN节点服务器重启

##重启服务器
reboot

对业务无影响,DN进程在备机重启后自动拉起。

6)所有DN备节点进程kill

ps –fu $USER|grep ‘bin/gaussdb’|grep –v ‘grep’ | awk ‘{print $2}’|xargs kill -9

业务变成只读,持续约6s,为备节点DN进程恢复时间。

7)所有DN备节点进程挂起

ps –fu $USER|grep ‘bin/gaussdb’|grep –v ‘grep’ | awk ‘{print $2}’|xargs kill -19

业务变成只读,持续约150s后恢复,为检测DN备节点异常并kill后重新拉起恢复。DN进程挂起时触发DN僵死检测机制。

8)所有DN备节点网络异常

##禁用网卡
ifdown eth0
##恢复网卡
ifup eth0

业务变成只读,影响时长为网络恢复时间。

9)所有DN节点服务器重启

##重启服务器
reboot

业务变成只读,持续约110s后恢复,为DN备节点服务器重启恢复时间。

2.3 ETCD节点故障有效性
2.3.1 测试目标

考察ETCD节点异常时对业务的影响。

2.3.2 故障场景

1)ETCD所有节点kill进程

ps –fu $USER|grep ‘bin/etcd’|grep –v ‘grep’ | awk ‘{print $2}’|xargs kill -9

业务无影响,ETCD进程1s后由OMM组件自动拉起。ETCD主节点异常会发生切换。

2)ETCD所有节点进程挂起

ps –fu $USER|grep ‘bin/etcd’|grep –v ‘grep’ | awk ‘{print $2}’|xargs kill -19

业务无影响,ETCD进程1s后由OMM组件kill并自动拉起。ETCD主节点异常会发生切换。

2.4 CM Server组件故障有效性
2.4.1 测试目标

考察CM Server组件异常时对业务的影响。

2.4.2 故障场景

1)CM Server所有节点kill进程

ps –fu $USER|grep ‘bin/cm_server’|grep –v ‘grep’ | awk ‘{print $2}’|xargs kill -9

业务无影响,CM Server进程1s后由CMA组件自动拉起。CM Server主节点异常会发生切换。

2)CM Server所有节点进程挂起

ps –fu $USER|grep ‘bin/cm_server’|grep –v ‘grep’ | awk ‘{print $2}’|xargs kill -19

业务无影响,CM Server进程1s后由CMA组件kill并自动拉起。CM Server主节点异常会发生切换。

2.5 CM Agent组件故障有效性
2.5.1 测试目标

考察CM Agent异常时对业务的影响。

2.5.2 故障场景

1)CM Agent所有节点kill进程

ps –fu $USER|grep ‘bin/cm_agent’|grep –v ‘grep’ | awk ‘{print $2}’|xargs kill -9

业务无影响,CM Server进程1s后由OMM组件自动拉起。

2)CM Agent所有节点进程挂起

ps –fu $USER|grep ‘bin/cm_agent’|grep –v ‘grep’ | awk ‘{print $2}’|xargs kill -19

业务无影响,CM Server进程1s后由OMM组件kill并自动拉起。

2.6 备份影响验证
2.6.1 测试目标

考察GaussDB数据库在主节点和备节点备份时候对读写业务的影响。

2.6.2 测试场景

1)GaussDB数据库主节点发起备份对读写业务影响

经测试验证,主节点备份期间TPS下降40%左右,备份结束后恢复。

2)GaussDB数据库备节点发起备份对读写业务影响

经测试验证,备节点备份期间TPS和响应时间没有明显变化,对业务无影响。

3)GaussDB数据库备节点发起备份对备节点读业务影响

经测试验证,备节点备份期间备节点只读业务TPS和响应时间没有明显变化,对业务无影响。

2.7 AZ故障切换影响验证
2.7.1 测试目标

考察GaussDB数据库在AZ故障手动切换的时候对业务的影响。

2.7.2 测试场景

1)DN节点执行AZ切换

#switchover切换操作
cm_ctl switchover -z AZ2

切换期间TPS降为0,持续约9s,为DN节点主备AZ切换时间。

2)数据库管理平台(TPOPS)执行AZ切换

切换期间TPS降为0,持续约9s,为DN节点主备AZ切换时间。

2.8 DN主节点服务器性能degrade
2.8.1 测试目标

考察GaussDB数据库DN主节点服务器网络性能异常时对业务的影响。

2.8.2 测试场景

1)DN主节点网络延时高

#模拟网络延迟高操作
tc qdisc add dev eth0 root netem delay 2ms 0.3ms
#取消网络延迟高操作
tc qdisc del dev eth0 root netem delay 2ms 0.3ms

故障期间TPS下降约60%,网络恢复后TPS恢复正常。

2)DN主节点网络抖动高

#模拟网络抖动高操作
tc qdisc add dev eth0 root netem delay 0.1ms 2ms
#取消网络抖动高操作
tc qdisc del dev eth0 root netem delay 0.1ms 2ms

故障期间TPS下降约60%,网络恢复后TPS恢复正常。

3)DN主节点网络重传高

#模拟网络重传高操作
tc qdisc add dev eth0 root netem loss 10%
#取消网络重传高操作
tc qdisc del dev eth0 root netem loss 10%

故障期间TPS下降约95%,网络恢复后TPS恢复正常。

3、高可用测试总结

总体上来说,GaussDB数据库具备DN主节点进程和服务器异常时自动切换的能力、支持AZ机房级别的手动切换。这里测试验证了DN主节点故障、DN备节点异常等主要场景的高可用能力,测试结果如下表所示:

  1. DN主节点异常时,能够正常切换到备节点,切换期间业务TPS降为0,影响时长约10s。
  2. DN备节点异常时,CMA会自动拉起进程。在所有DN备节点异常时,保证高可靠性的前提下,数据库会变成只读状态,故障恢复时间为备节点恢复时间。
  3. 当DN节点进程挂起或服务端口假活状态时,DN会触发僵死状态的检测,此时DN异常处理的时长100s~200s。
  4. 当DN主节点网络异常时,DN主备虽然发生了切换,但是应用和DN原主节点之间的旧链接并没有立即释放,此时数据库端是无法主动断开这个连接(网络通信已经异常了,无法发送网络包),需要在应用侧或驱动侧配置链路超时断开机制,这样旧的连接会及时释放掉,业务请求会通过新主建立新的链接。不然业务请求会一直通过旧连接过来,交易会访问失败的。
  5. ETCD节点、CM Server节点和CM Agent节点异常时,对业务无影响,只会影响本身的监控和切换功能。ETCD主节点和CM Server主节点异常时都会发生主备切换。
  6. GaussDB数据库支持AZ级别的手动切换,切换期间业务TPS降为0,影响时长约10s。
  7. 备份期间的影响,如果是在DN主节点备份,TPS会下降40%,所以要求在备节点备份。备节点备份期间对主备节点的业务没有影响。

在这里插入图片描述

不过在测试过程中发现ETCD主节点和CM Server主节点不支持手动AZ切换、ETCD节点不支持手动启停,在功能细节上还有待完善。

以上是GaussDB集中式数据库的高可用测试相关验证总结,如果对测试结果有疑问的,欢迎一起讨论和指正。


参考资料:

  1. GaussDB数据库产品文档
  2. GaussDB数据库高可用部署方案简析

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

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

相关文章

Android BottomNavigationView 底部导航栏使用详解

一、BottomNavigationView简介 BottomNavigationView是官方提供可以实现底部导航的组件,最多支持5个item,主要用于功能模块间的切换,默认会包含动画效果。 官方介绍地址:BottomNavigationView 二、使用BottomNavigationView a…

IIT开发自适应协作界面,通过Xsens动作捕捉系统实现安全人机交互

意大利理工学院(IIT)的研究人员正在利用自适应界面转变人机协作,实现实时机器人调整和安全、无缝的交互。 本文要点: l 协作的实时适应:IIT的研究员西林图纳和厄兹达马尔开发了一种自适应协作界面(ACI),允许机器人根据人类的运动意图实时调…

一学就废|Python基础碎片,格式化F-string

Python 3.6 中引入了 f-string语法,提供了一种简洁直观的方法来将表达式和变量直接嵌入到字符串中进行字符串格式化,f -string背后的想法是使字符串插值更简单。 要创建 f -string,在字符串前加上字母 “f”即可,与字符串本身的格…

SVG无功补偿装置MATLAB仿真模型

“电气仔推送”获得资料(专享优惠) 模型简介 SVG(又称ASVG 或STATCOM)是Static Var Generator 的缩写,叫做静止无功发生器。也是做无功补偿的,比SVC 更加先进。其基本原理是将自换相桥式电路通过电抗器或…

MVC、EL、JSTL

1.MVC设计模式 三层: MVC: M(Model)模型:负责业务逻辑处理,数据库访问。 V(View)视图:负责与用户交互。 C(Controller)控制器:负责流程…

Web开发技术栈选择指南

互联网时代的蓬勃发展,让越来越多人投身软件开发领域。面对前端和后端的选择,很多初学者往往陷入迷茫。让我们一起深入了解这两个领域的特点,帮助你做出最适合自己的选择。 在互联网发展的早期,前端开发主要负责页面布局和简单的…

太通透了,Android 流程分析 蓝牙enable流程(应用层/Framework/Service层)

零. 前言 由于Bluedroid的介绍文档有限,以及对Android的一些基本的知识需要了(Android 四大组件/AIDL/Framework/Binder机制/JNI/HIDL等),加上需要掌握的语言包括Java/C/C等,加上网络上其实没有一个完整的介绍Bluedroid系列的文档&#xff0…

R语言绘图过程中遇到图例的图块中出现字符“a“的解决方法

R语言绘图过程中遇到图例的图块中出现字符的解决方法 因为我遇到这个问题的时候没在网上找到合适的方法,找到个需要付费的,算了。也许是因为问的方式不同,问了半天AI也回答出来,莫名有些烦躁,打算对代码做个分析&…

【C语言】字符串左旋的三种解题方法详细分析

博客主页: [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C语言 文章目录 💯前言💯题目描述💯方法一:逐字符移动法💯方法二:使用辅助空间法💯方法三:三次反转法💯方法对…

【346】Postgres内核 Startup Process 通过 signal 与 postmaster 交互实现 (5)

1. Startup Process 进程 postmaster 初始化过程中, 在进入 ServerLoop() 函数之前,会先通过调用 StartChildProcess() 函数来开启辅助进程,这些进程的目的主要用来完成数据库的 XLOG 相关处理。 如: 核实 pg_wal 和 pg_wal/archive_status 文件是否存在Postgres先前是否发…

大数据面试SQL题-笔记02【查询、连接、聚合函数】

大数据面试SQL题复习思路一网打尽!(文档见评论区)_哔哩哔哩_bilibiliHive SQL 大厂必考常用窗口函数及相关面试题 大数据面试SQL题-笔记01【运算符、条件查询、语法顺序、表连接】大数据面试SQL题-笔记02【查询、连接、聚合函数】​​​​​​​ 目录 01、查询 01…

【Python中while循环】

一、深拷贝、浅拷贝 1、需求 1)拷贝原列表产生一个新列表 2)想让两个列表完全独立开(针对改操作,读的操作不改变) 要满足上述的条件,只能使用深拷贝 2、如何拷贝列表 1)直接赋值 # 定义一个…

51单片机从入门到精通:理论与实践指南入门篇(二)

续51单片机从入门到精通:理论与实践指南(一)https://blog.csdn.net/speaking_me/article/details/144067372 第一篇总体给大家在(全局)总体上讲解了一下51单片机,那么接下来几天结束详细讲解,从…

【pyspark学习从入门到精通20】机器学习库_3

目录 使用 ML 预测婴儿生存几率 加载数据 创建转换器 创建估计器 创建管道 拟合模型 使用 ML 预测婴儿生存几率 在这一部分,我们将使用前一章中的数据集的一部分来介绍 PySpark ML 的概念。 在这一部分,我们将再次尝试预测婴儿的生存几率。 加载…

【计算机网络】核心部分复习

目录 交换机 v.s. 路由器OSI七层更实用的TCP/IP四层TCPUDP 交换机 v.s. 路由器 交换机-MAC地址 链接设备和设备 路由器- IP地址 链接局域网和局域网 OSI七层 物理层:传输设备。原始电信号比特流。数据链路层:代表是交换机。物理地址寻址,交…

LLamafactory 批量推理与异步 API 调用效率对比实测

背景 在阅读 LLamafactory 的文档时候,发现它支持批量推理: 推理.https://llamafactory.readthedocs.io/zh-cn/latest/getting_started/inference.html 。 于是便想测试一下,它的批量推理速度有多快。本文实现了 下述两种的大模型推理,并对…

【自动化Selenium】Python 网页自动化测试脚本(上)

目录 1、Selenium介绍 2、Selenium环境安装 3、创建浏览器、设置、打开 4、打开网页、关闭网页、浏览器 5、浏览器最大化、最小化 6、浏览器的打开位置、尺寸 7、浏览器截图、网页刷新 8、元素定位 9、元素交互操作 10、元素定位 (1)ID定位 &…

Table 滚动条始终停靠在可视区域的底部

1. 话题引入 存在这样一个场景:当页面尺寸发生变化时,希望滚动条能够随之动态调整,始终展示在 table 的可视区域的最下方,而不是整个 table 本身的最底部。 这种行为可以提升用户的使用体验,尤其是在处理大数据表格时…

【漏洞复现】CVE-2020-13925

漏洞信息 NVD - CVE-2020-13925 Similar to CVE-2020-1956, Kylin has one more restful API which concatenates the API inputs into OS commands and then executes them on the server; while the reported API misses necessary input validation, which causes the hac…

基于Springboot的心灵治愈交流平台系统的设计与实现

基于Springboot的心灵治愈交流平台系统 介绍 基于Springboot的心灵治愈交流平台系统,后端框架使用Springboot和mybatis,前端框架使用Vuehrml,数据库使用mysql,使用B/S架构实现前台用户系统和后台管理员系统,和不同级别…