GaussDB(DWS)高可用之单点故障业务不中断
1.GaussDB AZ内单点故障
RTO(Recovery Time Objective,RTO)恢复时间目标,指在故障或灾难发生之后业务恢复时间,主要指的是所能容忍的应用停止服务的最长时间,也就是从灾难发生到业务系统恢复服务功能所需要的最短时间周期;
GaussDB(DWS) AZ内的单实例和单节点故障情况下,RTO=0,是通过单点故障自恢复和SQL语句出错自动重试实现的。
1)单点故障自恢复
GaussDB(DWS)高可用架构采用主备从架构,之前已经有很多博文对该架构进行了详细的介绍,这里简单进行普及:
集群正常情况下,主机和备机之间通过日志复制和数据页复制强同步,主机和从备之间只保持连接,不同步数据,当备机发生故障时,主机自动感知,主机与从备开始进行日志和数据页的强同步;如果是主机发生故障,通过集群管理感知,并仲裁备生主,新主与从备进行日志和数据页的强同步;因此,同环内发生单点故障的情况下,仍然时刻保证了数据的2个副本强同步,不会影响服务的可用性;
2)CN Retry功能
GaussDB(DWS)支持在SQL语句执行出错时的自动重试功能(下文简称CN Retry)。对于来自gsql客户端、JDBC、ODBC驱动的SQL语句,在SQL语句执行失败时,CN端能够自动识别语句执行过程中的报错,并重新下发任务进行自动重试。CN Retry功能是默认开启的,由GUC参数max_query_retry_times进行控制,支持范围是0-20,默认为6,代表可语句出错时会自动重试6次,0代表关闭该功能,GaussDB(DWS)绝大部分错误类型都支持CN Retry功能,比如主机单点故障,业务断连的情况。
GaussDB(DWS) 主要是通过以上2个特性来保证单点故障业务不中断,当某个DN主机故障时,通过集群管理和高可用的单点故障自恢复,自动备机升主,此时客户业务虽然实际产生短暂的断连,通过CN Retry功能对业务在后台进行重新下发执行,客户除了感知到短暂业务缓慢,不会影响业务执行。
2.GaussDB(DWS)单点故障实测
我们通过以下步骤对该功能进行简单测试:
1)准备压测程序模拟用户业务,探测程序方便观察业务情况;压测程序可以任意选定,模拟一定的业务压力即可。
探测程序,大概如下,观测较方便:
dbname=rep_hang
port=28308
for((i=1;i<=10000000;i++))
do
echo "########## current times: $i ##########"
echo `date`
gsql -p $port $dbname -c "insert into test_row select nextval('seq_test_001'),now() returning *;"
done
启动业务后的压力情况:
top - 21:53:56 up 63 days, 19:11, 2 users, load average: 47.09, 23.51, 9.65
Tasks: 1258 total, 2 running, 754 sleeping, 0 stopped, 0 zombie
%Cpu(s): 37.6 us, 9.3 sy, 0.0 ni, 50.6 id, 1.8 wa, 0.0 hi, 0.8 si, 0.0 st
KiB Mem : 40132032+total, 36850240 free, 19214592 used, 34525548+buff/cache
KiB Swap: 4194240 total, 4194240 free, 0 used. 28847993+avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
54439 mpp651 20 0 82.6g 4.3g 1.9g S 1914 1.1 212:44.01 gaussdb
54427 mpp651 20 0 78.3g 4.4g 1.9g S 1540 1.1 200:15.33 gaussdb
54382 mpp651 20 0 56.5g 1.8g 1.0g S 371.1 0.5 686:57.20 gaussdb
54404 mpp651 20 0 54.4g 1.6g 1.2g S 172.4 0.4 89:12.34 gaussdb
54421 mpp651 20 0 55.0g 1.6g 1.2g S 167.1 0.4 93:04.60 gaussdb
2)对单个主机节点注入网络故障
ifconfig enp131s0 down
3) 观察探测程序
########## current times: 150 ##########
Sun Jan 10 22:43:01 CST 2021
id | time1
-------+----------------------------
95026 | 2021-01-10 22:43:01.052801
(1 row)
INSERT 0 1
########## current times: 151 ##########
Sun Jan 10 22:43:01 CST 2021
id | time1
-------+----------------------------
95028 | 2021-01-10 22:43:01.081416
(1 row)
INSERT 0 1
########## current times: 152 ##########
Sun Jan 10 22:43:01 CST 2021
id | time1
-------+----------------------------
95031 | 2021-01-10 22:44:05.251098
(1 row)
INSERT 0 1
########## current times: 153 ##########
Sun Jan 10 22:43:32 CST 2021
id | time1
-------+----------------------------
95032 | 2021-01-10 22:44:05.288718
(1 row)
可以观测到,业务未发生断连,短暂的卡住了一分钟后继续快速执行。 卡住的时间主要和当时集群的业务压力,以及作业类型,和正在执行的语句执行到了什么阶段相关,这里业务压力比较大。
结论:GaussDB(DWS) AZ内的单实例和单节点故障情况下,业务不中断。
- 点赞
- 收藏
- 关注作者
评论(0)