摘要:GaussDB在大规模集群上运行的过程中,随着时间推移,局部节点可能会呈现性能重大降落的状况。此时这些节点依然能对外提供服务,但响应显著变慢,解决同样的申请所需工夫较其余失常节点大很多,从而影响了整个集群的性能。这样的节点称为“亚健康节点”,或“慢节点”。
本文分享自华为云社区《GaussDB(DWS)新技术 集群慢节点居然无处可藏》,原文作者:菜花 。
背景
慢实例简介
GaussDB在大规模集群上运行的过程中,随着时间推移,局部节点可能会呈现性能重大降落的状况。此时这些节点依然能对外提供服务,但响应显著变慢,解决同样的申请所需工夫较其余失常节点大很多,从而影响了整个集群的性能。这样的节点称为“亚健康节点”,或“慢节点”。
大规模集群中亚健康节点的精确辨认自身是一个难题。通过深刻察看和剖析,咱们发现节点响应慢还可能是业务歪斜导致的,例如对某些数据的集中拜访,或是某些业务须要较多的运算,导致某些节点的工作量剧增。此外,这样的节点不属于性能低下的慢节点。如果单纯通过响应工夫判断慢节点容易导致误判,而频繁的误报警则会升高用户的体验,减少工程人员的排查累赘。本个性实现须要在充分考虑业务歪斜等因素的前提下,迅速、精确地辨认出慢节点。
慢实例的获取机制
Gauss DB中的期待状态视图pg_thread_wait_status能够显示每个实例上各线程的刹时状态。通过深入分析其监控原理,联合现网的工夫,咱们发现通过该视图无效地发现响应慢的节点。均匀低来讲,节点响应越慢,下面的期待事件就越多,二者存在正相干,因而能够通过查问该视图中各节点的期待事件数量来掂量节点响应的快慢。依据现网的教训,如果期待状态视图中期待的DN大多数是同一个节点上的DN,则这个节点大概率是慢节点。
以图1所示的工行集群上的期待状态视图查问后果为例,890这个节点上的事件期待数量在间断屡次查问中均为全网之冠,且占全网期待数量的比例在50%以上。最终硬件检测表明890节点的确存在硬件故障,导致运行迟缓。
GaussDB的数据节点(Datanode)采纳主备模式。如果一个物理机器上的Datanode全是备机,该物理机器并不会间接对外提供服务,也无奈通过pg_thread_wait_status视图查问期待事件的数量。然而主DN须要向备DN同步日志。如果这样的“全备机”物理机器恰好是一个慢节点,因为同步日志迟缓,会影响主DN的性能。尽管主机上的pg_thread_wait_status视图期待数量会有所增加,但因为该物理机器对应的主DN被扩散到多个物理节点上,单个物理节点上期待数量可能并不能达到阈值。针对这种状况,还须要对期待视图中主DN对应的备DN做进一步计算,间接失去“全备机”物理机器的期待数量。
图1.1 通过期待视图辨认慢节点
因为主备切换,数据歪斜等起因,集群中各节点的负载并不平衡,负载高可能也会造成节点响应迟缓。为了防止误报,须要打消负载歪斜对于亚健康节点辨认的烦扰。为了简化判断,咱们进一步假设负载歪斜和故障不会同时呈现在同一节点上。也就是说,如果一个节点的负载程度较高,响应慢被认为是失常的,不会被当成慢节点而告警。
节点的负载程度能够通过数据的访问量和运算量来掂量,而后者能够通过IO的数量、耗费CPU工夫以及网络数据流量来进行量化计算。GaussDB外部对IO的数量(block数)、CPU工夫和网络数据流量进行了打点统计,并通过多种视图出现进去。通过定期拜访这些视图,能够取得节点在单位工夫内的工作量,进而取得每个节点在各个时段的负载程度。
与期待事件的数量一样,“全备机”的物理机器的负载程度,也须要通过其对应的主DN的负载程度间接推算。因为备机很少参加运算,次要工作是接管日志,因而次要通过主DN的IO数量和网络流量来掂量备机的忙碌水平。并且因为间接推算的准确性绝对较差,只有“全备机”节点才会采纳这种形式。只有某台物理机器上有主DN的存在,就间接采纳主DN的数据。
对慢实例进行监控
场景剖析
依据客户需要剖析,能够将客户需要定义为集群中慢节点产生次数与频率的工夫序列及详情展现。蕴含以下次要性能:
- 开启敞开慢实例检测性能
- 配置慢实例检测参数
- 采集慢实例信息上报DMS数据库
- 将慢实例触发次数及慢实例名称等信息以工夫序列展现在页面上
计划整体架构设计
图 2.1 慢实例监控整体架构图
整体计划属于慢实例检测端到端的新增项,并调用健康检查相干模块进行慢实例数据生产。
① dms-agent调用健康检查脚本并传入collection下发的配置参数,次要操作包含初始启动调用,以及过程中断重启调用;
② 健康检查脚本采集慢节点数据到用户数据库中
③ dms-agent通过查库获取相干数据
④ dms-agent依据dms-collection下发的上报频率进行数据上报
⑤ dms-collection接管dms-agent上报的数据进行dms数据库入库等。
⑥ dms-monitoring查问dms数据库获取慢节点数据展现到dws-console前端页面
⑦ dws-console通过dms-monitoring下发启停配置到dms-agent,并通过dms-monitoring将启停信息长久化到dms数据库中; dws-console通过dms-monitor长久化监控参数配置到dms数据库中。
⑧ dms-monitoring将批改后的配置通过grpc下发到dms-agent,dms-agent依照新的上报频率以及配置进行数据采集上报
⑨ dms-agent在配置更新后,依照新配置进行健康检查脚本的重启操作。
慢实例数据详解及数据处理
慢实例表结构设计
drop table if exists dms_mtc_cluster_slow_inst cascade;create table dms_mtc_cluster_slow_inst( ctime bigint not null, -- 采集工夫 virtual_cluster_id int not null, -- 虚构集群id check_time bigint, -- 检测时间 host_id int, -- 主机id host_name varchar(128), -- 主机名 inst_id varchar(64), -- 集群调配的实例id inst_name varchar(128), -- 实例名称 primary key(virtual_cluster_id, inst_id, check_time));
慢实例数据处理
数据入库Dms-collection接管agent上报的数据进行入库
insert into dms_mtc_cluster_slow_inst (ctime, virtual_cluster_id, check_time, host_id,host_name, host_id, inst_name)values (#{sinst.ctime}, #{ sinst.virtual_cluster_id}, #{sinst.check_time},#{sinst.host_id}, #{sinst.host_name}, #{sinst.inst_id}, #{sinst.inst_name});
数据查问
Dms-monitoring查问慢实例工夫序列以及数量
select check_time, count(*) as slow_inst_numfrom dms_mtc_cluster_slow_instwhere virtual_cluster_id = (select virtual_cluster_id from dms_meta_cluster where cluster_id = #{clusterId})and check_time >= #{from}and check_time <= #{to}group by check_time; Dms-monitoring查问慢实例数据详情select t1.check_time, t1.host_name, t1.inst_name, t2.trigger_timesfrom (select check_time, host_name, inst_name from dms_mtc_cluster_slow_inst where virtual_cluster_id = ( select virtual_cluster_id from dms_meta_cluster where cluster_id = #{clusterId}) and check_time = #{checkTime}) as t1 inner join (select inst_name, count(*) as trigger_times from dms_mtc_cluster_slow_inst where virtual_cluster_id = (select virtual_cluster_id from dms_meta_cluster where cluster_id = #{clusterId}) and check_time >= (#{checkTime} - 86400000) and check_time <= #{checkTime} group by inst_name) as t2 on t1.inst_name = t2.inst_name;
想理解GuassDB(DWS)更多信息,欢送微信搜寻“GaussDB DWS”关注微信公众号,和您分享最新最全的PB级数仓黑科技,后盾还可获取泛滥学习材料~
点击关注,第一工夫理解华为云陈腐技术~